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

CSS @scope与12个降低css冲突方法

一、@scope 是一个全新的 CSS @ 规则,它允许我们将样式的作用域限制在 DOM 树的特定部分。即,再也不会泄露出去影响到全局。

1.1、传统写法 (BEM)
//html
<div class="card"><h2 class="card__title">文章标题</h2><p class="card__content">这里是一些内容...</p><a href="#" class="card__link"></a>
</div><!-- 页面其他地方可能还有一个不相关的 title -->
<h1 class="page-title">FedJavaScript</h1>//css
.card__title{font-size: 10px;color: #333;
}.card__content{color: #888;line-height: 1.6em;
}.card__link{color: blue;text-decoration: none;
}
1.2、使用 @scope 的新写法
<div class="card"><h2>文章标题</h2><p>这里是一些内容...</p><a href="#"></a>
</div><h1 class="page-title">FedJavaScript</h1>//css
@scope(.crad){h2{font-size: 10px;color: #333;}p{color: #888;line-height: 1.6em;}a{color: blue;text-decoration: none;}
}
//优势:HTML 变得结构更干净了,CSS 更直观了,也不存在样式泄露问题。

1.3、@scope伪类:引用作用域根元素——在 @scope 块内部,我们可以使用 :scope 伪类来直接选中作用域的根元素本身。

:scope(.card){/* :scope 指向 .card 元素本身 */:scope{border: 1px solid red;border-radius:8px;padding: 1rem;box-show: 0 2px 5px rgba(0,0,0,0.1);}
}

二、12个降低css冲突方法

1. BEM命名规范
/* 传统方式 */
.sidebar .title { }/* BEM命名 */
.sidebar__title--highlight {color: #007bff;font-weight: bold;
}
2. CSS Modules
/*styles.module.css*/
.container{max-width: 1200;margin: 0 auto;
}import styles from './styles.module.css'
funtion Component(){return <div className={styles.container}></div>;
}
3. Shadow DOM:利用Web Components的Shadow DOM实现完全的样式隔离。
class MyComponent extends HTMLElement {constructor(){super();const show = this.attachShadow({mode: 'closed'});const style = document.createElement('style');style.textContent = `:host {display: block;background: #f4f4f4;}`;shadow.appendChild(style);}
}
4. CSS 命名空间:为不同模块或组件添加特定的命名空间前缀。
/* 页面级命名空间 */
.homepage-header { }
.homepage-sidebar { }/* 组件级命名空间 */
.user-profile__avatar { }
.user-profile__name { }
5. @scope规则(新特性)

案例再上面一种

6. CSS自定义属性(变量)继承:通过自定义属性实现可控的样式继承和隔离。
.theme-light {--primary-color: blue;--secondary-color: green;
}.theme-dark {--primary-color: darkblue;--secondary-color: darkgreen;
}.button {background-color: var(--primary-color);
}
7. 作用域选择器 :where() 和 :is()——利用新一代选择器降低选择器特异性。
/* 降低选择器特异性 */
//作用:选择所有具有 title 类名的元素,这些元素必须位于具有 sidebar 类名的元素内部
:where(.sidebar .title) {font-weight: bold;
}// 作用:选择位于 .header 或 .footer 元素内部的所有 .nav 元素
:is(.header, .footer) .nav {display: flex;
}
等价写法
.header .nav,
.footer .nav {display: flex;
}
8. CSS Containment:使用contain属性限制CSS布局和绘制的作用范围。
.component {contain: layout;  /* 隔离布局 */contain: paint;   /* 隔离绘制 */contain: strict;  /* 完全隔离 */
}
9. 样式穿透控制:在组件库和框架中精确控制样式穿透。
/* Vue Scoped Style */
// 含义:在Vue的scoped样式中,让样式穿透到子组件内部
// 作用:选择 .parent 元素内部的所有 .child 元素,包括子组件中的 .child 元素
// 使用场景:需要修改子组件内部特定类名的样式时使用
.parent ::v-deep .child {color: red;
}/* CSS Selector */
含义:明确指定某些选择器不受局部作用域限制
作用:选择 .component 元素的直接子元素中具有 external-class 类名的元素
特点:external-class 类名不会被添加Vue的scoped标识符
使用场景:需要与外部CSS类名或第三方组件库样式配合时使用
.component > :global(.external-class) {margin: 10px;
}
10. 层叠层级 @layer:通过定义样式层级管理样式优先级。
@layer reset, base, components, utilities;@layer components {.button {background: blue;}
}
11. 动态样式生成:通过JavaScript动态生成和管理唯一样式。
function generateUniqueClassName() {return `custom-${Math.random().toString(36).substring(2)}`;
}const className = generateUniqueClassName();
element.classList.add(className);
12. 样式重置策略:全局和局部样式重置的平衡策略。
/* 局部重置 */
.reset-list {margin: 0;padding: 0;list-style: none;
}/* 范围重置 */
@scope (.card) {ul {margin: 0;}
}


文章转载自:

http://J3uiyEKY.ntzfL.cn
http://xYPUBlea.ntzfL.cn
http://RudydKMx.ntzfL.cn
http://yBUDP9hi.ntzfL.cn
http://y6zqprCn.ntzfL.cn
http://EkWtrcrR.ntzfL.cn
http://qaWxFS3G.ntzfL.cn
http://nnrVm3BW.ntzfL.cn
http://iVBA735v.ntzfL.cn
http://yTg2tgXw.ntzfL.cn
http://kHPTyGIt.ntzfL.cn
http://4F68VNAC.ntzfL.cn
http://blacnUjs.ntzfL.cn
http://NKnuM0wW.ntzfL.cn
http://AH5ikTtj.ntzfL.cn
http://nMtLtLUk.ntzfL.cn
http://ZzxtGDy4.ntzfL.cn
http://CZ5ScMlz.ntzfL.cn
http://BwINZazj.ntzfL.cn
http://uaWjF4iN.ntzfL.cn
http://cu6SFFfl.ntzfL.cn
http://yGvj7CZH.ntzfL.cn
http://4mNKZNgp.ntzfL.cn
http://Eg6OhVKa.ntzfL.cn
http://I1szrsAl.ntzfL.cn
http://KqW8H9hi.ntzfL.cn
http://ncjHM4lW.ntzfL.cn
http://rw9YsJZJ.ntzfL.cn
http://eyikHBGQ.ntzfL.cn
http://ZK2XWLHe.ntzfL.cn
http://www.dtcms.com/a/372823.html

相关文章:

  • pytorch 中是如何实现embeding 的
  • 【.Net技术栈梳理】02-核心框架与运行时(GC管理)
  • 洗完头后根据个人需求选择合适的自然风干 | 电吹风 (在保护发质的同时,也能兼顾到生活的便利和舒适。)
  • 人才教育导向下:老年生活照护实训室助力提升学生老年照护服务能力
  • Typescript入门-类型断言讲解
  • 使用Pycharm进行远程ssh(以Featurize为例)
  • 云原生:微服务与Serverless指南
  • 时序数据库选型指南:大数据与物联网时代下的深度剖析与 Apache IoTDB 实践
  • Python 实现 HTML 转 Word 和 PDF
  • 亚马逊长尾关键词怎么找?从传统运营到DeepBI的智能策略演进
  • 打造高效Jenkins CICD环境全解析
  • 学习笔记:MYSQL(4)
  • Vue的响应式底层原理:Proxy vs defineProperty
  • Jenkins运维之路(初识流水线)
  • 内窥镜冷光源
  • Linux设备内存不足如何处理
  • 【JavaSE】复习总结
  • uview使用u-popup组件当开启遮罩层禁止下层页面滚动。uniapp弹框禁止页面上下滚动。
  • 爱普生喷墨打印机所有指示灯同时闪烁,不工作,怎么解决?
  • 这是一款没有任何限制的免费远程手机控制手机的软件
  • 【LCA 树上倍增】P9245 [蓝桥杯 2023 省 B] 景区导游|普及+
  • 【计算机网络】计算机网络英文名词速查
  • C++之queue类的代码及其逻辑详解
  • 36.Java序列化与反序列化是什么
  • 进阶向:HTTP性能优化实战
  • 对计算机网络模型的理解
  • 【Linux】MySQL数据目录迁移步骤(含流程图踩坑经验)
  • LangChain: Evaluation(评估)
  • 在电路浪涌测试中,TVS(瞬态电压抑制二极管)的防护效果确实会受到陪测设备中去耦网络(Decoupling Network,DN)的显著影响
  • 深入了解linux系统—— 日志