目录
vw
rem
flex & percent
首页 web前端 html教程 关于移动端百分比宽度的几种实现_html/css_WEB-ITnose

关于移动端百分比宽度的几种实现_html/css_WEB-ITnose

Jun 24, 2016 am 11:28 AM

由于移动端的设备宽度各不相同,而且因为竖屏宽度都比较小,所以一般都采用满屏的方式布局,而不像PC端的使用固定宽度居中的技术布局。既然要使用满屏,那么各种百分比技术就显得尤其重要,下面大概聊聊实战过程使用到的一些技术。

为了方便各种技术对比,我们使用不同的技术实现同一个四等分满屏,且每个小分为一个正方形的需求。

整体的html结构为:

// `list--xxx`表示下面具体技术的名字ul.full-list.list--xxx    .item*4
登录后复制

为了方便视觉查看,我们将奇偶数的item背景色设置不同:

.full-list .item{ background: #f5f5f5;}.full-list .item:nth-child(2n){ background: #ccc;}.full-list .item:hover{ background: #f00;}
登录后复制

demo效果见: 移动端百分比宽度的几种实现

vw

这是一个新的系列单位,总共有四个 vw, vh, vmin, vmax,分别表示视窗宽度,视窗高度,视窗宽高中的最小值,视窗宽高中的最大值。目前android 4.3- 不支持,ios支持良好,具体参考 caniuse vw

1vw表示百分之一的视窗宽度,同理 10vw就是百分之十。从这新单位的出现,也知道为了移动端的百分比我们的W3C组织也是操碎了心。

为了上面所说的四等分,那每个的宽度应该为 25vw,而我们 ul的 list--xxx就是 list--vw。

.list--vw{ overflow: hidden;}.list--vw .item{ float: left; width: 25vw; height: 25vw;}
登录后复制

果然不亏是新的单位,分分钟解决问题,超级简单,就是目前android这边还有点不兼容难办,不过相信未来是光明的。

rem

先说明,这节所说的思想其实是手淘 lib-flexible中提出的。原理就是js获取视窗宽度,然后设置html的 font-size为视窗宽度的十分之一即百分之十,而 rem单位表示相对于根元素html的大小,所以 1rem即表示视窗宽度的十分之一。这样通过 rem与html的 font-size的关系,拐了个弯实现了一个相对于视窗宽度的百分比。

js设置html的 font-size

document.addEventListener("DOMContentLoaded", function(event) {    document.documentElement.style.fontSize = window.innerWidth/10 + "px";  });
登录后复制

css代码如下:

.list--rem{ overflow: hidden;}.list--rem .item{ float: left; width: 2.5rem; height: 2.5rem;}
登录后复制

注意这里 1rem即是百分之十的视窗宽度,而上面说的 1vw是百分之一的视窗宽度。

关于lib-flexible还有个 data-dpr的概念,感兴趣的可以研究研究,不过个人觉得这个功能除了实现ios的retina屏的1px之外,其余有点鸡肋,完全可以使用 media query解决,所以只采用了它的 font-size思想。

这里感谢下手淘为我们前端界创造了个这么好的解决方案。

flex & percent

这个应该不必多说了,现在到处都是flex,而 %的更是基础了。

直接上代码:

.list--flex{ display: flex;}.list--flex .item{ flex: 1; padding-top: 25%; height: 0;}.list--percent{ overflow: hidden;}.list--percent .item{ float: left; width: 25%; height: 0; padding-top: 25%;}
登录后复制

注意,padding或margin的 %单位都是按照父元素的宽度计算的。

当然如果只是实现等分需求的, display:table也是一个不错的选择。代码为:

.parent{ display: table; table-layout: fixed; width: 100%;}.parent > .child{ display: table-cell;}
登录后复制

最后,如果不考虑andriod 4.3- 的话 vw是最好的选择;如果考虑兼容的问题, rem的方案是最好的选择。而其余的 flex, %或是 table都不是最简单省事的,在单纯的宽度处理方面还能胜任,但如果涉及到高度随宽度同时变化,即宽高遵守某个比例(如图片或视频的变化),就需要借用padding技术撑开了。所以,如果是单纯的宽度布局就随便用了,而如果要实现某些宽高比, vm和 rem才是最优的。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验? 公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验? Mar 04, 2025 pm 12:32 PM

公众号网页更新缓存,这玩意儿,说简单也简单,说复杂也够你喝一壶的。你辛辛苦苦更新了公众号文章,结果用户打开还是老版本,这滋味,谁受得了?这篇文章,咱就来扒一扒这背后的弯弯绕绕,以及如何优雅地解决这个问题。读完之后,你就能轻松应对各种缓存难题,让你的用户始终体验到最新鲜的内容。先说点基础的。网页缓存,说白了就是浏览器或者服务器为了提高访问速度,把一些静态资源(比如图片、CSS、JS)或者页面内容存储起来。下次访问时,直接从缓存里取,不用再重新下载,速度自然快。但这玩意儿,也是个双刃剑。新版本上线,

如何高效地在网页中为PNG图片添加描边效果? 如何高效地在网页中为PNG图片添加描边效果? Mar 04, 2025 pm 02:39 PM

本文展示了使用CSS为网页中添加有效的PNG边框。 它认为,与JavaScript或库相比,CSS提供了出色的性能,详细介绍了如何调整边界宽度,样式和颜色以获得微妙或突出的效果

如何使用HTML5表单验证属性来验证用户输入? 如何使用HTML5表单验证属性来验证用户输入? Mar 17, 2025 pm 12:27 PM

本文讨论了使用HTML5表单验证属性,例如必需的,图案,最小,最大和长度限制,以直接在浏览器中验证用户输入。

< datalist>的目的是什么。 元素? < datalist>的目的是什么。 元素? Mar 21, 2025 pm 12:33 PM

本文讨论了html< datalist>元素,通过提供自动完整建议,改善用户体验并减少错误来增强表格。Character计数:159

HTML5中跨浏览器兼容性的最佳实践是什么? HTML5中跨浏览器兼容性的最佳实践是什么? Mar 17, 2025 pm 12:20 PM

文章讨论了确保HTML5跨浏览器兼容性的最佳实践,重点是特征检测,进行性增强和测试方法。

> gt;的目的是什么 元素? > gt;的目的是什么 元素? Mar 21, 2025 pm 12:34 PM

本文讨论了HTML< Progress>元素,其目的,样式和与< meter>元素。主要重点是使用< progress>为了完成任务和LT;仪表>对于stati

< meter>的目的是什么。 元素? < meter>的目的是什么。 元素? Mar 21, 2025 pm 12:35 PM

本文讨论了HTML< meter>元素,用于在一个范围内显示标量或分数值及其在Web开发中的常见应用。它区分了< meter>从< progress>和前

我如何使用html5< time> 元素以语义表示日期和时间? 我如何使用html5< time> 元素以语义表示日期和时间? Mar 12, 2025 pm 04:05 PM

本文解释了HTML5< time>语义日期/时间表示的元素。 它强调了DateTime属性对机器可读性(ISO 8601格式)的重要性,并在人类可读文本旁边,增强Accessibilit

See all articles