当margin/padding取形式为百分比的值时,无论是left/right,还是top/bottom,都是以父元素的width为参照物的

场景:购物平台商品的展示界面

当图片还未加载出来时,高度为零,加载出来后高度变化,出现一个闪烁的过程,影响用户体验。所以需要先进行占位,如上图所示。

使用margin/padding的百分比值来解决自适应高度的关键在于:容器margin/padding的百分比参照物是父元素的宽度,而容器的width的百分比参照物也是父元素的宽度,俩属性参照物一致,那么想要把这俩属性的值统一起来就很简单了。

若图片是宽高比是1:2的。

设置容器的padding-bottom/top

<div class="container"><img />
</div>
.container {width: 50%; // 父元素宽度的一半,显示两列。padding-top: 100%;
}

给子元素/伪元素设置margin/padding撑开容器

若使用上面的方案,会导致max-height失效。原因是容器的高度本来就是padding撑的,而内容高度为0,max-height无法起作用。那想要优化这一点,唯一的方法就是利用内容高度来撑开而非padding,这个方案跟消除浮动所用的方案非常相似:给容器添加一个子元素/伪元素,并把子元素/伪元素的margin/padding设为100%,使其实际高度相当于容器的宽度,如此一来,便能把容器的高度撑至与宽度一致了。由于添加子元素与HTML语义化相悖,因此更推荐使用伪元素(:after)来实现此方案。

.container {width: 50%;position: relative;overflow: hidden;  //需要触发BFC消除margin折叠的问题
}
.container:after {content: '';display: block;margin-top: 200%; //margin 百分比相对父元素宽度计算
} 

向容器内部添加内容

上述方案只提及如何不依赖容器内容来撑开容器,那么,在撑开容器后,如何给容器添加内容(图片、文本等)呢?
答案很简单,那就是利用position: absolute;

img {position: absolute;top: 0;width: 100%;
}

转载于:https://www.cnblogs.com/xiongxiaolong/p/10168611.html

巧用margin/padidng的百分比值占位,避免闪烁相关推荐

  1. 巧用margin/padding的百分比值实现高度自适应(

    转载自https://segmentfault.com/a/1190000004231995 巧用margin/padding的百分比值实现高度自适应(多用于占位,避免闪烁) 布局 自适应 前端 cs ...

  2. 左右margin top问题百分比值

    不想说今天心情有多差! 9点多開始发现一个"bug",需求是依据屏幕高度动态调整某个div的位置.代码大概是这种. <div style="margin-top: ...

  3. css top 定位百分比,css 使用relative设置top为百分比值的方法(仿百度首页)

    前言: 最近在学习HTML.CSS的过程中,想模仿一下百度首页.发现搜索框这一部分与上下其它元素的空白距离可以随着窗口大小变化(效果如下图所示),于是自己研究了一下并记录下来. 效果实现 垂直伸缩 * ...

  4. 在饼图上显示百分比值(报表生成器和 SSRS)

    在饼图上显示百分比值(报表生成器和 SSRS) 默认情况下,图例中显示了类别来标识每个值. 如果使用了类别标签标记饼图,则可能希望在图例中显示百分比. 注意 在 SQL Server Data Too ...

  5. java 计算百分比值

    public class Test1 {public static String myPercent(int y, int z) {String baifenbi = "";// ...

  6. java 计算百分比值

    public class Test1 {public static String myPercent(int y, int z) {String baifenbi = "";// ...

  7. java计算百分比值的方法

    public class Test1 { public static String myPercent(int y, int z) { String baifenbi = "";/ ...

  8. 饼图图例中显示百分比值

    在设计图面上,右键单击饼图并选择"序列属性".此时将显示"序列属性"对话框. 在"图例"的"自定义图例文本"属性中键入 ...

  9. php计算百分比值,请教一个计算百分比的语句

    基于这类报表的取数,可能要重复N次,并且每次取数的要求参数都不同,所以建议建一张参考表,字段应该包括 ID 取数序号, type_name 类型编码 account      类型所含account ...

最新文章

  1. 以太坊代币空投合约的实现
  2. APACHE利用Limit模块限制IP连接数
  3. PAT甲级1002 A+B for Polynomials:[C++题解]字符串、多项式加法或高精度加法
  4. 使用ASIFormDataRequest打印参数和给项目添加测试账号
  5. 牛逼!Python的类和对象(长文系列第⑤篇)
  6. httpclient base64 文件上传_文件上传下载
  7. anaconda3 2.3.9 下载_多体系如何融合?先做好体系意识的培训!(附4合1体系培训下载)...
  8. TypeScript 素描 - 接口
  9. Spring Boot实践——Spring AOP实现之动态代理
  10. linux两个树莓派通信,Arduino与树莓派间的通信实践
  11. 小规模45万免税,免的是增值税,没有企业所得税!
  12. java 字符串去重排序
  13. 2020-05-15-用于深度学习训练的分布式多租户GPU集群分析
  14. Spark算子:RDD行动Action操作–aggregate、fold、lookup;reduce/fold/aggregate区别
  15. 这是我见过最好的唐诗,而且通俗易懂2
  16. linux 脚本里切换用户密码,shell,切换用户,执行指定,脚本
  17. Python编程语言好学吗? 零基础转行能学Python吗?
  18. 首次公开,300多页阿里百亿级系统架构设计实录
  19. 【CTF】梦之光芒/Monyer的游戏闯关记录
  20. DNS域名解析服务器

热门文章

  1. 张家口zec挖矿软件哪里下载_电脑小白去哪里下载正规软件?
  2. linux操作系统的训练目的,《西南交大-Linux操作系统应用训练》.doc
  3. 【java】JOptionPane的几种方法的作用
  4. 用计算机模仿真实系统的技术叫,计算机模拟技术.pdf
  5. linux 构造函数 throw,在自定义异常的方法/构造函数签名中带和不带throw()的C++...
  6. 京东商品知识图谱,约10万商品品牌,约65万品牌销售关系
  7. 消息已读未读的模型设计_构建一个即时消息应用(三):对话 | Linux 中国
  8. java 重定向到某个页面并弹出消息_前端面试100问之浏览器从输入URL到页面展示发生了什么...
  9. python的常量_如何给python中设定常量
  10. python3.6.5安装pip_无法在Python3.6中pip安装pickle