CSS能够生成各种形状。正方形和矩形很容易,因为它们是 web 的自然形状。添加宽度和高度,就得到了所需的精确大小的矩形。添加边框半径,你就可以把这个形状变成圆形,足够多的边框半径,你就可以把这些矩形变成圆形和椭圆形。
我们还可以使用 CSS 伪元素中的 ::before
和 ::after
,这为我们提供了向原始元素添加另外两个形状的可能性。通过巧妙地使用定位、转换和许多其他技巧,我们可以只用一个 HTML 元素在 CSS 中创建许多形状。
虽然我们现在大都使用字体图标或者svg图片,似乎使用 CSS 来做图标意义不是很大,但怎么实现这些图标用到的一些技巧及思路是很值得我们学习。
圆
1 | div { |
四个不同方向的半圆
1 | .top |
四分之一圆
1 | { |
椭圆
1 | { |
菱形
1 | .quarter-ellipse{ |
三角形
1 | /* 上三角 */ |
箭头
1 | #curvedarrow { |
梯形
1 | #trapezoid { |
六角星
1 | #star-six { |
五角星
1 | #star-five { |
五边形
1 | #pentagon { |
六边形
1 | #hexagon { |
八边形
1 | #octagon { |
爱心💗
1 | #heart { |
无穷大(莫比乌斯环)
1 | #infinity { |
钻石
1 | #cut-diamond { |
吃豆人
1 | #pacman { |
对话泡泡
1 | #talkbubble { |
太极
1 | #yin-yang { |
放大镜
1 | #magnifying-glass { |
月亮
1 | #moon { |
虚线
1 | .dotted-line{ |
气泡框
使用绝对定位进行三角形覆盖,实现气泡框突出部分。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37<style>
.bubble-tip {
width: 100px;
height: 30px;
line-height: 30px;
margin-left: 10px;
border: 1px solid #c5c5c5;
border-radius: 4px;
position: relative;
background-color: #fff;
}
.bubble-tip::before {
content: "";
width: 0;
height: 0;
border-style: solid;
border-width: 10px 10px 10px 0;
border-color: transparent #ffffff transparent transparent;
position: absolute;
top: 5px;
left: -10px;
z-index: 2;
}
.bubble-tip::after {
content: "";
width: 0;
height: 0;
border-style: solid;
border-width: 10px 10px 10px 0;
border-color: transparent #c5c5c5 transparent transparent;
position: absolute;
top: 5px;
left: -11px;
z-index: 1;
}
</style>
<div class="bubble-tip"></div>
卡券贴
在CSS3当中,background添加了background-size
属性,控制背景图片的大小,配合background-position
属性,可以在一个背景下面展示多张图片。详见background-MDN。
background-size: cover;使背景图像完全覆盖背景区域。也可以js获取图片宽高再比较一下,再决定往哪个方向居中。
卡券贴的核心是使用透明白色径向渐变radial-gradient,分别让4张背景图中的左下角、右下角、右上角和左下角出现缺省,再利用drop-shadow实现元素阴影,从而达到效果。
radial-gradient语法如下:
1
radial-gradient(shape size at position, start-color, ..., last-color)
1 | <style> |
图片切角
1 | background: url(image.png); |
1px高的线条
1 | <div style="height:1px;overflow:hidden;background:red"></div> |