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

当我们构建网站或应用程序时,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日

相关文章

  • CSS3实现的闪烁跳跃进度条示例(附源码)

    下面就为您详细讲解CSS3实现的闪烁跳跃进度条示例的完整攻略: 一、实现思路 在HTML代码中创建一个 标签,作为进度条的容器 使用CSS3的动画特性,将进度条进行闪烁跳跃的动画效果 通过JavaScript来动态控制进度条的宽度,实现进度条的进度控制 二、HTML结构 首先,在HTML代码中,需要创建一个 标签,作为进度条的容器。具体代码如下: <d…

    css 2023年6月10日
    00
  • 从css 3d说到空间坐标轴附源码

    从CSS 3D到空间坐标轴附源码,是一项涉及3D视觉效果的技术,可以在Web页面中呈现更丰富、更生动的内容。下面是详细讲解这个过程的攻略: 什么是CSS 3D? CSS 3D是CSS3中的一种功能,支持在Web页面上实现3D视觉效果。其本质是一个立体坐标系,能够控制元素的位置、方向、大小等属性,让元素在3D空间中进行位移、旋转、缩放等变换。实现CSS 3D需…

    css 2023年6月10日
    00
  • JavaScript 模块化详解

    JavaScript 模块化详解 在 Web 开发中,JavaScript 是一种非常重要的编程语言。然而,当项目变得越来越复杂时,JavaScript 开发也变得越来越困难。这就是由于缺失命名空间、依赖管理及封闭作用域等问题造成的。 为了解决这些问题,我们引入了 JavaScript 模块化,以便将代码封装,并保持代码的可维护性和可重用性。 什么是 Jav…

    css 2023年6月9日
    00
  • html css js 实现Tab标签页示例代码

    HTML、CSS、JS 实现 Tab 标签页是前端开发中常见的应用场景,可以通过实现 Tab 标签页来实现页面的切换和内容展示。下面我将详细讲解 HTML、CSS、JS 实现 Tab 标签页的攻略: HTML 页面结构 在 HTML 中,每个 Tab 页都可以用一个 div 元素来表示,其中每个 div 元素要包含一个与之相对应的唯一标识符 ID 和相应的内…

    css 2023年6月9日
    00
  • IE下textarea中font-size值很大时文字不显示的解决方法

    这个问题的解决方案是使用CSS hack来解决。在IE浏览器下,使用font-size:0来覆盖原有的样式,然后使用zoom:1来将元素缩小,最后再使用一个较大的字体大小。具体实现步骤和示例说明如下。 步骤一:覆盖原有样式 首先,在CSS文件中,为对应的textarea样式添加font-size:0样式。这个样式将会覆盖掉原有的字体大小设置。 textare…

    css 2023年6月9日
    00
  • 轻松掌握CSS3中的字体大小单位rem的使用方法

    下面是详细讲解如何轻松掌握CSS3中的字体大小单位rem的使用方法的完整攻略: 前言 在进行网页设计时,很多设计师经常使用像素(px)作为字体大小的单位。然而,像素单位的缺点也很明显:当用户在不同屏幕尺寸和分辨率下浏览网页时,字体的大小就会出现偏差,这会影响用户体验。因此,CSS3中引入了rem(root em)作为字体大小的单位,以解决依赖于像素单元导致字…

    css 2023年6月9日
    00
  • 在浏览器中解析”赋予margin属性”的checkbox空白边距(IE6和FF)

    在浏览器中解析“赋予margin属性”的checkbox空白边距,实际上是指针对 HTML 表单元素 checkbox 加入 margin 属性时,会出现空白边距的问题。具体攻略如下: 1. 问题分析 首先需要分析问题所在。在 PC 端的 IE6 和 FF 浏览器中,如果为 HTML 表单元素 checkbox 设置了 margin 属性,会出现空白边距。这…

    css 2023年6月9日
    00
  • javascript五图轮播切换实用版

    首先,本文将介绍如何使用JavaScript实现一个基础的轮播切换功能。本文所使用的代码可以在此Github仓库中查看。 第一步:HTML结构 首先,在HTML中,我们需要一个容器元素,和需要轮播展示的图片元素。以下是一份示例代码: <div class="carousel-container"> <img src=&q…

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