css绘制场景应用
css绘制场景应用
1、三角形
利用border
属性,将border
可视化,发现它并不是矩形组成的:
1 |
|
将div盒子的宽高设置为0,显示的是四个三角形:
于是利用透明度、边框长度等进行组合,绘制三角形:
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
2、扇形
利用三角形的绘制,加上一个圆角属性就可以啦~
1 |
|
3、圆形
先绘制一个正方形,再设置圆角属性 border-radius: 50%
1 |
|
4、半圆
绘制长宽为2比1的矩形,再设置圆角属性,只设置左上,右上。
1 |
|
5、宽高自适应正方形
利用vw/vh,宽高取相对于视口的百分比单位
1
2
3
4
5div {
width: 10vw;
height: 10vh;
background-color: tomato;
}利用width取百分比,高度由padding撑开,和width的百分比相同。
1
2
3
4
5div {
width: 20%;
padding-top: 20%;
background-color: tomato;
}利用width取百分比,高度由伪元素撑开。父元素一定要设置overflow: hidden;
若不设置
overflow: hidden
,父级 div 的高度会被「塌陷」为 0!常规文档流中,相邻元素的垂直外边距会合并伪元素的 margin-top 会「穿透」父容器,导致父容器高度计算异常。通过设置
overflow: hidden
:创建了独立的布局环境 (BFC)
阻断外边距折叠
强制父容器包含子元素的 margin
说明:还可以设置 **display: flow-root;**或者 **float: left;**或者 position: absolute;
1
2
3
4
5
6
7
8
9
10div {
width: 20%;
overflow: hidden;
background-color: tomato;
}
div::after {
content: '';
display: block;
margin-top: 100%;
}
6、梯形
先给一个宽度,再给下边距,显示为一个矩形后,再定义透明的右边距,去覆盖掉一部分。
1 |
|
同理,可以绘制等腰梯形:
1 |
|
7、画一条0.5px的线
利用缩放 transform: scale(0.5,0.5);
8、如何解决 1px 问题?
1px问题:通常指的是在网页设计中使用 CSS 定义 1px 的线条或边框时,在不同设备(尤其是高分辨率或 Retina 屏幕)上实际显示效果与预期不一致的问题。设计师常希望得到“极细”的线条(hairline),在某些设备上 1px 的线条可能看起来太粗。在高分辨率屏幕上,一个 CSS 像素可能对应多个物理像素。例如,在 Retina 屏幕上,1 CSS 像素可能等于 2 或 3 个物理像素,这样 1px 的边框就会显得比真正的 1 个物理像素粗很多。
**? ** 如何解决呢
1、获取DPR,直接把 1px 改成 1/devicePixelRatio 后的值。这种方法的缺陷在于兼容性不行,IOS 系统需要8及以上的版本,安卓系统则直接不兼容。
1
2
3
#container[data-device="2"] {
border:0.5px solid #333
}2、伪元素先放大后缩小。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#container[data-device="2"] {
position: relative;
}
#container[data-device="2"]::after{
position:absolute;
top: 0;
left: 0;
width: 200%;
height: 200%;
content:"";
transform: scale(0.5);
transform-origin: left top;
box-sizing: border-box;
border: 1px solid #333;
}
}3、viewport 缩放。这样做的副作用也很大,整个页面被缩放了。
1
<meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no">