要实现css样式隔离,你会怎么做?

文章探讨了CSS全局作用域在React应用中导致的样式冲突和冗余代码问题,提到了命名规范如BEM和CSS解决方案,包括css-in-js、CSSModules以及使用SCSS的嵌套和属性选择器来实现更隔离的样式定义。
摘要由CSDN通过智能技术生成

背景

css 没有作用域的概念,这就导致 css 在书写的时候都是全局作用域。产生的影响如下:

开发者在书写过程中会造成因 classname 相同,产生样式污染、css规则层叠()。
因某一个元素具有不同的状态增加众多的冗余css代码。

随着 SPA 应用的兴起,全部的 css 会在同一个环境中同时进行加载,相互影响的问题更加严峻。

React中现状

React官方没有规定在React应用里应该如何写css,

虽然官方教程里多数是写的inline-css

但是官方并不推荐这样做,

其中一个原因是性能没有单独写成class的好

如果解决样式覆盖的问题呢?

  • 使用 命名规范( BEM 、OOCSS、SMACSS等) 来解决命名冲突,人为手动 为每个 class 属性起一个唯一的名字(很繁琐)
  • css-in-js的方案(增加了概念),
  • css-modules方案,但是每个className都需要写一个styles.实在是浪费键盘。

可以参考下面文章:

react基础入门到项目实战 学习笔记 21 - react css module

其实我们也可以使用scss的嵌套语法和CSS 属性选择器来简单实现隔离。

比如js文件里这样写:

function App() {
  return (
    <div className="app" data-component="app">
      <div className="content">
        <p className="title">标题</p>
        <p className="text">隔离css</p>
      </div>
    </div>
  );
}

scss文件里这样写

[data-component=app] {
  .content {
    padding: 20px;
    .title {
      font-size: 18px;
      font-weight: bold;
      color: #333333;
    }
    .text {
      font-size: 16px;
      color: #333333;
    }
  }
}

扫描二维码,查看更加详细内容
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端布道人

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值