前言

上篇在移动Web开发基础-百分比+flex布局方案中说到了比例盒子的实现,因为在移动端,需要适应各种屏幕宽度的设备,所以我们的图片以及其他一些元素需要根据屏幕宽度自适应的等比例缩放,这里就需要用到比例盒子的布局方法。接下来让我们一起来了解下实现比例盒子的几种方法吧!

这里会介绍四种实现方式,分别是用css的vw单位,垂直方向的padding或者margin,以及因此产生的问题而衍生的用伪元素实现的解决方法。

注意:按照规定,margin, padding 的百分比数值是相对 父元素宽度 的宽度计算的。

CSS 单位 VW

宽度高度都用同一个单位VW,其他比例也是相应的计算元素宽高占屏幕宽度的百分比。

<div class="vw"></div>.vw{width: 20vw;height: 20vw;background-color: #000;
}

垂直方向的padding+absolute

垂直方向的padding(padding-top/padding-bottom),因为是用padding撑开的,所以子元素会跑到区域外,所以该容器要相对定位,子元素一般全部绝对定位在里面。

//因为必须要有父元素的宽度作为计算的参照,所以添加了一个容器,
开发时自己清楚父元素的宽度就行,一般父元素100%宽度比较方便计算。<div class="padding-wp"><div class="padding"></div>
</div>.padding-wp{width: 20%;
}
.padding{position: relative;/* 子元素要绝对定位 */width: 100%;padding-top: 100%;max-height: 100px; /* 不起作用 */overflow: hidden;background-color: yellow;
}

看到这里写了max-height 不起作用,是因为 max-height 属性只限制于 height,也就是只会对元素的 content height 起作用,那么我们是不是能用一个子元素撑开 content 部分的高度,从而使 max-height 属性生效呢?于是我们就用伪元素的方式来实现。

垂直方向的padding+absolute+ :after

<div class="padding-wp-after"><div class="padding-after"></div>
</div>.padding-wp-after{width: 20%;
}
.padding-after{position: relative;/* 子元素要绝对定位 */width: 100%;max-height: 100px; /* 起作用 */overflow: hidden;background-color: blue;
}
.padding-after:after{content: "";display: block;padding-top: 100%;
}

这里我们就能看到max-height起作用了。

垂直方向的margin+absolute+ :after

<div class="margin-wp-after"><div class="margin-after"></div>
</div>.margin-wp-after{width: 20%;
}
.margin-after{width: 100%;max-height: 100px; /* 起作用 */background-color: #000;overflow: hidden;
}
.margin-after:after{content: "";display: block;margin-top: 100%;
}

这里用伪元素的margin-top来撑开了父容器的空间,但是会发现父容器多了一个属性overflow: hidden;这是因为要触发元素的BFC属性,不然margin会有穿透的问题。

总结

本文介绍了几种实现比例盒子的方法,不对相信看完此文的你应该也知道了以上方法的利弊,方法一的兼容性不言而喻,方法二会有max-height的问题,方法四margin经常会有穿透,重叠,对上下文影响比较大也不推荐,所以,你应该猜到了,我推荐方法三!用伪元素以及定位的方法实现,如果你用了less/sass这样的CSS预编译语言,那你就可以写一个比例盒子的混淆,方便在其他地方调用。比如

//等比例的盒子
@mixinliftSizeBox ($size:20%){&:after{display: block;content:"";padding-top:$size;}>.inner{position: absolute;width:100%;height: 100%;top:0;left:0;}
}//背景图实现的等比图,默认正方形
@mixinliftSizePic ($width:20%,$height:$width){width:$width;background-size:cover;background-position:center;&::after{content: "";display: block;padding-top:$height;}
}

本文DEMO codepen地址 https://codepen.io/xiangshuo1992/pen/ZayEYZ

width="100%" height="400" scrolling="no" title="ZayEYZ" src="//codepen.io/xiangshuo1992/embed/ZayEYZ/?height=265&theme-id=0&default-tab=css,result&embed-version=2" allowfullscreen="true">See the Pen <a href="https://codepen.io/xiangshuo1992/pen/ZayEYZ/">ZayEYZ</a> by Luke.Deng (<a href="https://codepen.io/xiangshuo1992">@xiangshuo1992</a>) on <a href="https://codepen.io">CodePen</a>.&#10;


本文参考:
纯 CSS 实现自适应正方形

有兴趣你还可以了解更多
CSS实现长宽比的几种方案

移动Web开发基础-比例盒子相关推荐

  1. (一)移动端 Web 开发基础

    文章目录 一.移动 Web 开发基础概念 1. 像素 (1) 分辨率 (2) 物理像素 (3) CSS 像素 (4) 设备像素比 (5) 标清屏和高清屏 (6) 缩放 (7) PPI / DPI 2. ...

  2. web开发基础(html+CSS)

    web开发基础 html+CSS 概念 万维网概念 Web浏览器 Web服务器 URL web应用领域 B/S架构(Browser/Server) C/S架构(Client/Server) web系统 ...

  3. Web开发(一)·期末不挂之第一章·Web开发基础(不背就挂的基础知识)

    Web开发基础 一.网站的访问过程 ✪✪✪ 二.Web应用 ✪✪✪ 三.其他 一.网站的访问过程 ✪✪✪ 网址: URL(互联网上标准资源的地址)组成部分: 协议:http:// 域名:-com/cn ...

  4. 掌握web开发基础系列--物理像素、逻辑像素、css像素

    思考一下 什么是物理像素?什么是css像素? 在 <掌握web开发基础系列--长度单位> 这篇文章中已经介绍过了css像素单位--px,这篇文章详细探讨一下设备物理像素和css像素之间的关 ...

  5. 提高生产力:Web开发基础平台WebCommon的设计和实现

    Web开发中,存在着各种各样的重复性的工作.为了提高开发效率,不在当码农,我在思考和实践如何搭建一个Web开发的基础平台. Web开发基础平台的目标和功能 1.提供一套基础的开发环境,整合了常用的框架 ...

  6. web发布与html ppt,web开发基础_HTML.ppt

    web开发基础_HTML Web开发基础--HTML 讲解提纲 Html简介及结构 网页中的文本的使用 网页中的列表使用 网页中的图像的使用 超文本链接 网页中的多媒体的使用 表格.框架及层 输入表单 ...

  7. 移动Web开发基础-flexible布局方案

    概述 前面我们已经已经了解了两种基本的布局方案,移动Web开发基础-百分比+flex布局方案 和 移动Web开发基础-rem布局,其中rem布局方案和我们今天要了解的flexible布局方案是有关系的 ...

  8. 移动Web开发基础-利用VW单位适配布局

    前言 前面我们分享 移动Web开发基础-rem布局 的时候提到了两个方案.方案的最终目的都是为了形成一个"流单位". 方案一是通过媒体查询给html设置font-size,密集的断 ...

  9. 第五模块:WEB开发基础-第8章 Jquery开发BootStrap

    系列文章目录 Jquery开发&BootStrap 文章目录 系列文章目录 前言 一.jQuery 1.知识点介绍 2.基础核心使用 3.入口函数 4.如何处理多个库$冲突问题 二.选择器 1 ...

最新文章

  1. 《强化学习周刊》第12期:强化学习应用之组合优化
  2. Android中focusable属性的妙用——底层按钮的实现
  3. 单击修复计算机英语怎么说,电脑选择语言方式,单击修复计算机
  4. python 爬虫程序示例,python实现简单爬虫功能的示例
  5. 工作占用了太多私人时间_下班后还要被逼谈工作,我们应该如何处理?
  6. 水系图一般在哪里找得到_进展 | 水系钠离子电池研究取得重要进展
  7. Codeforces Round #564 (Div. 2) A. Nauuo and Votes
  8. AS数据库自动备份的DOS语句
  9. VS报错——无法打开文件XXX.lib
  10. leetcode 11 Contain with most water
  11. scala教程(二) 函数
  12. haimeiktv服务器系统,海媚 Haimei KTV8001 智能网络效果器
  13. sensor gyro_3d not found
  14. 找一份好工作只需要这几招
  15. 海康机器人工业相机sdk简介
  16. 快应用开发心得——新手入门指南
  17. Excel的F4键妙用,赶紧来学一下吧
  18. maya_mel转python代码插件
  19. 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇——02
  20. 6.mtk 带升压ic的insell屏点亮

热门文章

  1. 网易云歌词解析(配合audio标签实现本地歌曲播放,歌词同步)
  2. python 之 资源使用与控制 resource模块
  3. vyos下goahead的编译后移植
  4. 赞助商:Divi 2.4
  5. android修改字体粗细
  6. 数据可视化系列-04数据大屏基础知识
  7. 正则表达式split匹配多种例如 “】”,“,”两种(页面级中英文切换方案)...
  8. 利用qt实现机器人可视化界面,并在界面上控制机器人各个关节运动
  9. 顶级(top-level window)窗口,被拥有窗口(owned window),子窗口(child window) 与WS_POPUP,WS_CHILD深入浅出
  10. boss直聘Android找工作界面,仿Boss直聘我的界面滑动效果