媒体查询(rem)配合less使用

365 阅读3分钟

屏幕宽度发生变化,页面元素的尺寸(宽度和高度)也随之变化,这样可以更好的达到适配效果,用户体验更好

百分比布局特点宽度自适应,高度固定

Flex布局更多的解决了盒子的排列方式,高度很难适配

所以都不能实现

需要配合 rem 单位 设置元素的尺寸(宽度/高度) 最终适配

那么什么是rem了?

rem是相对于HTML标签的字号计算结果 1rem = 1HTML字号大小(vw是视口宽度1%)

rem的使用场景: 我们只需要修改html 的文字大小,就可以完成元素大小的等比例缩放

媒体查询

设置差异化CSS样式

image.png

image.png

目前rem布局方案中,将网页等分成10份, HTML标签的字号为视口宽度的 1/10

image.png

使用flexible js配合rem实现在不同宽度的设备中,网页元素尺寸等比缩放效果

image.png

(function flexible (window, document) {
  var docEl = document.documentElement
  var dpr = window.devicePixelRatio || 1
 
  // adjust body font size
  function setBodyFontSize () {
    if (document.body) {
      document.body.style.fontSize = (12 * dpr) + 'px'
    }
    else {
      document.addEventListener('DOMContentLoaded', setBodyFontSize)
    }
  }
  setBodyFontSize();
 
  // set 1rem = viewWidth / 10
  function setRemUnit () {
    var rem = docEl.clientWidth / 10
    docEl.style.fontSize = rem + 'px'
  }
 
  setRemUnit()
 
  // reset rem unit on page resize
  window.addEventListener('resize', setRemUnit)
  window.addEventListener('pageshow', function (e) {
    if (e.persisted) {
      setRemUnit()
    }
  })
 
  // detect 0.5px supports
  if (dpr >= 2) {
    var fakeBody = document.createElement('body')
    var testElement = document.createElement('div')
    testElement.style.border = '.5px solid transparent'
    fakeBody.appendChild(testElement)
    docEl.appendChild(fakeBody)
    if (testElement.offsetHeight === 1) {
      docEl.classList.add('hairlines')
    }
    docEl.removeChild(fakeBody)
  }
}(window, document))

使用Less运算写法完成px单位到rem单位的转换

image.png

image.png

Less是一个CSS预处理器, Less文件后缀是.less

扩充了 CSS 语言, 使 CSS 具备一定的逻辑性、计算能力。

常见的预处理器还有 Sass、Stylus

注意:浏览器不识别Less代码,目前阶段,网页要引入对应的CSS文件。

加、减、乘直接书写计算表达式

image.png

除法需要添加 小括号 或 . 具体可以参看:less计算方式

注意: 表达式存在多个单位以第一个单位为准

 使用Less嵌套写法生成后代选择器

image.png

注意:&不生成后代选择器,表示当前选择器,通常配合伪类或伪元素使用

image.png

使用Less变量设置属性值

提前存储到一个容器,设置属性值为这个容器名

定义变量:@变量名: 值;

使用变量:CSS属性:@变量名;

image.png

同理如果我们以后设置一个设备是37.5的标准稿,要进行更换

image.png

  .go {
                    position: absolute;
                    left: (15 / @baseSize);
                    top: (-4 / @baseSize);
                    width: (69 / @baseSize);
                    height: (29 / @baseSize);
                    background: url(../images/status_active.png);
                    background-size: (68 / @baseSize);
                    font-size: (12 / @baseSize);
                    color: #fff;
                    text-align: center;
                    line-height: (29 / @baseSize);
 
                }

使用Less导入写法引用其他Less文件

如base.less

// out:false
@charset 'UTF-8';
 
* {
  // -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
 
body, ul, p, h3, h4, h5, h6 {
  padding: 0;
  margin: 0;
}
 
body {
  font-family: Arial, Helvetica, sans-serif;
  -webkit-text-size-adjust: none;
  text-size-adjust: none;
  -webkit-user-select: none;
  user-select: none;
}
 
img {
  display: block;
  max-width: 100%;
}
 
ul {
  list-style-type: none;
}
 
a {
  text-decoration: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

导入: @import “文件路径”;

image.png

image.png

使用Less语法导出CSS文件

方法一: 配置EasyLess插件, 实现所有Less有相同的导出路径 配置插件: 设置 → 搜索EasyLess → 在setting.json中编辑 → 添加代码(注意,必须是双引号)

image.png

image.png

image.png

    "workbench.iconTheme": "vscode-icons",
    "vsicons.dontShowNewVersionMessage": true,
    "editor.fontSize": 16,
    "liveServer.settings.CustomBrowser": "chrome",
    "[html]": {
        "editor.defaultFormatter": "vscode.html-language-features"
    },
    "editor.wordWrap": "on",
    "editor.formatOnSave": true,
    "editor.formatOnPaste": true,
    "emmet.syntaxProfiles": {
        "html": {
            "inline_break": 2
        }
    },
    "security.workspace.trust.untrustedFiles": "open",
    "[css]": {
        "editor.defaultFormatter": "vscode.css-language-features"
    },
    "files.autoSave": "afterDelay",
    "backgroundCover.imagePath": "c:\\Users\\顾伊\\Desktop\\wallhaven-57o568.png",
    "backgroundCover.opacity": 0.3,
    "less.compile": {
    
        "out": "../css/"
    }
}

方法二:控制当前Less文件导出路径 Less文件第一行添加如下代码, 注意文件夹名称后面添加 /

image.png

image.png

禁止导出 在less文件第一行添加:  // out: false

image.png

最后是原图(●ˇ∀ˇ●)

wallhaven-n6r6m7.jpg