手机响应式网站设计_如何做响应式网页设计

手机响应式网站设计_如何做响应式网页设计##wap页面怎么做?这个问题困扰了我好久,在PC上我们惯用的`px`单位在手机上根本不适用,即使我们写了“防止网页自动缩放也无济于事,因为各手机分辨率大小不同。用百分比布局。宽度自适应做到了但是高

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

wap页面怎么做?

这个问题困扰了我好久,在PC上我们惯用的px单位在手机上根本不适用,即使我们写了<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"/>防止网页自动缩放也无济于事,因为各手机分辨率大小不同。

用百分比布局。宽度自适应做到了但是高度呢,高度也用百分比吗?难道把元素的高度写死吗。这种做法就是jquery mobile页面的做法了,大屏手机显示效果不好看。

Bootstrap做栅格化。这种做法有个很大的弊病,小屏隐藏多余的元素来展示页面,而实际上那些元素你都加载进来了,浪费资源。

前面两种做法也很难完美还原设计图的尺寸。那有什么好的办法呢?

灵活的em与灵活可控的rem

em是相对单位,相对于父级的字号。这里的父级其实指的是祖先级,一直往上哪里定义了字号就相对它,直到根节点html

假设它是相对于根节点的,根节点html的字号一般是16px,那么1em=16px12px=0.75em,假如在到根节点之前的节点已经有设置过字号了,比如说它设置了2em,那么1em=2em=32px0.75em=24px

这时候我们就发现坑爹了,假如我们是元素嵌套的,父级上设置了字号,这个单位换算的规则都变了!那怎么办?

rem也是相对单位,但是它是相对根节点的。这个就好办了,永远相对同一个字号,规则就一样了。假设根节点设置了font-size=16px 那么1em=16px12px=0.75em;假设根节点设置了font-size=32px 那么1em=32px0.75em=24px。不管在哪个地方单位换算的规则都是不会变的。

如何跟设计图对接

设计图上的单位是px,我们如何转换成em呢,难道用计算器吗?
这里有个单位换算小工具,它是换算em的,但是你也可以用它来换算rem,只要把基础像素设置成根节点字号就行了。但是基础像素应该设置成多少呢?

我看了小米的wap页面,他们做了一个媒体查询表,根据不同分辨率设置根目录的字号。这样就可以实现自适应了!它是直接写在页面上,模拟手机看源码吧view-source:http://m.mi.com/v2.html。下面是格式化后的部分代码:

@media only screen and (max-width: 300px) {
  html {
    font-size: 8.33333px
  }

  .viewport {
    max-width: 300px
  }
}
@media only screen and (max-width: 310px) and (min-width: 300px) {
  html {
    font-size: 8.33333px
  }

  .viewport {
    max-width: 310px
  }
}
@media only screen and (max-width: 320px) and (min-width: 310px) {
  html {
    font-size: 8.61111px
  }

  .viewport {
    max-width: 320px
  }
}
@media only screen and (max-width: 350px) and (min-width: 320px) {
  html {
    font-size: 8.88889px
  }

  .viewport {
    max-width: 350px
  }
}
@media only screen and (max-width: 360px) and (min-width: 350px) {
  html {
    font-size: 9.72222px
  }

  .viewport {
    max-width: 360px
  }
}
……

棒棒哒有木有!这时候我们根据这个表来设置基础像素,比如设计图的宽度是640px,我们看它这个表,可以看到html对应的font-size值是17.77778px,那么基础像素就是这个值,然后我们根据设计图量出来的px长度转换成emrem单位了!

有没有更智能的方式?

为什么每次都要通过小工具去换算单位呢,有没有办法让单位自动换算的?
直接用css当然是行不通的,虽然它有calc()这个属性,但是兼容性不强。我们配合CSS预编译来做呢,lesssassstylus,不是可以让css有运算能力吗。
之后我发现了百度EFE团队开发的基于less的est框架里面就包含了这功能

推荐下自己的

第一次用了est,就发现了bug,@margin-rem()方法用不了,然后我打开它的less源文件想去修改一下的,发现它的实现方式一点都不优雅!主要因为less语言能力太弱了。改好之后又遇到几个其它方法的坑,遂打算自己写一个,反正也不难。

我最先尝试使用sass来写的。它是基于ruby环境的,这个我就不计较了,反正安装方式跟node一样简单,安装子。后来发现它竟然不支持正则,还能不能好好玩耍了?

最后就用了先进的stylus。它是基于node环境,适合我们前端的开发环境,不错。

然后我就模仿了est开发了自己的qst,自我感觉良好,已经在两个项目中实践了。

相关链接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166421.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月6日 下午5:00
下一篇 2022年8月6日 下午5:16


相关推荐

  • IDEA 出现 java.lang.OutOfMemoryError: Java heap space 解决方式

    IDEA 出现 java.lang.OutOfMemoryError: Java heap space 解决方式先贴一下异常 Exceptionint main java lang OutOfMemoryE Javaheapspac apdplat word dictionary impl DoubleArrayD allocate DoubleArrayD java 188 ator

    2026年3月19日
    3
  • 经典网络DenseNet介绍

    经典网络DenseNet介绍经典网络DenseNet(DenseConvolutionalNetwork)由GaoHuang等人于2017年提出,论文名为:《DenselyConnectedConvolutionalNetworks》,论文见:https://arxiv.org/pdf/1608.06993.pdfDenseNet以前馈的方式(feed-forwardfashion)将每个层与其它层连接起来。在传统卷积神经网络中,对于L层的网络具有L个连接,而在DenseNet中,会有L(L+1)/2个连接。每一层的

    2026年4月18日
    3
  • Java安全之RMI协议分析

    Java安全之RMI协议分析0x00前言在前面其实有讲到过RMI,但是只是简单描述了一下RMI反序列化漏洞的利用。但是RMI底层的实现以及原理等方面并没有去涉及到,以及RMI的各种攻击方式。在其

    2021年12月12日
    56
  • [奶奶看了都会]京东自动签到薅羊毛-完整教程

    [奶奶看了都会]京东自动签到薅羊毛-完整教程又到了节假日的时间了,每逢节假日必须得搞事情。最近北京疫情管的比较严,楼主去小区旁边的小公园散步,都要出示核酸证明了。。。上一次说到用脚本完成京东自动签到领京豆:[奶奶看了都会]教你用脚本薅京东签到羊毛这个只能领到自动签到任务的豆子而已,还有好多京豆任务都没做了,导致咱白白损失了一波豆豆?所以今天嘛,我们就把京豆的任务都做一遍,把京豆全给领了?手机抓包为了获取到京豆签到的接口,需要在手机京东APP上抓包,这就需要用到手机抓包的技术了楼主对着网上的教程实践了一波,搞了一整天之后,得到的结论是An

    2025年11月25日
    4
  • java线程池浅析

    java线程池浅析简介    线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。线程池线程池的作用: …

    2022年7月7日
    25
  • STM32开发笔记37: 485总线的收发切换时间_STM32库开发实战指南:基于STM32F4

    STM32开发笔记37: 485总线的收发切换时间_STM32库开发实战指南:基于STM32F4架构图带位操作原理以往我们在使用暂存器时,都是在操作该暂存器32bits(4bytes)的储存地址,要对其中单一bit进行操作,可以仰赖bitoperation来完成。而bit-banding(位带操作)的目的就是实现直接操作单一比特位为了达成这个目的首先我们有必要理解STM32的特殊存储区段位带区与位带别名区。下图中的红色方框代表位带区的范围,可以看到SRAM中位带区佔有1MB,外设区段部分,1MB的储存范围刚好涵盖了AHB,APB1,APB2,可以说我们使用的大部分外设,例如GPIO,

    2022年10月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号