CSS rem、vw/vh、less

目录

分辨率、视口与二倍图 

一、分辨率与像素基础

1. 物理像素(Physical Pixels)

2. 逻辑像素(CSS 像素)

二、视口(Viewport)控制

1. 视口类型

2. 设置理想视口

三、二倍图(Retina/HiDPI 图像)适配

1. 问题背景

 2. 设计稿处理

3. CSS 适配二倍图

4. HTML 图片适配(srcset 属性)

4. 使用 image-set()(CSS 背景图)  

rem 单位详解

一、基本概念

二、核心特性

1. 移动端适配(less)

2. 根元素依赖

3. 响应式适配

4. 预处理器支持

5. 用户友好性

vw 和 vh 单位详解

一、基本定义

二、核心特性

三、典型应用场景

1. 移动端适配(less)

2. 全屏布局

3. 响应式字体

四、注意事项与解决方案

1. 移动端 100vh 问题

2. 滚动条影响

3. 最小/最大值保护

五、不同单位对比

Less 详解

一、核心语法与功能

1. 变量(Variables)

2. 混合(Mixins)

3. 嵌套(Nesting)

4. 运算(Operations)

5. 函数(Functions)

6. 命名空间(Namespaces)

7. 导入(Import)

二、高级特性

1. 条件与循环

2. 作用域(Scope)

3. 映射(Maps)

三、实战应用场景

1. 主题切换

2. 响应式设计

3. 组件库开发

四、Less 与 Sass 对比


分辨率、视口与二倍图 

一、分辨率与像素基础

1. 物理像素(Physical Pixels)
  • 定义:设备屏幕的实际像素点数(如 iPhone 12 的 1170×2532 像素)。

  • 特点:硬件固定,不可变。

2. 逻辑像素(CSS 像素)
  • 定义:浏览器使用的抽象像素单位(如 width: 375px)。

  • 与物理像素关系:由设备像素比(DPR)决定缩放比例。

    • DPR(Device Pixel Ratio)物理像素 / 逻辑像素(如 iPhone 的 DPR=2 或 3)。


二、视口(Viewport)控制

1. 视口类型
  • 布局视口(Layout Viewport):网页的实际渲染区域(默认较大,需缩放适配)。

  • 视觉视口(Visual Viewport):用户当前看到的屏幕区域。

  • 理想视口(Ideal Viewport):设备屏幕的逻辑像素宽度(如 iPhone 的 375px)。

2. 设置理想视口

通过 <meta> 标签控制布局视口等于设备宽度:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  • 参数说明

    • width=device-width:视口宽度等于设备逻辑宽度。

    • initial-scale=1.0:初始缩放比例为 1(不缩放)。

    • user-scalable=no:禁止用户手动缩放(可选)。


三、二倍图(Retina/HiDPI 图像)适配

1. 问题背景
  • 高 DPR 设备(如 DPR=2)需要更高分辨率图像,否则图片会模糊失真。

  • 解决方案:提供 2 倍大小的图片,通过 CSS 或 HTML 缩小显示。

 2. 设计稿处理
  • 二倍图设计:设计稿按 2 倍尺寸制作(如逻辑宽度 375px,设计稿宽度 750px)。

  • 切图导出:切图时导出 2 倍图(如 icon@2x.png)。

3. CSS 适配二倍图
.logo {width: 100px;height: 100px;background-image: url("logo@2x.png"); /* 200x200 的图片 */background-size: 100px 100px; /* 缩小到 100x100 */
}
4. HTML 图片适配(srcset 属性)
<img src="logo.png" srcset="logo@2x.png 2x, logo@3x.png 3x" alt="Logo"
>
  • 浏览器自动选择:根据设备 DPR 加载合适图片。

4. 使用 image-set()(CSS 背景图)
.logo {background-image: image-set(url("logo.png") 1x,url("logo@2x.png") 2x);
}

  

rem 单位详解

一、基本概念

rem(Root EM) 是 CSS 中的相对长度单位,其值始终 相对于根元素(<html>)的字体大小

  • 计算公式1rem = 根元素<html>字体大小(默认 16px)

  • 与 em 的区别em 相对于父元素字体大小,而 rem 仅相对于根元素,不受嵌套影响。


二、核心特性

1. 移动端适配(less)

@rootSize: 37.5;  /* 以 375px 设计稿为例 */.banner img {width: (240rem / @rootSize);
}
2. 根元素依赖
  • 默认根元素字体大小为 16px(浏览器默认值)。

  • 修改根元素字体大小会影响所有 rem 单位:

    html {font-size: 62.5%; /* 1rem = 10px(16px × 62.5%) */
    }
3. 响应式适配
  • 通过调整根元素字体大小,实现全局缩放:

    @media (max-width: 768px) {html {font-size: 50%; /* 1rem = 8px(适配小屏幕) */}
    }
4. 预处理器支持
  • Sass/Less 函数:自动转换 px 到 rem

    @function rem($px) {@return ($px / 10) + rem; /* 假设根字体为 10px */
    }
    .box {width: rem(200); /* 输出 20rem */
    }
5. 用户友好性
  • 用户若调整浏览器默认字体大小,rem 单位会按比例缩放,而 px 固定不变,提升可访问性。


  

vw 和 vh 单位详解

vw(视口宽度单位)和 vh(视口高度单位)是 CSS 中基于浏览器视口尺寸的相对单位,常用于响应式布局和全屏设计。以下是它们的核心特性、使用场景及注意事项:


一、基本定义

  • 1vw = 视口宽度的 1%
    例如:视口宽度为 1200px,则 50vw = 600px

  • 1vh = 视口高度的 1%
    例如:视口高度为 800px,则 30vh = 240px


二、核心特性

特性vwvh
参考基准视口宽度(包含滚动条宽度)视口高度(不包含地址栏/工具栏)
动态响应随视口宽度变化实时调整随视口高度变化实时调整
兼容性现代浏览器全支持(IE9+)现代浏览器全支持(IE9+)

三、典型应用场景

1. 移动端适配(less)
@rs: 3.75;  /*以 375px 设计稿为例*/height: (44vw / @rs);
2. 全屏布局
  • 全屏背景图/区块

    .hero-section {width: 100vw;    /* 宽度铺满视口 */height: 100vh;   /* 高度铺满视口 */background: url("bg.jpg") center/cover;
    }
3. 响应式字体
  • 字体随视口缩放

    h1 {font-size: clamp(2rem, 5vw, 4rem); /* 最小2rem,最大4rem,按视口宽度5%缩放 */
    }

四、注意事项与解决方案

1. 移动端 100vh 问题
  • 问题:移动浏览器地址栏/工具栏会占用视口高度,导致 100vh 超出实际可见区域。

  • 解决方案

    • CSS 新特性:使用 height: 100dvh(动态视口高度)。

    • JS 动态修正

      const setVH = () => {document.documentElement.style.setProperty('--vh', `${window.innerHeight}px`);
      };
      window.addEventListener('resize', setVH);
      setVH();
      .element {height: calc(var(--vh, 1vh) * 100);
      }
2. 滚动条影响
  • 问题:滚动条宽度可能占用视口宽度,导致 100vw 触发水平滚动条。

  • 解决方案

    html {overflow-x: hidden; /* 隐藏水平溢出 */
    }
3. 最小/最大值保护
  • 防止过度缩放:结合 min()/max() 或 clamp() 限制范围。

    .container {width: min(90vw, 1200px); /* 最大不超过1200px */font-size: clamp(1rem, 2vw, 1.5rem); /* 字体在1rem~1.5rem间变化 */
    }

五、不同单位对比

单位参考基准特点适用场景
vw/vh视口宽/高直接响应视口变化全屏布局、动态缩放
%父元素尺寸依赖父容器,适合局部相对布局嵌套布局、栅格系统
rem根元素字体大小全局稳定,适合响应式字体/间距字体、组件尺寸
em父元素字体大小嵌套影响,适合局部相对尺寸文本间距、图标对齐
px固定像素无视视口变化,精确控制边框、小图标

  

Less 详解

Less(Leaner Style Sheets)是一种 CSS 预处理器,扩展了 CSS 语法,增加了变量、混合(Mixins)、嵌套、运算、函数等功能,使 CSS 更易维护和扩展。以下是 Less 的核心特性与用法详解:


一、核心语法与功能

1. 变量(Variables)
  • 定义变量:使用 @ 符号。

  • 使用变量:引用变量名。

    @primary-color: #1e90ff;  // 定义变量
    .button {background: @primary-color;  // 使用变量
    }
2. 混合(Mixins)
  • 定义混合:类似函数,可复用样式块。

  • 调用混合:通过名称引用。

    .border-radius(@radius: 5px) {  // 带默认参数的混合border-radius: @radius;
    }
    .card {.border-radius(10px);  // 调用混合
    }
3. 嵌套(Nesting)
  • 嵌套规则:子选择器嵌套在父级内部。

  • & 符号:引用父选择器。

    .nav {padding: 1rem;li {display: inline-block;&:hover {  // 等同于 .nav li:hovercolor: red;}}
    }
4. 运算(Operations)
  • 数学运算:支持加减乘除。

  • 单位处理:自动转换单位。

    @base-margin: 10px;
    .box {margin: @base-margin * 2;  // 20pxwidth: 100% / 3;          // 33.33333%
    }
5. 函数(Functions)
  • 内置函数:颜色处理、字符串操作等。

    @color: #ff0000;
    .darkened {background: darken(@color, 20%);  // 颜色变暗 20%
    }
  • 自定义函数:通过混合模拟函数。

    .add(@a, @b) {@result: @a + @b;
    }
    .box {.add(10, 20);width: @result;  // 30px
    }
6. 命名空间(Namespaces)
  • 封装样式组:避免命名冲突。

    #utils() {.center() {display: flex;justify-content: center;}
    }
    .container {#utils.center();  // 调用命名空间中的混合
    }
7. 导入(Import)
  • 模块化拆分:合并多个 Less 文件。

    @import "variables.less";  // 导入变量文件
    @import "mixins.less";     // 导入混合文件

 


二、高级特性

1. 条件与循环
  • 条件语句:通过 when 实现逻辑判断。

    .text-color(@color) when (lightness(@color) > 50% {color: black;
    }
    .text-color(@color) when (lightness(@color) <= 50% {color: white;
    }
  • 循环:通过递归混合实现。

    .generate-columns(@n, @i: 1) when (@i <= @n) {.col-@{i} {width: (@i * 100% / @n);}.generate-columns(@n, (@i + 1));
    }
    .generate-columns(4);  // 生成 .col-1 到 .col-4
2. 作用域(Scope)
  • 变量作用域:就近原则,局部变量覆盖全局。

    @var: red;
    .box {@var: blue;color: @var;  // blue
    }
3. 映射(Maps)
  • 键值对存储:通过命名空间模拟 Map。

    #colors() {primary: #1e90ff;secondary: #ff6b6b;
    }
    .button {background: #colors[primary];
    }

三、实战应用场景

1. 主题切换
// 定义主题变量
@theme-light: {background: white;color: black;
};
@theme-dark: {background: black;color: white;
};// 应用主题
.theme(@theme) {@theme();
}
body {.theme(@theme-dark);
}
2. 响应式设计
@breakpoint-mobile: 768px;
.respond-to(@device, @content) when (@device = mobile) {@media (max-width: @breakpoint-mobile) {@content();}
}.container {width: 100%;.respond-to(mobile, {width: 90%;margin: 0 auto;});
}
3. 组件库开发
// 定义按钮混合
.button(@bg-color, @text-color) {padding: 8px 16px;background: @bg-color;color: @text-color;&:hover {background: darken(@bg-color, 10%);}
}// 生成不同按钮
.btn-primary {.button(#1e90ff, white);
}
.btn-danger {.button(#ff6b6b, white);
}

四、Less 与 Sass 对比

特性LessSass(SCSS)
语法类似 CSS,兼容性强支持缩进语法(Sass)和类 CSS 语法(SCSS)
功能基础功能完善,学习曲线平缓功能更强大(如条件、循环更灵活)
社区生态较成熟,但活跃度低于 Sass生态更丰富,插件和框架更多
编译速度较快稍慢(功能更复杂)
适用场景中小项目快速开发大型复杂项目,需要高级特性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43394.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数电】半导体存储电路

组合逻辑电路输入和输出之间是确定关系&#xff0c;与之前的历史记录没有任何关系。时序逻辑电路则有相应的存储元件&#xff0c;要把之前的状态保存起来。 要构成时序逻辑电路&#xff0c;必须要有相应的存储元件&#xff0c;第五章讲述相应的存储元件 一、半导体存储电路概…

OPPO手机如何实时翻译会议视频?视频翻译轻松应对多语言场景

在全球化日益深入的今天&#xff0c;跨语言沟通已成为职场和生活中的常见需求。无论是参加国际会议、观看外语视频&#xff0c;还是与海外客户交流&#xff0c;语言障碍都可能成为效率的绊脚石。幸运的是&#xff0c;OPPO手机凭借其强大的功能和智能化设计&#xff0c;为用户提…

28_跨域

目录 promise promise的基本语法 async await try catch promise 静态方法 跨域 跨域的解决方案 1-cors ​编辑 2-jsonp方案 3-代理服务器 promise promise 是一个es6新增的语法 承诺的意思 作用:是专门用来解决回调地狱!!!! promise的基本语法 // 基本语法:// Pr…

LeetCode Hot100 刷题笔记(4)—— 二叉树、图论

目录 一、二叉树 1. 二叉树的深度遍历&#xff08;DFS&#xff1a;前序、中序、后序遍历&#xff09; 2. 二叉树的最大深度 3. 翻转二叉树 4. 对称二叉树 5. 二叉树的直径 6. 二叉树的层序遍历 7. 将有序数组转换为二叉搜索树 8. 验证二叉搜索树 9. 二叉搜索树中第 K 小的元素 …

【漏洞复现】Apache Tomcat partial PUT文件上传反序列化漏洞复现(CVE-2025-24813)

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 0x00 免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用&#xff1b;任何个人/组织须在合法合规…

BurpSuit抓包失败-基础配置

问题描述&#xff1a;当开启拦截抓包的时候&#xff0c;burpsuite没有反应&#xff0c;好不容易经过一通配置&#xff0c;浏览器出现无法访问的情况。 解决办法&#xff1a; 下载浏览器插件 首先下载一个代理转换插件&#xff1a;Omega&#xff0c;这样比较方便&#xff0c;…

求解AX=XB 方法

一、简介 一文浅谈旋转变换&#xff1a;旋转矩阵、旋转向量、欧拉角、四元数-CSDN博客 在机器人学、计算机视觉和几何学中&#xff0c;经常会遇到求解矩阵方程 AXXB 的问题。这种方程通常出现在坐标系变换、手眼标定&#xff08;Hand-Eye Calibration&#xff09;等场景中。理…

AnimateCC基础教学:随机抽取获奖名单及奖品-V1.0原型版

舞台界面设计: 主轴第一帧代码&#xff1a; this.btnObj.addEventListener("click", updateStage.bind(this)); createjs.Ticker.addEventListener("tick", updateRandom.bind(this)) var _this this; var bPlaying false; var nameList ["张三…

深入了解Linux内核:task_struct结构详解

Linux 操作系统的广袤世界里&#xff0c;进程管理宛如一座大厦的基石&#xff0c;支撑着整个系统的稳定运行与高效运转 。而task_struct结构体&#xff0c;无疑是进程管理这座大厦的核心支柱&#xff0c;它承载着进程的关键信息&#xff0c;贯穿于进程从诞生到消亡的整个生命周…

IsaacLab最新2025教程(7)-引入IK solver控制机器人

机器人控制可以直接给定关节角进行驱动实现功能&#xff0c;完成任务&#xff0c;但是关节角不是很直观而且做teleoperation或者是结合VLA模型时候&#xff0c;用eef pose会更符合直觉一些&#xff0c;isaacsim用的是LulaKinematics&#xff0c;因为IsaacLab现在是ETHZ的团队在…

Vue——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs

文章目录 一、概念理解二、指令1. 常用内置指令总结2. 常用指令修饰符3. 自定义指令4. v-model原理表单类组件封装 三、补充1. computed计算属性2. watch监视器3. ref和$refs 一、概念理解 【事件处理函数】 事件处理函数应该写到一个跟data同级的配置项&#xff08;methods&a…

求职笔试题

PDD 最长公共子序列 1143-最长公共子序列 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:"""二维动态规划"""m, n len(text1), len(text2)# dp [[0]* (n1)] * (m1) 这种写法错误&#xff0c;m1行…

【Ragflow】6. Ragflow-plus重磅更新:增加用户后台管理系统

概述 Ragflow本身并不包含用户管理的功能&#xff0c;我在系列前文中&#xff0c;写过一个脚本&#xff0c;用来批量插入用户&#xff0c;并自动加入团队&#xff0c;配置默认模型设置。然而&#xff0c;此方式需要用户安装对应环境&#xff0c;对普通用户并不友好。 因此我开…

什么是贴源库

贴源库的定义与核心概念 贴源库&#xff08;Operational Data Store, ODS&#xff09;是数据架构中的基础层&#xff0c;通常作为数据仓库或数据中台的第一层&#xff0c;负责从业务系统直接抽取、存储原始数据&#xff0c;并保持与源系统的高度一致性。其核心在于“贴近源头”…

MSTP+VRRP三层架构综合实验

一、实验目的 掌握VLAN、VRRP、STP和Eth-Trunk的基本配置方法。 实现内网与外网的通信&#xff0c;并确保网络的高可用性和冗余性。 理解DHCP、OSPF和NAT在网络中的应用。 二、实验环境 网络拓扑&#xff1a;如图所示&#xff0c;包含两台三层交换机&#xff08;SW1、SW2&a…

未来村庄智慧灯杆:点亮乡村智慧生活​

在乡村振兴与数字乡村建设的时代进程中&#xff0c;未来村庄智慧灯杆凭借其多功能集成与智能化特性&#xff0c;已成为乡村基础设施建设领域的崭新焦点&#xff0c;为乡村生活带来了前所未有的便利&#xff0c;推动着乡村生活模式的深刻变革。​ 多功能集成&#xff1a;一杆多能…

RedHatLinux(2025.3.22)

1、创建/www目录&#xff0c;在/www目录下新建name和https目录&#xff0c;在name和https目录下分别创建一个index.htm1文件&#xff0c;name下面的index.html 文件中包含当前主机的主机名&#xff0c;https目录下的index.htm1文件中包含当前主机的ip地址。 &#xff08;1&…

第十五章:Python的Pandas库详解及常见用法

在数据分析领域&#xff0c;Python的Pandas库是一个不可或缺的工具。它提供了高效的数据结构和数据分析工具&#xff0c;使得数据处理变得简单而直观。本文将详细介绍Pandas库的基本功能、常见用法&#xff0c;并通过示例代码演示如何使用Pandas进行数据处理。最后&#xff0c;…

算法为舟 思想为楫:AI时代,创作何为?

在科技浪潮汹涌澎湃的当下,AI技术以前所未有的态势席卷各个领域,创作领域亦未能幸免。当生成式AI展现出在剧本撰写、诗歌创作、图像设计等方面的惊人能力时,人类创作者仿佛置身于文明演化的十字路口,迷茫与困惑交织,兴奋与担忧并存。在AI时代,创作究竟该何去何从?这不仅…

[Raspberry Pi]如何將看門狗(WatchDog)服務建置在樹莓派的Ubuntu作業系統中?

看門狗(WatchDog)服務常應用於連網的嵌入式邊緣設備等IOT裝置和實體伺服器&#xff0c;主要是若這些連網裝置分散在各個應用環境中執行對應任務&#xff0c;例如感測物理數據&#xff0c;監控影像數據或執行各式Docker服務&#xff0c;當連網裝置因故異常&#xff0c;同時又處於…