当前位置: 首页 > article >正文

【CSS/SCSS】@layer的介绍及使用方法

目录

  • 基本用法
  • `@layer` 的作用与优点
    • 分离样式职责,增强代码可读性和可维护性
    • 防止无意的样式冲突
    • 精确控制样式的逐层覆盖
    • 提高复用性
  • 兼容性
  • 实际示例:使用 `@import` 管理加载顺序
  • 实际示例:混入与 `@layer` 结合使用

@layer 是 CSS 中用于组织和管理样式优先级的分层规则。通过 @layer,可以将 CSS 样式分为多个层(layer),控制不同层的样式覆盖关系,而不需要依赖于选择器的具体优先级。这个功能在较大的项目中尤其有用,因为它可以避免样式冲突,确保自定义样式能覆盖框架或第三方库的默认样式。

基本用法

@layer reset, base, components, utilities;

/* 定义 reset 层 */
@layer reset {
  * {
    margin: 0;
    padding: 0;
  }
}

/* 定义 base 层 */
@layer base {
  body {
    font-family: sans-serif;
  }
}

/* 定义 components 层 */
@layer components {
  .button {
    padding: 10px;
    background-color: blue;
    color: white;
  }
}

/* 定义 utilities 层 */
@layer utilities {
  .text-center {
    text-align: center;
  }
}

@layer 的作用与优点

分离样式职责,增强代码可读性和可维护性

@layer 允许我们将不同层的样式逻辑分开,使得代码更加结构化和模块化。例如:

  • reset 层:用于初始化样式,清除浏览器默认样式。
  • base 层:为全局标签(如 body、h1 等)设置基础样式。
  • components 层:包含组件的样式,如按钮、卡片等。
  • utilities 层:是用于修改特定样式的工具类,如 text-center 等。

控制样式的覆盖顺序@layer 通过定义层级次序决定样式的应用顺序。reset 层会先应用,然后是 base、components 和 utilities 层,后面的层可以覆盖前面的层样式。
使用多个 @layer 顺序控制:通过将自定义样式按顺序放入 @layer,并保证它们在样式表中位于第三方样式之后,可以更好地管理优先级。

防止无意的样式冲突

通过 @layer,可以显式控制样式的优先级,不依赖于选择器的权重。这样可以减少无意的样式冲突。例如,如果一个第三方库没有使用 @layer,而您将其放在 base 层之前,它不会覆盖您的 components 层或 utilities 层样式。

精确控制样式的逐层覆盖

即使在多个层次中为同一元素定义样式,层的优先级仍然让您可以有序地覆盖样式。比如:

@layer reset {
  .button {
    background: none;
  }
}
@layer base {
  .button {
    padding: 8px;
  }
}
@layer components {
  .button {
    background-color: blue;
    color: white;
  }
}
@layer utilities {
  .button.large {
    padding: 12px;
  }
}

在这种情况下,components 和 utilities 可以为 .button 添加样式,但不会互相冲突,而是有条理地叠加。

提高复用性

分层结构有助于让样式在组件之间复用。例如 base 和 utilities 中的规则可以在多个组件中复用,而无需重新定义。这减少了代码的重复性,提高了样式的复用率。

兼容性

在这里插入图片描述

实际示例:使用 @import 管理加载顺序

如果您的样式是通过 @import 引入的,可以借助 @layer 和 @import 的组合,在 @layer 中引入第三方样式,以便更好地管理加载顺序。例如:

@layer library {
  @import url('third-party-library.css');
}

@layer custom {
  /* 自定义样式放置在 custom 层 */
  .button {
    background-color: blue;
    color: white;
  }
}

实际示例:混入与 @layer 结合使用

@layer components {
  /* 按钮样式 */
  @mixin button-style($bg-color) {
    background-color: $bg-color;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
  }

  .btn-primary {
    @include button-style(blue);
  }

  .btn-secondary {
    @include button-style(gray);
  }
}


http://www.kler.cn/a/374672.html

相关文章:

  • Spring Cloud Sleuth(Micrometer Tracing +Zipkin)
  • shodan7,shodan参数使用,常用端口,Google语法
  • RNN在训练中存在的问题
  • 深度学习数学基础之梯度
  • 二、k8s快速入门之docker+Kubernetes平台搭建
  • 构造函数和new操作符 - 2024最新版前端秋招面试短期突击面试题【100道】
  • 二百七十六、ClickHouse——Hive和ClickHouse非常不同的DWS指标数据SQL语句
  • NPM 包开发与优化全面指南
  • Resnet50进行迁移学习实现图片二分类
  • vue vxeui 上传组件 vxe-upload 全局配置上传方法,显示上传进度,最完美的配置方案
  • 音视频听译:助力多维度沟通与发展的大门
  • 预告帖|在MATLAB/Simulink中调用C语言的几种方法
  • 【neo4j】 neo4j cypher单一语句 optional 可选操作的技巧
  • 【CSS in Depth 2 精译_055】8.3 伪类 :is() 和 :where() 的正确打开方式
  • JS 字符串拼接并去重
  • Java 判断回文数
  • 乐鑫ESP32-S3无线AI语音方案,教育机器人交互应用,启明云端乐鑫代理商
  • Linux补基础之:网络配置
  • 笔试题 求空格分割的英文句子中,最大单词长度。
  • 大语言模型推理代码构建(基于llama3模型)
  • 2001-2023年A股上市公司数字化转型数据(MDA报告词频统计)(三种方法)
  • (51)MATLAB迫零均衡器系统建模与性能仿真
  • python使用pymysql
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.13——深入理解指针(3)
  • Glide 简易教程
  • 【Rust标准库中的convert(AsRef,From,Into,TryFrom,TryInto)】