全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

几种响应式文字详解

讲真,其实我也不知道该如何为此篇开头,

因为响应式文字需不需要做其实我也没有深入探究过,

但在学习其他网站的过程中,我发现了一些比较新奇的做法,所以想试着梳理一下,

为何会出现这种有些奇怪,可能实则非常奇妙的解决方案。

如果理解有偏差的地方,还望大佬们不吝赐教。

简单来说,响应式是为了让网页在各种显示设备上都有不错的浏览体验,

无论是 @media 将元素换行,后台获取 userAgent 返回不同页面,利用 viewport 限定视图,还是利用根元素 html 属性来计算大小等,

他们都能实现各自编程特色的响应式布局,非要说谁是最优,恐怕还是得依需求而定。

接下来我们先大致罗列一下,这几种布局方法的如何施展的。

众所周知的 Bootstrap,它的栅栏布局即为媒体查询的代表,完全通过屏宽来判断元素是否换行和是否显示。

<style><br>.col-xs-2 {width: 50%}
@media (min-width: 768px) {
  .col-sm-3 {width: 33.333333%}
}
@media (min-width: 992px) {
  .col-md-4 {width: 25%}
}
@media (min-width: 1200px) {
  .col-lg-5 {width: 20%}
}
</style>
 <div class="col-xs-2 col-sm-3 col-md-4 col-lg-5"></div>

非常方便操作和容易理解地将显示设备按宽度分成了四个区间,各区间内按栅栏占比给予宽度。

然而,随着移动互联网的迅猛突进,以及 WebApp 的使用,也由于手机的分辨率和尺寸被厂商们不断更新,

768px 以下的设计要求也相应拔高,人们开始对响应式的要求也有了些改变。

比如 iPhone4 上的文字大小还适合 iPhone6 吗,Retina 屏的 1px 问题,devicePixelRate 和屏幕缩放问题等等...

所以为了解决这些问题产生了非常丰富的解决方案,我们一个一个来。

首先,随着屏幕越大,字体大小也越来越大,好像是个不错的想法耶。

html { font-size: 10px;}
@media (min-width: 376px) and (max-width: 414px) {
  html{font-size: 11px;}
}
@media (min-width: 415px) and (max-width: 639px) {
  html{font-size: 13px;}
}
@media (min-width: 640px) and (max-width: 719px) {
  html{font-size: 14px;}
}
@media (min-width: 720px) and (max-width: 749px) {
  html{font-size: 15px;}
}
@media (min-width: 750px) and (max-width: 799px) {
  html{font-size: 16px;}
}
@media (min-width: 800px) and (max-width: 992px) {
  html{font-size: 20px;}
}
body {
  margin: 0;
  font-size: 1.6rem;
}

实践情况告诉我们,在 iPhone6 plus 上这种字大的体验确实不赖。

不过好像并不是字越大就越好看,比如在 iPad 上,字大绝对不是一个好的视觉体验。

所以又有了另一种搞法,根元素的字体大小由宽度和 devicePixelRate 来计算求得,也比上面的方法更注重了 dpr 的考虑。

<style>
body {font-size: .12rem}
</style>
<script>
!function() {
  function e() {
    r.innerText = "html{font-size:" + (a.style.fontSize = a.getBoundingClientRect().width / o * d + "px") + " !important;}"
  }
  var t = navigator.userAgent,
    n = (t.match(/(iPhone|iPad|iPod)/), t.match(/Android/i), window),
    i = document,
    a = i.documentElement,
    o = (n.devicePixelRatio, 375),
    d = 100,
    r = (i.head.querySelector('[name="viewport"]'), i.createElement("style"));
  r.innerText = "html{font-size:100px !important}", i.head.appendChild(r), e(), n.addEventListener("resize", e, !1);
  a.className += t.match(/ucbrowser/i) ? " app-uc " : ""
}();
</script>

这里并没有直接在设置 font-size 的时候就乘以 0.12 的原因可能是,这样会比较容易算宽度吧,比如 3.75rem 便是一个屏宽咯。

当然不用百分比而用 rem 来定宽,也是有些好处的。

比如两栏式百分比布局的间隙也只能百分比咯(calc 另当别论)造成左右和上下间隙不相等,

元素纵横比直接用数值就能完成,因为现在的 rem 就像百分比那样非常自动了,

后来发现,它还有 PC 端缩放浏览器比例保持页面不变的功效。

除此之外,还有淘宝的搞法,lib-flexible.js。

!function(a,b){function c(){var b=f.getBoundingClientRect().width;b/i>540&&(b=540*i);var c=b/10;f.style.fontSize=c+"px",k.rem=a.rem=c}var d,e=a.document,f=e.documentElement,g=e.querySelector('meta[name="viewport"]'),h=e.querySelector('meta[name="flexible"]'),i=0,j=0,k=b.flexible||(b.flexible={});if(g){console.warn("将根据已有的meta标签来设置缩放比例");var l=g.getAttribute("content").match(/initial\-scale=([\d\.]+)/);l&&(j=parseFloat(l[1]),i=parseInt(1/j))}else if(h){var m=h.getAttribute("content");if(m){var n=m.match(/initial\-dpr=([\d\.]+)/),o=m.match(/maximum\-dpr=([\d\.]+)/);n&&(i=parseFloat(n[1]),j=parseFloat((1/i).toFixed(2))),o&&(i=parseFloat(o[1]),j=parseFloat((1/i).toFixed(2)))}}if(!i&&!j){var p=(a.navigator.appVersion.match(/android/gi),a.navigator.appVersion.match(/iphone/gi)),q=a.devicePixelRatio;i=p?q>=3&&(!i||i>=3)?3:q>=2&&(!i||i>=2)?2:1:1,j=1/i}if(f.setAttribute("data-dpr",i),!g)if(g=e.createElement("meta"),g.setAttribute("name","viewport"),g.setAttribute("content","initial-scale="+j+", maximum-scale="+j+", minimum-scale="+j+", user-scalable=no"),f.firstElementChild)f.firstElementChild.appendChild(g);else{var r=e.createElement("div");r.appendChild(g),e.write(r.innerHTML)}a.addEventListener("resize",function(){clearTimeout(d),d=setTimeout(c,300)},!1),a.addEventListener("pageshow",function(a){a.persisted&&(clearTimeout(d),d=setTimeout(c,300))},!1),"complete"===e.readyState?e.body.style.fontSize=12*i+"px":e.addEventListener("DOMContentLoaded",function(){e.body.style.fontSize=12*i+"px"},!1),c(),k.dpr=a.dpr=i,k.refreshRem=c,k.rem2px=function(a){var b=parseFloat(a)*this.rem;return"string"==typeof a&&a.match(/rem$/)&&(b+="px"),b},k.px2rem=function(a){var b=parseFloat(a)/this.rem;return"string"==typeof a&&a.match(/px$/)&&(b+="rem"),b}}(window,window.lib||(window.lib={}));

它和上面的方法在 rem 方面是类似的,10rem 便是一个屏宽,但在文字方面不太一样,

淘宝网触屏版 并不想让字体越来越大,而始终为 12px 或 24px,

而结果来看,字小图大加留白好像反而有些精细的感觉,也解决了上面方法 PC 端字超大的问题。

另外,如果使用此类方法,那么 @media 划分屏宽节点就得靠 rem 了哟,比如淘宝用的 10rem。

最后,再讲一个比较奇葩但又很有效的响应式方法。

<meta name="viewport" content="width=750,user-scalable=no" />
 
<style>
html, body {
  width: 750px;
  margin: 0 auto;
  overflow: hidden;
}
</style>

有没有感觉到一股我不管我不听的倔强气息,这种方法意味着,不管设备怎样,我只当设备是 750px 视图大小的设备。

375px 就是半个屏幕,这对做应用场景 H5 的小伙伴可谓是福音,做雪碧图用 px 定位什么的才是最爽的,

但它也有着它的坏处,也就是设备的宽高比是不定的,比如 iPhone4 和 iPhone5 一样宽但高度短一截,所以最好再加上一个上下居中的解决办法。

这几种方法都各有特色,有各自方便的角度,所以依照需求和喜好,多研究下吧,我也期望能有人来 和我讨论,么么哒

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# 响应式文字大小  # 响应式文字  # CSS3+Js实现响应式导航条  # jQuery Deferred和Promise创建响应式应用程序详细介绍  # 原生JS实现响应式瀑布流布局  # Bootstrap实现响应式导航栏效果  # 使用Chart.js图表库制作漂亮的响应式表单  # Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记  # jQuery插件slick实现响应式移动端幻灯片图片切换特效  # jquery SweetAlert插件实现响应式提示框  # CSS图片响应式 垂直水平居中  # 8款非常棒的响应式jQuery 幻灯片插件推荐  # 我也  # 但在  # 越大  # 淘宝  # 雪碧  # 换行  # 是一个  # 显示设备  # 是个  # 互联网  # 都有  # 成了  # 我不  # 就像  # 就能  # 不吝赐教  # 才是  # 不太  # 和我  # 都能 


相关文章: 广东企业建站网站优化与SEO营销核心策略指南  网站代码制作软件有哪些,如何生成自己网站的代码?  网站设计制作企业有哪些,抖音官网主页怎么设置?  全景视频制作网站有哪些,全景图怎么做成网页?  黑客如何通过漏洞一步步攻陷网站服务器?  建站之星伪静态规则如何正确配置?  免费网站制作appp,免费制作app哪个平台好?  淘宝制作网站有哪些,淘宝网官网主页?  建站之星如何优化SEO以实现高效排名?  Thinkphp 中 distinct 的用法解析  如何选择香港主机高效搭建外贸独立站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  手机网站制作与建设方案,手机网站如何建设?  自助网站制作软件,个人如何自助建网站?  如何快速选择适合个人网站的云服务器配置?  北京网站制作的公司有哪些,北京白云观官方网站?  购物网站制作公司有哪些,哪个购物网站比较好?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  h5网站制作工具有哪些,h5页面制作工具有哪些?  建站之星如何通过成品分离优化网站效率?  如何用IIS7快速搭建并优化网站站点?  建站之星伪静态规则如何设置?  c++ stringstream用法详解_c++字符串与数字转换利器  如何通过.red域名打造高辨识度品牌网站?  建站VPS配置与SEO优化指南:关键词排名提升策略  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何安全更换建站之星模板并保留数据?  如何通过多用户协作模板快速搭建高效企业网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  香港服务器租用每月最低只需15元?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  小型网站建站如何选择虚拟主机?  高防服务器租用如何选择配置与防御等级?  无锡营销型网站制作公司,无锡网选车牌流程?  网页设计网站制作软件,microsoft office哪个可以创建网页?  建站之星备案流程有哪些注意事项?  建站之星官网登录失败?如何快速解决?  建站主机选择指南:服务器配置与SEO优化实战技巧  Java解压缩zip - 解压缩多个文件或文件夹实例  济南专业网站制作公司,济南信息工程学校怎么样?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  大连 网站制作,大连天途有线官网?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  建站主机空间推荐 高性价比配置与快速部署方案解析  如何用AWS免费套餐快速搭建高效网站?  如何在橙子建站上传落地页?操作指南详解  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。