码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【我不熟悉的css】03. 使用px、em、rem


    每日鸡汤:你所有的烦恼都是做的太少,想的太多

    目录

    前言

    一、px 最基本的单位

    二、em

    1. font-size

    2. width 等其他属性

    3. em的主要应用场景

    三、rem 

    1. rem的古老的应用方式

    2. 使用rem,导致复制的字体很大

    3. 使用postcss-pxtorem 插件

    总结


    前言

    关于css单位的使用是很重要的知识,我之前所接触的项目中很少做适配,最近开始有一个项目使用了rem,现在很有必要总结一下。

    一、px 最基本的单位

    px 是像素单位,在完全是像素实现的项目中,所有的距离字号等,都是固定的,不会根据屏幕宽高,或者浏览器的缩放而产生变化,对于我们开发者,直接根据设计图写就行,几乎没有难度,不用思考。

    二、em

    mdn官方文档描述

    在 font-size 中使用是相对于父元素的字体大小,在其他属性中使用是相对于自身的字体大小,如 width

    1. font-size

    也就是说,在font-size属性使用em的时侯,子元素是父元素字体的n倍

    1. .box {
    2. font-size: 16px;
    3. .text {
    4. font-size: 2em
    5. }
    6. }

    2. width 等其他属性

    在其他属性中使用是相对于自身的字体大小(这个例子字体大小是20px )、width的宽度为

    20px * 6 = 6em,也就是6个自己的单个字符的宽度

    1. .box {
    2. font-size: 20px;
    3. }
    4. .text {
    5. font-size: 20px;
    6. width: 6em;
    7. border: 1px solid red;
    8. }

    3. em的主要应用场景

    em的主要应用在,给一段文字增加缩进,比如在排版的时候,中文要求段首空两个字符即可。

    1. .text {
    2. text-indent: 2em;
    3. }

    除此之外,em经常用来给字体设置行高的时候使用

    line-height:

    该属性的应用值是这个无单位数字<数字>乘以该元素的字体大小。计算值与指定值相同。大多数情况下,这是设置line-height的推荐方法,不会在继承时产生不确定的结果。

    1. // 这两种写法是等价的,无单位 = em = 字体自身的大小
    2. .text {
    3. line-height: 2;
    4. }
    5. .text {
    6. line-height: 2em
    7. }

    三、rem 

    与em不同,无论是font-size还是其他属性,都是相对于根元素(html)的字体大小。所以,一般的适配使用的都是rem,因为只要修改根元素的大小,整个项目总所有用到rem的地方都会等比例同时缩放,很方便。

    1. rem的古老的应用方式

    在很久之前,使用jquery写项目的时候,使用rem,需要在html中加入这么一个脚本。

    那么为什么分界线是375呢,因为我们的设计稿是按照375的宽度设计的!

    1. (function (doc, win) {
    2. var docEl = doc.documentElement,
    3. resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    4. recalc = function () {
    5. var clientWidth = docEl.clientWidth;
    6. if (!clientWidth) return;
    7. if (clientWidth >= 375) { // 宽度大于375固定设置根元素100px
    8. docEl.style.fontSize = '100px';
    9. } else {
    10. // 宽度小于375,适配移动端,动态计算根元素的font-size
    11. // 这个计算表达式,得到了一个缩放比例 scale
    12. docEl.style.fontSize = (clientWidth / 375) * 100 + 'px';
    13. }
    14. };
    15. if (!doc.addEventListener) return;
    16. win.addEventListener(resizeEvt, recalc, false);
    17. doc.addEventListener('DOMContentLoaded', recalc, false);
    18. })(document, window);

    然后我们在使用的时候,假设设计稿是这样的:

    1. .text {
    2. font-size: 10px;
    3. margin-top: 20px;
    4. }

    我们需要改成这样:

    1. .text {
    2. font-size: 0.1rem;
    3. margin-top: 0.2rem;
    4. }

    无论是font-size属性,还是其他属性,都按照设计稿的值,除100再使用,为什么除100呢,因为我们的根元素设置的font-size=100,这也是为什么我们选择100这样的整数了,因为好算。你当然可以设置99,98 等任何你喜欢的数字,但是我们在开发的过程中10/99此类的值太难算了,不要自己给自己找麻烦。

    或者这样也可以,参考,给根元素设置font-size: 62.5%;

    css: px转rem换算方法_wcc_chao@163.com的博客-CSDN博客_css px rem转换设计图一般采用画布宽度为375px/750px/1125px三种尺寸,分别对应iOS下的@1x/@2x/@3x屏幕分辨率。rem是根据html节点下的font-size定制的尺寸。如果html{font-size: 16px},则1rem = 16px,假如设计图上有一个长宽都是100px的图片,{width: 100px, height: 100px}}/>将这张图片展示到宽度为375px的手机屏幕下,如果设计图尺寸越大,转换后https://blog.csdn.net/w440149517/article/details/113528533

    2. 使用rem,导致复制的字体很大

    假设,我们使用的是上面的例子,给html的font-size:100px

    在我们用光标选中文字复制,并粘贴到富文本编辑器,word  等带格式的编辑器的时候,字体会很大,因为复制的时候保留了字体的字号等属性。

    所以对于有这种复制需求的情况,我们可以

    1. 这块 需要复制的地方不用rem,使用px,或者
    2. 在设置根元素的时候别设置100px这么大的值,或者
    3. 重写copy函数

    3. 使用postcss-pxtorem 插件

    有一个很好用的px转rem的插件,不用我们自己算了,只要配置一下就可以。

    或者,使用postcss-px2rem-include使用,可以设置根像素大小,和应用的页面

    总结

    看过100遍文档,不如自己手动写一个项目,记忆的深刻。仅供自己学习记录使用,有问题欢迎指正。

  • 相关阅读:
    vue中动态路由详解
    常见的几种排序算法
    Spring5源码3-BeanDefinition
    ORACLE APEX-js-获取项的值及json格式化
    Spring 多线程事务控制
    cadence SPB(16.6 or 17.4) backup and restore
    电源模块最大输出电流怎么测试?测试标准是什么?
    数据结构--栈
    “Can‘t open workbook - unsupported file type: XML“
    矩阵分析与应用+张贤达
  • 原文地址:https://blog.csdn.net/qq_17335549/article/details/126630579
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号