关于移动端百分比宽度的几种实现_html/css_WEB-ITnose
由于移动端的设备宽度各不相同,而且因为竖屏宽度都比较小,所以一般都采用满屏的方式布局,而不像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才是最优的。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









이 기사는 HTML & lt; Progress & Gt에 대해 설명합니다. 요소, 그 목적, 스타일 및 & lt; meter & gt의 차이; 요소. 주요 초점은 & lt; progress & gt; 작업 완료 및 & lt; meter & gt; Stati의 경우

이 기사는 HTML & LT; Datalist & GT에 대해 논의합니다. 자동 완성 제안을 제공하고, 사용자 경험을 향상시키고, 오류를 줄임으로써 양식을 향상시키는 요소. 문자 수 : 159

이 기사는 HTML & lt; meter & gt에 대해 설명합니다. 범위 내에 스칼라 또는 분수 값을 표시하는 데 사용되는 요소 및 웹 개발의 일반적인 응용 프로그램. & lt; meter & gt; & lt; Progress & Gt; 그리고 Ex

이 기사는 모바일 장치의 반응 형 웹 디자인에 필수적인 Viewport Meta Tag에 대해 설명합니다. 적절한 사용이 최적의 컨텐츠 스케일링 및 사용자 상호 작용을 보장하는 방법을 설명하는 반면, 오용은 설계 및 접근성 문제로 이어질 수 있습니다.

이 기사에서는 브라우저에서 직접 사용자 입력을 검증하기 위해 필요한, Pattern, Min, Max 및 Length 한계와 같은 HTML5 양식 검증 속성을 사용하는 것에 대해 설명합니다.

이 기사는 html5 & lt; time & gt; 시맨틱 날짜/시간 표현 요소. 인간이 읽을 수있는 텍스트와 함께 기계 가독성 (ISO 8601 형식)에 대한 DateTime 속성의 중요성을 강조하여 Accessibilit를 향상시킵니다.

기사는 HTML5 크로스 브라우저 호환성을 보장하기위한 모범 사례에 대해 논의하고 기능 감지, 점진적 향상 및 테스트 방법에 중점을 둡니다.

이 기사는 & lt; iframe & gt; 외부 컨텐츠를 웹 페이지, 공통 용도, 보안 위험 및 객체 태그 및 API와 같은 대안을 포함시키는 태그의 목적.
