CSS 自定义属性进阶使用 (二)

CSS 之 自定义属性(变量) CSS的自定义属性,又称为CSS变量或级联变量,用于定义一个带有值的、可重复使用的CSS属性(变量)。其包含的值可以在其作用域内的任意属性上重复使用,在使用时需要借助var()函数获取自定义属性的值。当自定义属性的值发生变化时,所有使用该自定义属性的CSS属性都会随之变化。 阅读详情

⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展。博主创作的 《前端面试复习笔记》(点击订阅),广受好评,已帮助多人提升实力、拿到 offer。现在订阅,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见!

CSS 自定义属性 进阶(二)

模块化CSS

通常,为了实现可复用可定制的模块,我希望将某个实现抽象化。例如,下面这段CSS代码:

.grid {  
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  padding: calc(var(--margin) / 2);
}
.grid > .cell {
  display: block;
  width: calc(100% / var(--columns) - var(--margin));
  margin: calc(var(--margin) / 2);
}

那么,要怎么抽象出这段代码呢?

  • 抽象封装

首先,作为一个模块需要沙盒机制,所以先给它们都加上命名空间,取名有很多种方式,比如 BEM 还有 SMACSS。不过简洁起见。在本文里我们暂时用 my- 作为前缀。再补充上变量定义和一些注释:

.my-grid {
	/* CSS 变量定义
     网格的列数 网格边距 列与列的间距 */
  --my-grid-columns: 1;
  --my-grid-margin: 16px;

  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  /* 兼容代码 */
  padding: 8px;
  padding: calc(var(--my-grid-margin) / 2);
}
  • 使用
<link rel="stylesheet" href="my-grid.css">

引入样式表之后,根据样式覆盖原则,在默认样式的之后对 CSS 变量赋上新值:

<style>
  .my-grid {
    --my-grid-columns: 2;
  }
</style>

也可以在其他的选择器中对变量赋值;还能通过媒体查询,在不同的场景下使用不同的值:

.my-app .my-grid {
  --my-grid-columns: 1;
  --my-grid-margin: 8px;
}

@media (min-size: 600px) {
  .my-app .my-grid {
    --my-grid-columns: 3;
    --my-grid-margin: 16px;
  }
}

@media (min-size: 1024px) {
  .my-app .my-grid {
    --my-grid-columns: 6;
    --my-grid-margin: 16px;
  }
}

应用:保持图片长宽比

假如你正在搭建自己的博客,你想给图片元素设置 max-width,防止它超出容器的范围:

.my-content {
	max-width:600px;
}

如果一开始图片没有占位,那么在图片加载的时候页面内容会不断往下移动,所以一开始就要为图片占好位。在 img 标签中直接定义了宽高的话:

<img src="demo.jpg" height="1024" width="768">

图片在自适应窗口宽度的时候,浏览器是不会保证它的横纵比的,它只能保证图片的高度是 768px 同时让图片的宽度不要超过 600px(CSS 中的定义),结果我们会得到一张变形的图片:
在这里插入图片描述
那么你要怎么保证图片在任何场景下都不变形?使用 padding 保证图片的长宽比应该是最广为人知的方式,如果要实现 16:9 的比例,你可以这么做:

.aspect-ratio-16-9 {
  position: relative;
}

.aspect-ratio-16-9::before {
  display: block;
  padding-top: 56.25%; /* 9 / 16 * 100% */
  content: "";
}

.aspect-ratio-16-9-content {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
}

HTML 结构如下:

<div class="aspect-ratio-16-9">
  <div class="aspect-ratio-16-9-content">
    This box will have a 16:9 aspect ratio.
  </div>
</div>

如果只有几种横纵比还好,但你要做的是网格布局的图片流,就会遇到各种各样尺寸的图片,这个方法明显不能解决问题。

  • 使用自定义属性
.my-image-wrapper {
  /* 自定义属性
   * 长宽比 */
  --my-image-wrapper-w: 1; 
  --my-image-wrapper-h: 1;

  position: relative;
}

.my-image-wrapper::before {
  display: block;
  padding-top: calc(var(--my-image-wrapper-h, 1) / var(--my-image-wrapper-w, 1) * 100%);//缺省值为1
  content: "";
}

.my-image-wrapper > img {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  height: 100%;
  width: 100%;
}

—my-image-wrapper-w 和 —my-image-wrapper-h 就是模块化的 CSS 接口,使用起来很灵活:

<h3>原图尺寸:1024*768,故图片的宽高比是 4:3</h3>
<div class="my-content my-image-wrapper" style="width:768px; --my-image-wrapper-w:4; --my-image-wrapper-h:3;">
  <img src="demo.jpg">
</div>

现在可以正常显示了:

在这里插入图片描述
OK ,关于CSS自定义属性进阶使用的系列的文章,暂时介绍到这里。

css也可以使用变量(CSS 自定义属性) css也可以定义变量(CSS 自定义属性) 今天无意间看到这篇文章阮一峰的网络日志——《css变量教程》,记录一下学习成果; 基础部分 –myVariable:red   // 双横线- -用于声明变量    /*变量名大小写敏感 */ var(<custom-property-name> , <declaration-value>? )   // var()函数用于读取变量&nbs 阅读详情

相关推荐

微信聊天记录数据库解密实战:从WCDB到sqlcipher4的关键步骤解析

本文详细解析了微信桌面版聊天记录数据库的解密实战过程。通过逆向分析,定位了微信从WCDB框架到sqlcipher4加密的关键步骤,并成功提取了数据库密钥。文章重点介绍了如何通过动态调试、字符串定位等方法,追踪并验证sqlcipher4的加密密钥,最终实现对加密数据库文件的解密操作,为安全研究和数据恢复提供了技术参考。

weixin_29322553的博客 1071

CSS中 自定义属性(变量)详解

自定义属性(有时也被称作CSS变量或者级联变量)是由CSS作者定义的,它包含的值可以在整个文档中重复使用。 由自定义属性标记设定值(比如: --main-color: black;),由 var() 函数来获取值(比如: color: var(–main-color);) 复杂的网站都会有大量的CSS代码,通常也会有许多重复的值。 举例:同样一个颜色值可能在成千上百个地方被使用到,如果这个值发生了变化,需要全局搜索并且一个一个替换。 自定义属性在某个地方存储一个值,然后在其他许多地方引用它。另一个好处是语义

明天也要努力的博客 9994

Basilisk vs. STK:开源航天仿真工具在Windows上的实战体验与生态对比

本文对比了开源航天仿真工具Basilisk与商业软件STK在Windows平台上的实战体验与生态差异。从技术架构、安装配置、使用成本、功能覆盖、社区生态到适用场景,全面分析了二者的优劣势,为航天工程师和研究人员提供选型参考。Basilisk在性能和扩展性上表现突出,而STK在可视化与专业模块上更具优势。

weixin_30632089的博客 588

CSS 自定义属性(变量)

复杂的网站都会有大量的 CSS 代码,通常也会有许多重复的值。举个例子,同样一个颜色值可能在成千上百个地方被使用到,如果这个值发生了变化,需要全局搜索并且一个一个替换(很麻烦哎~)。自定义属性在某个地方存储一个值,然后在其他许多地方引用它。另一个好处是语义化的标识。比如,--main-text-color 会比 #00ff00 更易理解,尤其是这个颜色值在其他上下文中也被使用到。自定义属性受级联的约束,并从其父级继承其值。

cd_yang2017的博客 3052

Qt中多线程的使用(一)

我们要实现的是读取大文件qtgui.index的内容加入文本框中。 很容易想到的方法: QFile* file = new QFile("E:\qtgui.index"); file-&gt;open(QIODevice::ReadOnly); QTextStream *stream = new QTextStream(file); while(!st...

yao5hed的专栏 1万+

Unsloth Desktop 本地大模型微调量化实战指南

大语言模型的本地化定制正在成为开发者与内容创作者的重要需求,而微调与量化则是其中最关键的两项技术。LoRA 与 QLoRA 通过仅训练少量低秩矩阵,大幅降低显存占用和训练成本,让消费级 GPU 也能完成模型适配;GGUF 格式则打通了训练与推理的边界,使微调后的模型可直接接入 Ollama、llama.cpp 等主流推理引擎。本文以 Unsloth Desktop 为切入对象,从其底层加速原理出发,梳理了环境准备、模型加载、对话测试、量化导出、微调验证及 API 批量调用的完整链路,并针对显存优化、端口冲突

weixin_29055137的博客 397

CSS系列(20)-- 自定义属性详解

CSS之旅第二十站

欢迎来到这里,希望文章能对你有所帮助 1141

手把手教你学PCIE(9.3)--pcie常见故障及原因:配置错误介绍

PCIe 设备的配置错误可能涉及操作系统设置、BIOS 设置、驱动程序设置和配置文件设置等多个方面。通过以上方法,可以有效地诊断和解决 PCIe 设备的配置错误。

MHD0815的博客 2435

CSS专题之自定义属性

CSS 自定义属性(CSS Custom Properties),也称为 CSS 变量,是现代 CSS 中用于定义和复用值的强大工具。与 CSS 预处理器(如 Sass)不同,CSS 变量在浏览器运行时动态生效,支持与 DOM 和 JavaScript 交互,提升了样式的维护性和动态控制能力。变量的声明以 -- 开头,并通过 var() 函数使用,支持回退值和多种数据类型。CSS 变量具有作用域,遵循层叠规则,能够在 @media 和 @keyframes 等规则中使用,但不能用于媒体查询或选择器中。尽管现

m0_56326830的博客 1460

8、音频运行时系统的架构设计

本文深入探讨了音频运行时系统的分层设计及其优势,包括逻辑层和物理层的功能划分。通过分层设计,开发者可以更轻松地管理和优化音频资源,确保其在不同平台上的高效运行。文章还介绍了平台适配与优化、错误处理与调试以及未来发展方向等内容,为开发者提供了宝贵的参考和指导。

juice的博客 461

linux那些事之numa balance

numa balance numa balance是页迁移技术最重要也是最开始使用应用的技术,主要是为解决由于调度器进程在两个node迁移造成访问内存性能问题。 numba balance通过页迁移技术,将不在运行节点的内存迁移到所运行的节点上。对应numa balance要注意几点: 防止进程在两个节点之前来回切换造成频繁进行页迁移(ping pang现场)从而影响性能。numa balance本身就是为了提高性能,不能因为造成频繁页迁移而对性能进行一个反向优化。 多个线程分布在不同线程 访.

weixin_42730667的博客 3907

【CSS】CSS自定义属性进阶使用(一)

进阶使用CSS自定义属性 在之前一篇介绍CSS自定义属性的文章中,我们介绍了什么是CSS自定义属性,var()、calc()。本篇文章中,为了进一步使用它,我们将介绍CSS自定义属性的其他用法。 自定义原则 在传统的CSS中,通常我们需要写重复的属性值,而自定义原则能让我们避免这种情况。做到“一处定义,处处使用”。 :root { --theme-color: gray; } .button......

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 820

基于fme和python-docx第三方库批量更新不动产调查表

最近应朋友需要批量更新在不动产成果中提交的各种word报表中的指定数据,根据初步的了解,我做了一个基于fme软件和python-docx第三方库进行一个批量的更新方案。

weixin_43229258的博客 1240

CSS 自定义属性,css变量使用方法

在 JavaScript 中,变量有作用域一说。它们可能是全局作用域,也有可能是局部作用域。那么在CSS中,CSS自定义属性也有这样的说法。:root (等同于html)选择器可以选择到 DOM 元素中或 document 树中最高顶级的元素。因此,在 :root 选择器中声明的CSS 自定义属性,其作用域的范围是全局范围,也就是全局作用域。局部作用域就是它所在的选择器的有效范围。同一个 CSS 变量,可以在多个选择器内声明。读取的时候,优先级最高的声明生效。

北极星的博客 2358

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

CSS @property(CSS 自定义属性)

@property CSS Houdini API 的一部分,它允许开发者显式地定义他们的 CSS 自定义属性, 允许进行属性类型检查、设定默认值以及定义该自定义属性是否可以被继承。接下来,我们将探索 CSS 变量与自定义属性的区别以及适合使用自定义属性的部分场景。

两个月亮 3263

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

CSS使用自定义属性显示提示文字

实际开发场景中需要自定义鼠标悬停显示提示文字效果,使用操作DOM虽然能实现需求,但不是最优方案。其实,可以使用CSS的attr属性来实现,不需要额外的DOM操作代码 例如页面HTML结构如下: <div class="text-container"> <p class="article" data-tip="提示内容:CSS实现效果">CSS自定义提示信息...

张小程博客 5006

css自定义属性和使用

1、自定义属性的命名规则 --variables-name:variables-value(变量名是大小写敏感的) --属性名:属性值 例如定义一个主题颜色: --theme-color:red; // 例如: root{ --primary-color:#989898; --light:#fff; --dark:#000; } 2、作用域 //:root作用于全局 :root{ --theme-color:red; } //#app作用于id为ap

牛先森家的博客 707

CSS的自定义属性以及var()函数

css自定义属性与var()函数的基本使用方法,让css样式更加灵活

hongying_18的博客 2226

[CSS]CSS自定义属性

CSS自定义属性 定义 使用 支持第二个参数 动态改变自定义属性的值 声明可以层叠和继承 变量组合 通过JavaScript改变自定义属性的值 为低版本浏览器提供回退(fallback)方案 demo 参考资料 CSS自定义属性 Custom Properties for Cascading Variables(用作层叠式变量的自定义属性)的CSS规范将“变量”的概...

qq_33291740的博客 1959

css div自定义属性,CSS 自定义属性 - 入门

引言CSS语言是一种声明式语言,不像其他语言有变量、条件和逻辑等特性,因为这个原因,社区中有了各种CSS处理器语言,比如Sass、LESS和Stylus等。这些处理器语言引入了一些类似其他程序语言的特性,比如变量、运算符和逻辑运算等。虽然CSS处理器给编写和维护CSS带来了一些便利,但是需要额外的编译,所以社区开始将CSS处理器中的变量引入到原生CSS中,最后形成了今天的CSS自定义属性。一、CS...

weixin_39595487的博客 1446

css自定义属性和H5自定义属性

 复杂的网站都会有大量的css代码,通常也会有很多重复的值。举个例子,同样的一个颜色可能在成百上千的地方被使用到,如果这个值发生了变化,需要全局搜索并且一个一个去替换,效率不高且容易出错。..................

SSophia的博客 1181

使用CSS自定义属性实现页面的主题切换

CSS自定义属性(Custom Properties),在一个css选择器内部进行定义,使用两个短横连接线 `--` 作为开头命名的名称即被称为自定义属性。

jimojianghu的专栏 3095

css进阶使用

css进阶使用。

m0_55297736的博客 1542

【实战技巧】CSS自定义属性以及在VUE3中的使用

什么是css自定义属性 官方称之为 自定义属性 ,但我比较习惯叫它 变量 ,简单点说就是一种开发者可以自主命名和使用的 CSS 属性. CSS变量和预处理器中的变量有什么不同? CSS变量是浏览器中直接可用的CSS属性,而预处理中的变量是用于编译成常规的CSS代码,浏览器其实对它们一无所知。 我们可以在 样式表中 ,在 内联样式 中,在 SVG的标签 中直接使用CSS变量,甚至可以在 运行时 用JavaScript直接修改它。但是我们是 无法 对预处理器中的变量做上面这些操作的. 当然,可以同时使用CSS变

m0_48721669的博客 3491

CSS 进阶:动画、布局新特性 Houdini 自定义属性:CSS 动画、布局与自定义属性实践

接口契约除了字段名,还要说明缺字段、越权、空结果、超时和重复请求分别会得到什么。调用方只有能根据返回状态做出确定动作,契约才算完整。版本演进时,可选字段的默认行为、未知枚举值的处理和弃用周期都需要写在同一处。联调用正常请求不够,再准备至少一条缺失条件、一条拒绝访问和一条下游不可用的请求。观察客户端会不会错误地把临时状态显示为成功,服务端会不会在重试时重复创建资源。那些没有覆盖的分支也应如实标注。使用为偏好减少动态效果的用户关闭或缩短动画。

2301_77785315的博客 4878

JavaFX自定义组件——添加自定义的css属性

JavaFX自定义组件库——添加自定义css属性

a974988176的博客 2820
上一篇: 【CSS】CSS自定义属性进阶使用(一)
下一篇: 【前端路由】实现一个 hash、history 路由,改善页面渲染体验
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值