移动适配请使用比rem等更好的布局方案

??移动端大行其道,rem/em、百分比、响应式方案更是层出不穷,看见周围的伙伴们都在对使用rem和百分比情有独钟,可我却偏不爱,之所以出现如此多的方法,其目的只有一个屏幕适配

??屏幕适配顾名思义就是一张设计稿还原出的程序要适应于当下市场上各种大小屏幕不一的终端,做到写一次各种终端大小的屏幕都能比例协调的显示。下面我们先来看下大家耳熟能详的几种方案是如何去解决屏幕适配的。

  1. rem/em:rem根元素字体大小单位,em元素字体大小单位。使用rem的时候我们需要在css中先为html元素设定font-size属性,其作为整个页面单位的元单位,这个大小要设置为多少呢?这要依据设计图和屏幕尺寸来决定,通常我们还需要使用js来优先判断当前要适配屏幕的大小,之后去动态的更改html中的font-size大小;而em这个单位和百分比相似,子类的大小受其父类控制,比如父类的font-size为16px,在子类中我们写0.5em极为8px,这样一级一级的嵌套写下来,最后我们要做也是通过js来判断当前要适配屏幕的尺寸,去更改最高层级上的font-size。
  2. 百分比:em玩腻了,换个新的玩法,而且在em使用中,如果适配器尺寸判断位置稍有不适,页面会出现顿闪,不适合新人玩,如果你现在要做一个撑满全屏幕的移动网站,那么最佳的选择方案莫过于百分比布局了。所以的尺寸都除以设计图的总宽高给定一个百分比即可。
  3. 响应式:响应式是pc和移动端一站式的解决方案,通过css3的媒体查询去判断当前终端的屏幕尺寸来决定当下要显示元素。

??以上所有的方法都需要事先获知适配器当下的尺寸,百分比布局虽然不需要,但是他的优势更适合于做全屏铺满的网站,那有没有一种方案是直接相对于屏幕大小而言呢?毕竟我们最终目的也是屏幕适配,答案就是本问给大家推荐的css属性vw和vh--viewport width/height,视口的宽高,指代的是浏览器内部的可是区域的宽高,1vw等于视口宽度的1%,很明显这个单位是以视口也就是屏幕大小作为评估依据的,正合我们意,我们先来看他们的支持情况。

更好的方案

??市面上常见的几种移动端布局方案,如图2图3所示,有最大宽度限制的和完全百分比的,vw的vh这两种都试用,因为他以屏幕为基准,比如div宽37.5px,按照iphone6宽度375计算,37.5/375=0.1,0.1*100=10,也就是10vw,如此以来只要我们把这个div设置为10vw,那他在各种屏幕下占的比例都是一样的,是不是很方便,大家可能会说这个和百分比布局差不多,其实不然,他们还是有细微区别的,百分比方式做全屏移动站点比较方便,要做一个如图2所示限制宽的站点用百分比方式就不如vw来的方便,再说vw本就很方便,为和我们就不用呢?

html

<div style="width:50vw;height:50px;background-color:red">
</div> 

 

 这个div在任何屏幕下始终占据了屏幕的一半。。。如图4,5,移动端安卓和ios是主流而其都在采用webkit内核vw基本在webkit内核的浏览器上所向披靡,为何我们就老是去遗忘他呢?

??另外还有一个常用的css属性我们也应该使用上clac(),其是用来计算属性宽高的,比如现在我要写一个如下页面,左侧固定的移动站点,右侧呀随着屏幕的适配去改变,那我右侧的宽度就可以写成width:calc(100vw - 左侧宽度),需要注意的是运算符号的两边要有一个空格,这个属性可以很大程度的方便我们的计算,如果你的项目中既用到了百分比也用到了rem,你就直接可以把这些单位混杂到一块计算,而不用顾虑那么多。

总结

??以上是我平常用到的两个高频属性,我不知道为何大家提到vw和vh的很少,即使移动端开发都不怎么提到vw和vh,其实在这里我想说他们真滴很好用。好用过上边的任何单位,屏幕适配适配的是屏幕,而vw和vh正是指我们屏幕内视口的大小,多美好的单位你却总是与之错失。而且市面上基本大多数的布局就是我上文提到的这三种,有宽度限制的,全屏百分比的,还有限制某些栏目固定宽度滴。。。他们都可以用vw轻易的解决。。。

时间: 2024-10-19 16:51:50

移动适配请使用比rem等更好的布局方案的相关文章

(淘宝无限适配)手机端rem布局详解

一.        首先我们先来看看淘宝不同分辨率下的适配页面 可以看出来,淘宝在不同的分辨率下,页面的尺寸和模块间的间距会发生变化,这是因为淘宝采用了rem,这篇文章会简单介绍淘宝的布局思路以及具体做法,不过在此之前我们先了解一些移动端的知识,以为更好的理解淘宝布局的方案,下面我们来看一些移动端的知识 二.了解一些移动端的知识viewport的<meta>标签用法 其主要用来告诉浏览器如何规范的渲染Web页面,而你则需要告诉它视窗有多大 移动端开发中,通常我们都会采用<meta nam

错误: -source 1.6 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)

今天晚上在AS上运行校长项目时,报错如下: Error:(71, 35) 错误: -source 1.6 中不支持 diamond 运算符(请使用 -source 7 或更高版本以启用 diamond 运算符) 这个错误对应程序里的代码是: 一般正确的写法是在声明的时候指定类型,也就是: List<PublicBlogListBean>  _hotDatas = new ArrayList<PublicBlogListBean>(); 但是在JDK 1.7里新增了一个新特性: 增强

转发:maven打包时始终出现以下提示:-source 1.3 中不支持泛型(请使用 -source 5 或更高版本以启用泛型)

maven打包时始终出现以下提示: 1.-source 1.3 中不支持泛型(请使用 -source 5 或更高版本以启用泛型)List<User> userList= new ArrayList<User>(); 2.-source 1.3 中不支持注释(请使用 -source 5 或更高版本以启用注释)@WebService(endpointInterface = "com.webservice.service.LoadService") 而用命令mvn -

Maven报错:“请使用 -source 7 或更高版本以启用 diamond 运算符”

[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building storm-kafka-test 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO

移动端适配(手机端rem布局详解)

1. 问题的引出 如果html5要适应各种分辨率的移动设备,应该使用rem这样的尺寸单位,同时给出了一段针对各个分辨率范围在html上设置font-size的代码: html{font-size:10px} @media screen and (min-width:321px) and (max-width:375px){html{font-size:11px}} @media screen and (min-width:376px) and (max-width:414px){html{fon

移动端适配(3)---rem适配

rem适配 <meta name="viewport"  content="width=device-width,user-scalable=no"/> <script> (function(){ var html=document.documentElement; var hWidth=html.getBoundingClientRect().width; html.style.fontSize=hWidth/16+"px&quo

错误:在maven install是抛出 “1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符”

Maven默认用的是JDK1.5去编译 diamond运算符,有的书翻译为菱形,有的书写的是钻石语法,指的是JDK1.7的一个新特性 List<String> list = new ArrayList<String>(); // 老版本写法 List<String> list = new ArrayList<>(); // JDK1.7写法 所以Maven默认使用JDK1.5去编译肯定是不认识这个东西的 你可以在pom.xml中加入下面的东西即可 <p

使用maven编译的时候提示 maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释的错误。

在编译的模块的pom文件中加上 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</ta

maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释

解决办法:在pom里 加上以下代码 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</