css 命名:BEM, scoped css, css modules 与 css-in-js详解

yizhihongxing

当我们构建网站或应用程序时,CSS样式通常是一个必不可少的部分,而CSS命名则让样式代码更有条理和易于维护。本文将会介绍三种常见的CSS命名方式:BEM,Scoped CSS,CSS Modules和CSS-in-JS。让我们一一介绍它们之间的不同。

BEM 命名

BEM (块、元素、修饰符)是命名约定的一种流行方式,向一起工作的开发人员提供可维护的、可重用的和具有意义的类名称。BEM将CSS类名分为块、元素和修饰器三个概念。它利用嵌套,CSS选择器和修饰符来降低选择器特异性,从而使样式更具灵活性。

例如,我们可以用BEM命名规范编写以下代码:

<div class="card card--featured">
  <div class="card__title">Featured Card</div>
</div>

在此示例中,card表示块名,title表示元素名,而修饰符是featured。我们可以使用card块的样式作为title元素的样式的基础样式,而在需要加一些修饰符时,我们只需要在card块中添加对应的修饰符即可。

Scoped CSS 命名

Scoped CSS是一种通过为每个组件添加唯一的类名或ID来解决CSS样式冲突的方法。这种方法通过在组件的“外壳”中定义CSS样式,并将其限制在组件的范围内,可以避免全局CSS样式与其他组件之间发生冲突和影响。

例如,在Vue.js或React中,我们可以使用以下方式定义组件:

<template>
  <div class="container">
    <p class="text">Hello, world!</p>
  </div>
</template>

<style scoped>
.container {
  background-color: #ededed;
  padding: 20px;
}

.text {
  font-size: 18px;
}
</style>

在此示例中,scoped属性指定该组件内部所有CSS样式仅适用于该组件,并且容器和文本元素将被限制为Hello, world的范围。

CSS Modules 命名

CSS模块是一种使用Webpack等构建工具的方式,它将CSS文件编译为本地模块,为每个模块分配唯一的类名,并且只可供模块内部使用。CSS模块避免了全局命名空间的污染,使得每个模块的CSS感觉更独立。

例如,在React中,我们可以使用以下方式定义CSS Module的样式:

/* style.module.css */
.container {
  background-color: #ededed;
  padding: 20px;
}

.text {
  font-size: 18px;
}
import styles from './style.module.css';

function MyComponent() {
  return (
    <div className={styles.container}>
      <p className={styles.text}>Hello, world!</p>
    </div>
  );
}

在此示例中,我们使用import关键字导入CSS模块并使用styles对象,该对象包含分配给.container.text选择器的唯一类名。

CSS-in-JS 命名

CSS-in-JS是一种将CSS作为JavaScript模块处理的技术,它使用JSX语法和JavaScript对象来表示CSS样式,这使得样式的定义更具声明性和可重用性。它是一种直接在JavaScript中定义CSS的非常不同的思路,一提到CSS-in-JS,第一个想到的库当然是styled-components。

例如,在React组件中,我们可以使用以下方式定义CSS:

import styled from 'styled-components';

const Button = styled.button`
  background: ${props => props.primary ? 'red' : 'white'};
  color: ${props => props.primary ? 'white' : 'red'};
  font-size: 14px;
  padding: 10px 20px;
  border-radius: 4px;
`;

function MyComponent() {
  return (
    <div>
      <Button primary>Primary button</Button>
      <Button>Secondary button</Button>
    </div>
  );
}

在此示例中,我们使用了styled-components库,通过JSX定义了Button组件的样式,而且可以根据组件的的props来动态改变样式。

以上就是本文介绍的CSS命名方式的详细说明。需要注意的是,每种命名方式都有其自身的优缺点,根据具体的场景选择适当的命名方式,可以使我们更好的管理CSS代码,提高开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:css 命名:BEM, scoped css, css modules 与 css-in-js详解 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • reset.css引入以及1px边框问题的解决方法

    下面我来详细讲解一下“reset.css引入以及1px边框问题的解决方法”的完整攻略。 什么是reset.css? reset.css指的是一个用于重置浏览器默认样式的样式表。浏览器在页面渲染时会默认给HTML标签和其他标签添加一些默认样式,如padding、margin、font-size等,这些样式在不同的浏览器上可能会不同。在编写网页时,我们希望网页设…

    css 2023年6月10日
    00
  • Web时代变迁及html5与html4的区别

    Web时代变迁及html5与html4的区别: Web从诞生至今,经历了不少的变迁。目前我们广泛使用的Web大多数是基于HTML,而HTML也从刚开始的HTML4逐渐演变至HTML5。HTML5相较于HTML4,新增了一些特性和改进了一些性能,下面我们详细讲解HTML5与HTML4的区别。 一、HTML5与HTML4的语言类型 HTML5:<!DOCT…

    css 2023年6月9日
    00
  • Vue首页加载白屏原因以及10种解决方法汇总

    Vue首页加载白屏原因以及10种解决方法汇总 在使用Vue开发web应用时,我们经常会遇到网页加载白屏的情况。这种情况对用户体验和网站流量都有着非常不利的影响。以下是Vue首页加载白屏的常见原因以及相应的解决方法。 原因1: 依赖项未安装 有时候我们在使用Vue的时候,由于依赖库没有安装和配置,导致页面加载白屏。此时我们需要检查项目依赖库是否完全安装、是否有…

    css 2023年6月10日
    00
  • 使用分层画布来优化HTML5渲染的教程

    使用分层画布是一种优化 HTML5 渲染性能的方法,它可以将页面的渲染过程分为多个层次,从而减少页面的重绘和重排,提高渲染速度。 下面是使用分层画布来优化 HTML5 渲染的详细攻略: 设置图层 要使用分层画布,必须首先将页面的某些元素设置为一层。可以使用CSS的transform属性或will-change属性将元素设置为一层。 例如,以下CSS代码将di…

    css 2023年6月10日
    00
  • css画一个棒棒糖的实例代码

    下面是“CSS画一个棒棒糖”的实例代码攻略,具体步骤如下: 1. 画出棒棒糖的形状 首先,我们可以使用倾斜的矩形和圆形来绘制棒棒糖的形状。 例如,我们可以使用以下代码来创建棒棒糖的形状: .lollipop { width: 50px; height: 120px; position: relative; background: #f00; border-r…

    css 2023年6月9日
    00
  • 详解css3中 text-fill-color属性

    详解 CSS3 中 text-fill-color 属性 CSS3 中,有一个 text-fill-color 属性可以用于设置文本填充色。它与 color 属性不同,color 属性仅设置文本颜色,而 text-fill-color 属性不仅可以设置文本颜色,还可以设置文本毛边的颜色。 语法 text-fill-color: color | auto; c…

    css 2023年6月9日
    00
  • jQuery实现的浮动层div浏览器居中显示效果

    要实现一个浮动层div在浏览器居中显示,可以使用下面的步骤: 1. 设置浮动层div的样式 首先需要定义一个浮动层div的样式,设置它的宽度、高度、颜色、边框等属性,并让它在页面中以绝对定位的方式浮动。 #float-layer { position: absolute; width: 300px; height: 200px; background-col…

    css 2023年6月10日
    00
  • Bootstrap CSS组件之按钮下拉菜单

    下面开始详细讲解“Bootstrap CSS组件之按钮下拉菜单”的完整攻略: 简介 Bootstrap是一个集成了HTML、CSS和JavaScript框架的开源前端框架,由Twitter开发,主要用于开发响应式和移动设备优先的网站。 Bootstrap提供了丰富的CSS组件,包括了按钮下拉菜单,可以极大地提高网站的用户交互性和美观性。 步骤 1. 引入Bo…

    css 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部