介绍
实现如下图所示的排版效果,一段关于图片的信息浮在图片上。
HTML 结构如下:
1 | <figure> |
除了通过 translateY、相对定位、margin 负值定位、绝对定位和 Grid 布局实现上面效果以外,CSS container
属性也可以实现元素重叠这种效果。
container 属性与元素重叠
container-type
CSS 属性将元素定义为查询容器。后代可以查询其大小、布局、样式和状态等方面。可以具有以下值:- size:为块和内联轴上的维度查询建立查询容器。将布局、样式和大小包含应用于元素。
- inline-size:为容器的内联轴上的维度查询建立查询容器。将布局、样式和内联大小包含应用于元素。
- block-size:在容器的块轴上建立维度查询的查询容器。将布局、样式和块大小包含应用于元素。
- style:为样式查询建立查询容器。
- state:为状态查询建立查询容器。
- 所有具有尺寸收缩特性的元素,设置为
container
容器元素后,其宽度尺寸都会变成0
,包括任意的display
计算值是inline-*
的元素,浮动元素,绝对定位元素,flex
子项,或者width
宽度值设置fit-content
的元素。例如:1
<span class="element">我的宽度是?</span>
此时,1
2
3
4.element {
float: left;
container-type: inline-size;
}.element
元素占据的宽度一定是0
。
所以,我们就可以利用这种特性来实现元素重叠效果。
实现
由于图片本身就有内在尺寸,因此,就算变成 container
容器也不会宽度是 0
,所以,我们可以在外面再嵌套一层标签,所以 HTML 结构修改为如下:
1 | <figure> |
此时,通过下面的 CSS 代码,就可以实现我们想要的布局效果了:
1 | figure { |
另外,如果希望高宽尺寸都是 0
,可以设置 container-type
属性值是 size
:
1 | container-type: size; |
码上掘金
总结
- translateY、相对定位、margin 负值定位,使元素位置偏移;
- 绝对定位重叠,元素完全脱离文档流;Grid 重叠,宽高一致强制位置重合;
- 而
container
重叠则是通过宽度为0
达到重叠效果。
这几种重叠机制各异,也有各自适合使用的场景,大家根据实际情况酌情选择。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 张坤的博客!
评论