所有分类
  • 所有分类
  • 后端开发
详解 HTML5 页面 rem 布局适配方法:动态设置 font-size 与媒体查询

详解 HTML5 页面 rem 布局适配方法:动态设置 font-size 与媒体查询

布局适配方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。布局适配方案主要方法为:为单位的值;为单位,通过媒体查询稍作调整。精简通用版本:登录后复制高配精确版本:登录后复制rem登录后复制根

REM就是个相对单位,它是看着html标签的字体大小算出来的。用这个方法做网页设计,就能让网页更适合各种手机、平板看起来舒服了。跟绝对单位的px比起来,REM就灵活多了,会根据你的设备自动调整大小。

为什么选择rem布局

用rem布局挺好的,主要就是为了适应手机和平板电脑这类设备呗!现在大家都喜欢拿手机上网,如果还是用老式的px布局,那页面在不同屏幕上看起来就乱七八糟了,字也小得看不清。但rem布局就能自动调节布局,保证无论在哪种设备上都能看得舒服,用着顺手。

如何动态设置html标签的font-size

为了用Rem布局,头一件事就是借助JS给HTML标签调个font-size。这个大小得看你设备的屏幕宽窄来定,比如设计稿宽750px的话,那就把html的font-size设成它的十分之一,也就是37.5px。这样,在手机宽度只有375px时,html的字体大小还是不变!

设计稿元素转换为rem单位

搞定了html标签的字体大小以后,咱们就要开始处理设计稿里的元素尺寸了。比如,设计稿里有个元素宽100像素,那咱就在代码里设成(100/html字号)REM。这样不管啥宽度的设备,它都能自动调到合适的屏幕宽度比例!

字体单位的选择

在rem布局里面,咱们还是习惯用px做字体大小的计量。毕竟换个布局那么费劲儿,没必要那么精细。但是,为了让手机上看网页也舒服点儿,可以借助CSS3的媒体查询来调整字体大小。比如,当屏幕变窄了,就把字号调大点呗。

!(function(win, doc){
  function setFontSize() {
    // 获取window 宽度
    // zepto实现 $(window).width()就是这么干的
    var winWidth =  window.innerWidth;
    // doc.documentElement.style.fontSize = (winWidth / 640) * 100 + 'px' ;
    
    // 640宽度以上进行限制 需要css进行配合
    var size = (winWidth / 640) * 100;
    doc.documentElement.style.fontSize = (size < 100 ? size : 100) + 'px' ;
  }
  var evt = 'onorientationchange' in win ? 'orientationchange' : 'resize';
  var timer = null;
  win.addEventListener(evt, function () {
    clearTimeout(timer);
    timer = setTimeout(setFontSize, 300);
  }, false);
  win.addEventListener("pageshow", function(e) {
    if (e.persisted) {
      clearTimeout(timer);
      timer = setTimeout(setFontSize, 300);
    }
  }, false);
  // 初始化
  setFontSize();
}(window, document));

媒体查询在rem布局中的应用

mediaquery就是css3里的大杀器!它可以针对各种设备,看,像屏幕大小啦分辨率啥的,用不一样的样式规则。在rem布局里,这个功能就更牛了,能让你在小屏设备上调整元素排版,还能优化字体显示,让网页在各种设备上看起来都美美的。

rem布局的实际应用案例

要真正明白REM布局怎么使用,看看具体例子就行。现在大家看到的那些热门的响应式网站用的就是REM布局,无论在哪种屏幕上都好看得很。研究研究他们,就能学会怎样根据自己的需求调整REM布局,让你的网页也变得美美的。

(function(WIN) {
    var  setFontSize = WIN.setFontSize = function (_width) {
        var  docEl = document.documentElement; 
        // 获取当前窗口的宽度
        var  width = _width || docEl.clientWidth; // docEl.getBoundingClientRect().width;
        // 大于 1080px 按 1080
        if (width > 1080) { 
            width = 1080;
        }
        var  rem = width / 10;
        console.log(rem);
        docEl.style.fontSize = rem + 'px';
        // 误差、兼容性处理
        var  actualSize = win.getComputedStyle && parseFloat(win.getComputedStyle(docEl)["font-size"]);
        if (actualSize !== rem && actualSize > 0 && Math.abs(actualSize - rem) > 1) {
            var remScaled = rem * rem / actualSize;
            docEl.style.fontSize = remScaled + 'px';
        }
    }
    var timer;
    function dbcRefresh() {
        clearTimeout(timer);
        timer = setTimeout(setFontSize, 100);
    }
    //窗口更新动态改变 font-size
    WIN.addEventListener('resize', dbcRefresh, false);
    //页面显示时计算一次
    WIN.addEventListener('pageshow', function(e) {
        if (e.persisted) { 
            dbcRefresh() 
        }
    }, false);
    setFontSize();
})(window)
//对H5活动推过页面,宽高比例有所要求,可适当调整
function adjustWarp(warpId = '#warp') {
    const $win = $(window);
    const height = $win.height();
    let width = $win.width();
    // 考虑导航栏情况
    if (width / height < 360 / 600) {
        return;
    }
    width = Math.ceil(height * 360 / 640);
    $(warpId).css({
        height,
        width,
        postion: 'relative',
        top: 0,
        left: 'auto',
        margin: '0 auto'
    });
    // 重新计算 rem
    window.setFontSize(width);
}

rem布局的优缺点分析

虽然rem布局挺好,灵活又能应变,但还是有些不足。比如说,要控制尺寸的东西用这个就不大行。而且,搞rem布局还挺费劲儿的,得懂点儿编程才行,对那些不懂技术的设计师来说可能有点难学。

如何优化rem布局

要让rem布局更好看,我们可以试着用更牛逼的JavaScript写法设定字体大小,或者借助CSS预处理器(像Sass或Less)简化样式表。另外,多试试,多看看,就能找出并解决rem布局中的问题,让网页布局更上一层楼,给用户带来更好的体验。

总结与展望

搞网页设计的话,rem布局真的挺实用,让咱们能方便地适应各种设备的屏幕大小,享受一样棒的上网感觉。随着手机用得越来越多,网页技术也在进步,rem布局以后肯定会更火。

@media screen and ( min-width: 320px){html{font-size:50px}}
@media screen and ( min-width: 360px){html{font-size:56.25px}}
@media screen and ( min-width: 375px){html{font-size:58.59375px}}
@media screen and ( min-width: 384px){html{font-size:60px}}
@media screen and ( min-width: 400px){html{font-size:62.5px}}
@media screen and ( min-width: 414px){html{font-size:64.6875px}}
@media screen and ( min-width: 424px){html{font-size:66.25px}}
@media screen and ( min-width: 480px){html{font-size:75px}}
@media screen and ( min-width: 540px){html{font-size:84.375px}}
@media screen and ( min-width: 640px){html{font-size:100px}}

读完今天这篇文章后,你是不是对rem布局有更深的理解?下次做网站时,要不要试一试用rem布局?快来评论区晒出你的看法。别忘了给我点个赞,分享出去,让大家都知道rem布局的超酷之处!

原文链接:https://www.icz.com/technicalinformation/web/vue2/2024/07/20081.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?