能做出响应式正方形,因::before的padding-top百分比按父宽计算并参与盒模型高度,需配合position:relative与absolute定位内容,否则错位或失效。
直接用
+
能做出响应式正方形,但必须配合
和子元素的
,否则内容会错位或高度失效。
为什么 ::before 的 padding-top 能撑高容器
因为
伪元素
的
百分比是按父容器宽度计算的——哪怕它没内容、没显式 height,只要设了
,这个 padding 就会参与盒模型高度计算。关键在于:它不依赖子元素存在,也不改动 HTML 结构。
但注意:
默认是 inline 水平,必须加
或
才能触发 padding 生效;且父容器不能设
,否则会压制伪元素撑高的效果。
标准写法里三个角色缺一不可
必须有
:否则内部
子元素会向上找定位上下文,可能脱离预期范围
只负责撑高:只设
、
、
,不设 width/height,也不设 margin
真实内容必须用
填满:比如
或具体类名,且要设
iOS Safari 和旧 WebView 中常见失效原因
不是所有浏览器都严格按规范处理伪元素的百分比 padding,尤其 iOS 15.3 及更早、部分安卓 WebView 中,
的
可能被忽略或算成 0。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
立即学习
“
前端免费学习笔记(深入)
”;
排查要点:
父容器是否被
或
导致“无明确宽度”?加
或显式
修复
是否同时用了
和
?二者冲突,删掉 float
是否在伪元素上误加了
或
?这些会干扰 padding 的高度贡献
最易被忽略的一点:当父容器是 flex 或 grid 子项时,它的 width 必须可被明确解析(比如有
、
或固定
),否则
会失去计算基准。
::beforepadding-top: 100%position: relativeposition: absolutepadding-topdisplay: block::beforedisplay: blocktableheight.squareposition: relativeabsolute.square::beforecontent: ""display: blockpadding-top: 100%position: absolute.square > *top: 0; left: 0; width: 100%; height: 100%::beforepadding-topflex: 1width: automin-width: 0width: 100%float: leftposition: absoluteheightmarginflex-basismin-widthwidthpadding-top: 100%