# position
absolute 是非常独立的css属性值,其样式和行为表现不依赖任何css属性就可以完成
实现 icon 在图片的左上方,只需要设置 i 标签
position: absolute
即可,无需设置 .box1position: relative
以及 i 的top left
等属性
.box1
i icon
img(src=" https://s.cn.bing.net/th?id=OHR.DragonBoat2022_ZH-…2392684688_1920x1080.jpg&rf=LaDigue_1920x1080.jpg", alt="", height=100)
1
2
3
2
3
.box1 {
i {
position: absolute;
}
}
1
2
3
4
5
2
3
4
5
# position 与 text-align
- position 会让元素块状化,而块状化元素是不会受内联元素对齐text-align 影响的, 但如下例子 text-align 可以改变 absolute 元素的位置。
原因是 幽灵空白节点 和 无依赖相对定位 共同作用的结果
.box4
img(
src=" https://s.cn.bing.net/th?id=OHR.DragonBoat2022_ZH-…2392684688_1920x1080.jpg&rf=LaDigue_1920x1080.jpg",
alt="",
height=100
)
1
2
3
4
5
6
2
3
4
5
6
.box4 {
width: 300px;
height: 200px;
border: 1px solid;
padding: 10px;
text-align: center; // 有作用
img {
position: absolute;
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 但此时图片并不是居中的,实际居中的是幽灵空白节点,设置
img
margin-left: -50px
即可(50px 是图片宽度的一半)
# position 与 overflow
- 如果 overflow 不是定位元素,同时绝对定位元素和 overflow 容器之间没有定位元素,则 overflow 无法对 absolute 元素进行剪裁
.box5
img(
src=" https://s.cn.bing.net/th?id=OHR.DragonBoat2022_ZH-…2392684688_1920x1080.jpg&rf=LaDigue_1920x1080.jpg",
alt="",
height=100
)
1
2
3
4
5
6
2
3
4
5
6
.box5 {
border: 1px solid;
height: 20px;
overflow: hidden;
// 如果 img 不是绝对定位元素,box5 设置 `overflow: hidden` 时 会对img 剪裁
// img 设置绝对定位后,不会被剪裁,可以完整显示
img {
position: absolute;
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 如果 overflow 属性所在的元素同时也是定位元素,里面的绝对元素会被剪裁
.box6
img(
src=" https://s.cn.bing.net/th?id=OHR.DragonBoat2022_ZH-…2392684688_1920x1080.jpg&rf=LaDigue_1920x1080.jpg",
alt="",
height=100
)
1
2
3
4
5
6
2
3
4
5
6
.box6 {
border: 1px solid;
height: 20px;
overflow: hidden;
position: relative;
img {
position: absolute;
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 如果 overflow 的属性值不是 hidden 而是 auto 或 scroll ,即使绝对定位元素高度比 overflow 元素高度还要大,也都不会出现滚动条。 如果 box7 容器有文字,高度超过容器,则会出现滚动条,但绝对定位元素不受滚动影响(不滚动)。
.box7
img(
src=" https://s.cn.bing.net/th?id=OHR.DragonBoat2022_ZH-…2392684688_1920x1080.jpg&rf=LaDigue_1920x1080.jpg",
alt="",
height=100
)
1
2
3
4
5
6
2
3
4
5
6
.box7 {
border: 1px solid;
background-color: #f2f2f2;
height: 100px;
overflow: auto;
img {
height: 200px;
position: absolute;
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11