Table des matières
1. Modularisation groupée
1.1 Meilleures pratiques
1.2 Extension du langage CSS
3.1 styled-jsx
3.1.1 安装工具(babel 转码所需)
3.1.2 配置 babel plugins(如 .babelrc
3.1.3 添加源文件代码
3.1.4 转码
3.1.5 运行
Maison interface Web tutoriel CSS Qu'est-ce que la modularité CSS ? Comment implémenter la modularité CSS

Qu'est-ce que la modularité CSS ? Comment implémenter la modularité CSS

Sep 17, 2018 pm 02:18 PM
css javascript 前端

Le contenu de cet article porte sur qu'est-ce que la modularité CSS ? La méthode d'implémentation de la modularisation CSS a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère qu'elle vous sera utile.

Modularité CSS

CSS (Cascading Style Sheets) a été décidé dès le début qu'il ne peut pas être programmé et n'est même pas un langage interprété. Il ne peut être utilisé que comme un simple style en cascade. feuilles, qui formatent les éléments HTML.

Mais avec le développement du front-end, les projets front-end sont devenus de plus en plus vastes et complexes, et la communauté a exploré comment gérer le code front-end (js/css/html) et les ressources (images , polices, ...).

Dans ce processus, la communauté a exploré la modularité de js (amd, commonjs, es6). Il est désormais facile de développer de grands projets avec js, mais la modularité de css n'a pas encore été particulièrement populaire.

1. Modularisation groupée

Il s'agit de la première implémentation de la modularisation CSS et de la manière la plus importante de développer désormais de nombreux composants et développeurs.

La modularisation groupée consiste à utiliser la dénomination, avec différents préfixes représentant différentes significations, pour obtenir un regroupement de styles et un regroupement de fichiers afin d'atteindre l'objectif de modularisation.

Par exemple :

# 目录结构
|-- one/page/css/ 某个页面的 css 目录
    |-- common.css 通用的 css
    |-- page1/ 单页面1
        |-- section1.css 区域1 css
        |-- section2.css 区域2 css
    |-- page2/ 单页面2
    |-- ...
    
# common.css 文件
.c-el-1 {
    ...
}
.c-el-2 {
    ...
}    
...    
    
# page1/section1.css 文件
.page1-section1 {
    ...
}
.page1-section1 .el-1 {
    ...
}    
.page1-section1 .el-2 {
    ...
}    
...

# page1/section2.css 文件
.page1-section2 {
    ...
}
.page1-section2 .el-1 {
    ...
}    
.page1-section2 .el-2 {
    ...
}    
...
Copier après la connexion

Cette méthode n'est pas modulaire au sens propre car elle ne peut pas éviter les conflits globaux, mais du CSS natif Je n'ai pas la capacité de programmer, ce problème est donc inévitable. Bien que le regroupement ne soit pas modulaire au sens propre du terme, cette méthode ne rompt pas avec le CSS. Il s'agit d'un mécanisme natif, c'est pourquoi de nombreux composants tiers utilisent cette méthode lors de l'exportation de fichiers CSS.

Par exemple, le préfixe ant- est utilisé dans le css exporté par ant-design, le préfixe mui- est utilisé dans le css exporté par mui, etc.

1.1 Meilleures pratiques

Le regroupement de noms CSS est pratiqué depuis longtemps. Il existe depuis la naissance du CSS, la communauté s'est donc développée de manière très mature, comme le cadre de spécification CSS de NetEase. NEC.

Supplément :

Un fichier CSS ne doit pas être trop volumineux, vous pouvez utiliser @import pour diviser le fichier en blocs

N'utilisez pas #id [attr] ; pour le rendu de style, essayez de l'utiliser autant que possible .class;

Lorsque vous utilisez la bibliothèque js pour faire fonctionner dom, essayez de ne pas utiliser .class, essayez d'utiliser l'ensemble de données #id, tel que $(' #main'), $('[data-tab="1 "]').

<ul>
    <li data-tab="1">tab1</li>
    <li data-tab="2">tab2</li>
</ul>
<p data-tab-container="1"></p>
<p data-tab-container="2"></p>
Copier après la connexion

1.2 Extension du langage CSS

Parce que CSS n'est pas un langage de programmation, il ne peut pas déclarer de variables, de fonctions, faire des jugements, des boucles et des calculs, et ne peut pas s'imbriquer, ce qui rend l'écriture du style est un travail inefficace et ennuyeux.

Afin de résoudre ce problème, la communauté a principalement dérivé deux langages d'extension​​less et sass lors de l'exploration. Ils sont compatibles avec CSS et disposent de fonctions de programmation étendues. Ils apportent principalement les fonctionnalités suivantes :

Vous pouvez déclarer des variables et des fonctions, et effectuer des calculs, des jugements et des boucles simples ;

Vous pouvez imbriquer des sélecteurs, ce qui permet d'économiser du contenu et est plus lisible ;

.page1-section1 {
    ...
    
    .el-1 {
        ...
        
        .el-1-1 {
            ...
        }
    }
        
    .el-2 {
        ...
    }   
}
Copier après la connexion
@import évite les problèmes d'importation répétés, vous pouvez donc importer d'autres fichiers en toute confiance.

D'un point de vue modulaire, less et sass ne font qu'étendre les fonctions du CSS, mais n'implémentent pas la modularisation au niveau du langage car le problème des conflits de noms globaux existe toujours.

2. Modularisation (exportée comme objet js)

Si vous souhaitez que CSS ait une fonction modulaire au vrai sens du terme, cela ne peut pas être envisagé au niveau du langage pour le moment, donc vous ne pouvez utiliser les outils que du point de vue de la mise en œuvre.

Actuellement, une meilleure façon consiste à utiliser js pour charger le fichier CSS, à exporter le contenu CSS en tant qu'objet, à utiliser js pour restituer l'intégralité de l'arborescence dom et à faire correspondre les styles correspondants aux éléments correspondants. nous avons la possibilité de faire des traitements supplémentaires sur css pour atteindre la modularité.

Par exemple :

Fichier source

# style.css 文件
.className {
  color: green;
}

# js 文件
import styles from "./style.css";

element.innerHTML = '<p class="&#39; + styles.className + &#39;">Hello!</p>';
Copier après la connexion

Effet réel

# style.css 文件
._23_aKvs-b8bW2Vg3fwHozO {
  color: green;
}

# DOM
<p class="_23_aKvs-b8bW2Vg3fwHozO">Hello!</p>
Copier après la connexion
Au cours de ce processus de conversion, une chaîne base64 unique au monde est générée en fonction de l'emplacement et du contenu du fichier, et le nom d'origine est remplacé, évitant ainsi le problème des conflits de noms globaux, ainsi atteindre l'objectif de modularité. Par conséquent, il n’y a pas de problème de conflit de style global pendant le processus de développement.

# common.css 文件
.container {
    ...
}
.el1 {
    ...
}
.el2 {
    ...
}    
...    
    
# page1/section1.css 文件
.container {
    ...
}
.title {
    ...
}    
.content {
    ...
}    
...

# page2/section1.css 文件
.container {
    ...
}
.title {
    ...
}    
.content {
    ...
}
...
Copier après la connexion
Pour la définition de la modularité CSS, voir css-modules. Les principales exigences pour écrire du CSS sont :

1.class doit être utilisé à la place de #id [attr] ( car Seul .class peut être exporté en tant qu'attribut d'un objet);

2 Il est recommandé d'écrire dans .className au lieu de .class-name (le premier est accessible via styles.className et le ce dernier doit être accessible via styles['class-name '] accessible).

Pour plus de fonctionnalités, consultez les modules CSS.

Bien sûr, cette fonction nécessite la prise en charge de l'outil de construction. Si vous utilisez webpack pour construire le projet, vous pouvez utiliser css-loader et définir options.modules sur true pour utiliser la fonction modulaire.

3. Modularisation (js intégré, composants de liaison)

Avec le développement de la composantisation frontale, la mise à jour des frameworks de composantisation, tels que React et Vue, s'est lentement développée pour devenir le entier Les ressources du composant sont encapsulées et un seul objet est exposé au monde extérieur. L'appelant n'a pas besoin de se soucier de l'implémentation interne et des ressources du composant. Il suffit d'appeler directement cet objet.

比如(以 react 为例),一个 Welcome 组件,包括一个 js 文件、一个 css 文件、图片:

# Welcome 组件
|-- welcome.js
|-- welcome.css
|-- images/
Copier après la connexion

welcome.js 中便可如下加载(使用“导出为 js 对象”的 css 模块化):

import styles from './welcome.css';
import image1 from './images/1.jpg';
Copier après la connexion

其实,还有另外一种思路,就是将 css 内置 js 中,成为 js 的一部分。

这样做的目的,一是 css 的模块化,二是直接绑定到组件上。

比如,material-ui、styled-jsx、jss、vue style scoped 便是使用的这种方式。

这种方式的实现有很多种,这里主要介绍一下 styled-jsx。

3.1 styled-jsx

styled-jsx 的原理是根据当前文件的位置、内容生成一个全局唯一的标识,然后把这个标识追加到组件每一个元素上,每一个样式选择器上,达到模块化的目的。

可以参考官方文档,查看详细的用法,我在这里给个例子:

3.1.1 安装工具(babel 转码所需)

npm install --save styled-jsx
Copier après la connexion

3.1.2 配置 babel plugins(如 .babelrc

{
  "plugins": [
    "styled-jsx/babel"
  ]
}
Copier après la connexion

3.1.3 添加源文件代码

hello.js

export default () => (
    <div className={&#39;container&#39;}>
        <p className={&#39;hello&#39;}>Hello! Hello!</p>
        <div id={&#39;hi&#39;}>Hi!</div>
        <style jsx>{`
          .container {
            color: blue;
          }
          p:first-child {
            color: red;
          }
          .hello {
            color: yellow;
          }
          #hi {
            color: green;
          }
        `}</style>
    </div>
)
Copier après la connexion

3.1.4 转码

babel path/to/hello.js -d target/dir
Copier après la connexion

转码后的文件

import _JSXStyle from 'styled-jsx/style';
export default () => (
    <div className={&#39;jsx-234963469&#39; + &#39; &#39; + &#39;container&#39;}>
        <p className={&#39;jsx-234963469&#39; + &#39; &#39; + &#39;hello&#39;}>Hello! Hello!</p>
        <div id={&#39;hi&#39;} className={"jsx-234963469"}>Hi!</div>
        <_JSXStyle styleId={"234963469"} css={".container.jsx-234963469{color:blue;}p.jsx-234963469:first-child{color:red;}.hello.jsx-234963469{color:yellow;}#hi.jsx-234963469{color:green;}"} />
    </div>
);
Copier après la connexion

3.1.5 运行

实际渲染效果

<style type="text/css" data-styled-jsx="">
.container.jsx-234963469{
  color:blue;
}
p.jsx-234963469:first-child{
  color:red;
}
.hello.jsx-234963469{
  color:yellow;
}
#hi.jsx-234963469{
  color:green;
}
</style>
<div class="jsx-234963469 container">
  <p class="jsx-234963469 hello">Hello! Hello!</p>
  <div id="hi" class="jsx-234963469">Hi!</div>
</div>
Copier après la connexion

以上就是本篇文章的全部内容了,更多css相关内容请关注php中文网的css教程栏目。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que signifie l'espace réservé en vue Que signifie l'espace réservé en vue May 07, 2024 am 09:57 AM

Dans Vue.js, l'attribut placeholder spécifie le texte d'espace réservé de l'élément d'entrée, qui s'affiche lorsque l'utilisateur n'a pas saisi de contenu, fournit des conseils ou des exemples de saisie et améliore l'accessibilité du formulaire. Son utilisation consiste à définir l'attribut placeholder sur l'élément d'entrée et à personnaliser l'apparence à l'aide de CSS. Les meilleures pratiques consistent à être pertinent par rapport à la contribution, à être court et clair, à éviter le texte par défaut et à prendre en compte l'accessibilité.

Que signifie span en js Que signifie span en js May 06, 2024 am 11:42 AM

La balise span peut ajouter des styles, des attributs ou des comportements au texte. Elle est utilisée pour : ajouter des styles, tels que la couleur et la taille de la police. Définissez des attributs tels que l'identifiant, la classe, etc. Comportements associés tels que clics, survols, etc. Marquez le texte pour un traitement ultérieur ou une citation.

Que signifie rem en js Que signifie rem en js May 06, 2024 am 11:30 AM

REM en CSS est une unité relative par rapport à la taille de la police de l'élément racine (html). Il présente les caractéristiques suivantes : relative à la taille de la police de l'élément racine, non affectée par l'élément parent. Lorsque la taille de la police de l'élément racine change, les éléments utilisant REM s'ajusteront en conséquence. Peut être utilisé avec n’importe quelle propriété CSS. Les avantages de l'utilisation de REM incluent : Réactivité : gardez le texte lisible sur différents appareils et tailles d'écran. Cohérence : assurez-vous que les tailles de police sont cohérentes sur l’ensemble de votre site Web. Évolutivité : modifiez facilement la taille de police globale en ajustant la taille de police de l'élément racine.

Comment introduire des images dans vue Comment introduire des images dans vue May 02, 2024 pm 10:48 PM

Il existe cinq façons d'introduire des images dans Vue : via une URL, une fonction require, un fichier statique, une directive v-bind et une image d'arrière-plan CSS. Les images dynamiques peuvent être gérées dans les propriétés calculées ou les écouteurs de Vue, et des outils fournis peuvent être utilisés pour optimiser le chargement des images. Assurez-vous que le chemin est correct sinon une erreur de chargement apparaîtra.

Qu'est-ce qu'un nœud dans js Qu'est-ce qu'un nœud dans js May 07, 2024 pm 09:06 PM

Les nœuds sont des entités du DOM JavaScript qui représentent des éléments HTML. Ils représentent un élément spécifique de la page et peuvent être utilisés pour accéder et manipuler cet élément. Les types de nœuds courants incluent les nœuds d'élément, les nœuds de texte, les nœuds de commentaires et les nœuds de document. Grâce aux méthodes DOM telles que getElementById(), vous pouvez accéder aux nœuds et opérer sur eux, notamment en modifiant les propriétés, en ajoutant/supprimant des nœuds enfants, en insérant/remplaçant des nœuds et en clonant des nœuds. La traversée des nœuds aide à naviguer dans la structure DOM. Les nœuds sont utiles pour créer dynamiquement du contenu de page, la gestion des événements, l'animation et la liaison de données.

Dans quelle langue le plug-in du navigateur est-il écrit ? Dans quelle langue le plug-in du navigateur est-il écrit ? May 08, 2024 pm 09:36 PM

Les plug-ins de navigateur sont généralement écrits dans les langages suivants : Langages front-end : JavaScript, HTML, CSS Langages back-end : C++, Rust, WebAssembly Autres langages : Python, Java

Comment définir des attributs inconnus dans vscode Méthode vscode pour définir des attributs inconnus Comment définir des attributs inconnus dans vscode Méthode vscode pour définir des attributs inconnus May 09, 2024 pm 02:43 PM

1. Tout d'abord, ouvrez l'icône des paramètres dans le coin inférieur gauche et cliquez sur l'option des paramètres. 2. Ensuite, recherchez la colonne CSS dans la fenêtre sautée. 3. Enfin, remplacez l'option déroulante dans le menu Propriétés inconnues par le bouton d'erreur. .

Moins de fichiers dans Vue peuvent-ils introduire des données ? Moins de fichiers dans Vue peuvent-ils introduire des données ? May 07, 2024 pm 12:06 PM

Oui, Less files dans Vue peuvent introduire des données via des variables CSS et Less mixins : créez un fichier JSON contenant des données. Utilisez la règle @import pour importer des fichiers JSON. Accédez aux données JSON à l'aide de variables CSS ou de Less mixins.

See all articles