问答篇
CSS 中可以通过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内?
- 设置
display: none
- 设置
visibility: hidden
- 设置
width: 0; height: 0;
- 设置
opacity: 0
- 设置
z-index: -1000
(小于0
) - 其父元素
overflow:hidden
,该元素margin-left: -9999px
- 若是文本元素,设置
text-indent: -9999px
- ...
如何实现自适应的正方形?
padding-top/bottom
百分比取值
解决思路一:padding-top/bottom
取值为百分比时,是相对父元素的宽度进行计算的,因此可以这样:
/* 方式一:设置 `padding-top/bottom`撑开容器 */
.placeholder {
width: 100%;
height: 0; /* 不设置此项时,增加内容会增加 height;设置为 0,可保证元素为正方形 */
padding-bottom: 100%;
}
1
2
3
4
5
6
2
3
4
5
6
但是以上也有弊端:无法设置元素的max-height
(因为元素的height
都为0
,更不谈max-height
了..)
/* 方式二:利用伪元素的 margin/padding-top/bottom 撑开容器 */
.placeholder {
width: 100%;
max-height: 100px; /* 此时可以愉快的设置 max-height */
overflow: hidden; /* 使用 margin-top/bottom 时需要触发 BFC,消除 margin 重叠 */
}
.placeholder:after {
content: '';
display: block;
margin-top: 100%;
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
但是,在.placeholder
元素里添加内容,依然会增加height
,可以将内容单独放在其他标签内,并绝对定位
解决思路二:CSS3 vw 单位
CSS3 中新增了一组相对于可视区域百分比的长度单位vw
, vh
, vmin
, vmax
。其中vw
是相对于视口宽度百分比的单位,1vw
= 1% viewport width,vh
是相对于视口高度百分比的单位,1vh
= 1% viewport height;vmin
是相对当前视口宽高中较小
的一个的百分比单位,同理vmax
是相对当前视口宽高中较大
的一个的百分比单位。
利用vw
单位,我们可以很方便做出自适应的正方形:
.placeholder {
width: 100%; /* 假设 100% 是指屏幕宽度 */
height: 100vw;
}
1
2
3
4
2
3
4