Table des matières
Convention de dénomination CSS BEM : qu'est-ce que c'est, pourquoi c'est important et comment l'utiliser ?
Ahmet Erkan Paşahan ・ 14 septembre
Maison interface Web tutoriel CSS Maîtriser le nommage CSS BEM avec des exemples pratiques : HTML pur, Angular et Next.js

Maîtriser le nommage CSS BEM avec des exemples pratiques : HTML pur, Angular et Next.js

Sep 18, 2024 pm 09:15 PM

Dans l'article précédent, nous avons exploré les bases de la convention de dénomination BEM en CSS et pourquoi elle est cruciale pour maintenir un code propre et évolutif.

Cette fois, nous approfondirons avec des exemples pratiques pour voir comment BEM fonctionne dans différents environnements : Pure HTML, Angular, et Next.js.

BEM ne se limite pas aux structures HTML de base ; il peut être appliqué efficacement dans n’importe quel framework frontend moderne. À la fin de cet article, vous comprendrez mieux comment implémenter BEM dans diverses configurations de développement.

Exemple 1 : Utilisation de BEM en HTML pur

Dans cet exemple, nous allons créer une carte de profil utilisateur qui change dynamiquement de style en fonction du statut en ligne ou hors ligne de l'utilisateur. Il s'agit d'un cas d'utilisation courant dans les applications du monde réel où les éléments doivent changer en fonction de l'état ou de la condition.

HTML :

<div class="user-card user-card--offline">
  <img src="profile.jpg" alt="User Avatar" class="user-card__avatar" />
  <div class="user-card__info">
    <h2 class="user-card__name">John Doe</h2>
    <p class="user-card__status">Offline</p>
  </div>
</div>
Copier après la connexion

CSS :

.user-card {
  display: flex;
  align-items: center;
  padding: 15px;
  border: 1px solid #ddd;
  border-radius: 10px;
  background-color: #f5f5f5;
  max-width: 300px;
}

.user-card__avatar {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  margin-right: 15px;
}

.user-card__info {
  display: flex;
  flex-direction: column;
}

.user-card__name {
  font-size: 18px;
  font-weight: bold;
  margin-bottom: 5px;
}

.user-card__status {
  font-size: 14px;
  color: #888;
}

.user-card--online {
  border-color: #4caf50;
  background-color: #e8f5e9;
}

.user-card--online .user-card__status {
  color: #4caf50;
}

.user-card--offline {
  border-color: #f44336;
  background-color: #ffebee;
}

.user-card--offline .user-card__status {
  color: #f44336;
}
Copier après la connexion

Explication :

  • La carte-utilisateur est le bloc représentant la carte du profil utilisateur.
  • Modificateurs comme user-card--online et user-card--offline modifient l'apparence de la carte en fonction du statut de l'utilisateur.
  • user-card__avatar, user-card__name et user-card__status sont des éléments du bloc user-card représentant respectivement l'avatar, le nom et le statut.
  • L'utilisation de BEM indique clairement quels styles s'appliquent au bloc et quels styles changent en fonction du statut de l'utilisateur.

Exemple 2 : Application de BEM dans Angular

Dans cet exemple angulaire, nous allons créer un bouton interactif qui affiche un état de chargement lorsque vous cliquez dessus. Il s'agit d'un cas d'utilisation fréquent dans les formulaires ou les éléments interactifs où l'état du bouton change en fonction de l'interaction de l'utilisateur ou des appels d'API.

Composant angulaire (button.component.html) :

<button class="button" [ngClass]="{'button--loading': isLoading, 'button--primary': !isLoading}" (click)="handleClick()">
  <span *ngIf="!isLoading">{{ buttonText }}</span>
  <span *ngIf="isLoading">Loading...</span>
</button>
Copier après la connexion

Styles de composants (button.component.css) :

.button {
  padding: 12px 24px;
  background-color: #333;
  color: #fff;
  border-radius: 4px;
  border: none;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.button--primary {
  background-color: #007BFF;
}

.button--loading {
  background-color: #666;
  cursor: not-allowed;
}

.button--loading span {
  font-size: 14px;
}
Copier après la connexion

Logique des composants (button.component.ts) :

import { Component, Input } from '@angular/core';

@Component({
  selector: 'app-button',
  templateUrl: './button.component.html',
  styleUrls: ['./button.component.css']
})
export class ButtonComponent {
  @Input() buttonText: string = 'Submit';
  isLoading: boolean = false;

  handleClick() {
    this.isLoading = true;

    setTimeout(() => {
      this.isLoading = false;
    }, 2000);
  }
}
Copier après la connexion

Explication :

  • Le bloc bouton représente le bouton de base.
  • La directive [ngClass] ajoute dynamiquement un bouton en cours de chargement lorsque le bouton est dans un état de chargement et un bouton principal lorsqu'il est dans son état par défaut.
  • Le texte du bouton change en fonction de l'état isLoading.
  • La méthode handleClick simule un état de chargement et le réinitialise après 2 secondes, ce qui représente un scénario d'appel API typique.

Exemple 3 : implémentation de BEM dans Next.js

Dans cet exemple Next.js, nous allons créer un menu de navigation qui met en évidence la page active de manière dynamique. Il s'agit d'un scénario courant dans les applications Web où la page actuelle doit être indiquée visuellement dans la navigation.

Composant Next.js (components/NavBar.js) :

import { useRouter } from 'next/router';

export default function NavBar() {
  const router = useRouter();

  return (
    <nav className="nav">
      <ul className="nav__list">
        <li className={`nav__item ${router.pathname === '/' ? 'nav__item--active' : ''}`}>
          <a href="/" className="nav__link">Home</a>
        </li>
        <li className={`nav__item ${router.pathname === '/about' ? 'nav__item--active' : ''}`}>
          <a href="/about" className="nav__link">About</a>
        </li>
        <li className={`nav__item ${router.pathname === '/contact' ? 'nav__item--active' : ''}`}>
          <a href="/contact" className="nav__link">Contact</a>
        </li>
      </ul>
    </nav>
  );
}
Copier après la connexion

Styles Next.js (styles/NavBar.module.css) :

.nav {
  background-color: #333;
  padding: 10px;
}

.nav__list {
  list-style: none;
  display: flex;
  gap: 20px;
}

.nav__item {
  margin: 0;
}

.nav__link {
  color: white;
  text-decoration: none;
}

.nav__item--active .nav__link {
  font-weight: bold;
  color: #007BFF;
}
Copier après la connexion

Explication :

  • Le hook useRouter de Next.js est utilisé pour obtenir l'itinéraire actuel (router.pathname).
  • Le modificateur nav__item--active est appliqué dynamiquement selon que la page actuelle correspond ou non à l'élément de menu.
  • La page active est mise en évidence en changeant la couleur du texte et en mettant la police en gras.
  • Le nav__link est un élément à l'intérieur du bloc nav__item.

Conclusion

L'utilisation de BEM dans votre projet vous permet de maintenir la cohérence et l'évolutivité de votre CSS, même lorsque vous traitez des composants dynamiques et des états changeants. En tirant parti de BEM pour la gestion des états, les changements de classe dynamiques et le style conditionnel, vous pouvez garder votre code structuré, modulaire et facile à maintenir.

Ces exemples détaillés montrent comment BEM peut être appliqué dans des applications du monde réel, facilitant ainsi la gestion de composants d'interface utilisateur complexes dans différents frameworks.

Suivez-moi pour plus de mises à jour !

J'espère que cet article vous a aidé à approfondir votre compréhension de l'utilisation de CSS BEM sur différentes plates-formes. Si vous êtes intéressé par plus d'articles, de conseils pratiques et d'informations sur le développement Web, assurez-vous de me suivre pour des mises à jour régulières. N'hésitez pas à nous contacter si vous avez des questions ou des commentaires : j'aimerais me connecter et avoir de vos nouvelles !

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Dead Rails - Comment apprivoiser les loups
4 Il y a quelques semaines By DDD
<🎜>: Grow A Garden - Guide de mutation complet
2 Il y a quelques semaines By DDD
Niveaux de force pour chaque ennemi et monstre de R.E.P.O.
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Sujets chauds

Tutoriel Java
1657
14
Tutoriel PHP
1257
29
Tutoriel C#
1229
24
Fontes variables de polices Google Fontes variables de polices Google Apr 09, 2025 am 10:42 AM

Je vois que Google Fonts a déployé un nouveau design (tweet). Comparé à la dernière grande refonte, cela semble beaucoup plus itératif. Je peux à peine faire la différence

Comment créer un compte à rebours animé avec HTML, CSS et JavaScript Comment créer un compte à rebours animé avec HTML, CSS et JavaScript Apr 11, 2025 am 11:29 AM

Avez-vous déjà eu besoin d'un compte à rebours sur un projet? Pour quelque chose comme ça, il pourrait être naturel d'atteindre un plugin, mais c'est en fait beaucoup plus

Guide des attributs de données HTML Guide des attributs de données HTML Apr 11, 2025 am 11:50 AM

Tout ce que vous avez toujours voulu savoir sur les attributs de données dans HTML, CSS et JavaScript.

Comment sélectionner un élément enfant avec l'élément de nom de première classe via CSS? Comment sélectionner un élément enfant avec l'élément de nom de première classe via CSS? Apr 05, 2025 pm 11:24 PM

Lorsque le nombre d'éléments n'est pas fixé, comment sélectionner le premier élément enfant du nom de classe spécifié via CSS. Lors du traitement de la structure HTML, vous rencontrez souvent différents éléments ...

Pourquoi les zones réduites pourpre dans la disposition Flex sont-elles considérées à tort «espace de débordement»? Pourquoi les zones réduites pourpre dans la disposition Flex sont-elles considérées à tort «espace de débordement»? Apr 05, 2025 pm 05:51 PM

Questions sur les zones de slash violet dans les dispositions flexibles Lorsque vous utilisez des dispositions flexibles, vous pouvez rencontrer des phénomènes déroutants, comme dans les outils du développeur (D ...

Comment nous avons créé un site statique qui génère des modèles tartan dans SVG Comment nous avons créé un site statique qui génère des modèles tartan dans SVG Apr 09, 2025 am 11:29 AM

Le tartan est un chiffon à motifs qui est généralement associé à l'Écosse, en particulier leurs kilts à la mode. Sur tartanify.com, nous avons rassemblé plus de 5 000 tartan

Une preuve de concept pour rendre Sass plus rapidement Une preuve de concept pour rendre Sass plus rapidement Apr 16, 2025 am 10:38 AM

Au début d'un nouveau projet, la compilation SASS se produit en un clin d'œil. Cela se sent bien, surtout quand il est associé à BrowSersync, qui recharge

See all articles