찾다
웹 프론트엔드CSS 튜토리얼실제 예제: 순수 HTML, Angular 및 Next.js를 통해 CSS BEM 이름 지정 마스터하기

이전 기사에서는 CSS의 BEM 명명 규칙의 기본 사항과 이것이 깔끔하고 확장 가능한 코드를 유지하는 데 중요한 이유를 살펴보았습니다.

이번에는 순수 HTML, Angular,Next.js

등 다양한 환경에서 BEM이 어떻게 작동하는지 알아보기 위해 실제 사례를 통해 더 깊이 살펴보겠습니다.

BEM은 기본 HTML 구조에만 국한되지 않습니다. 이는 모든 최신 프런트엔드 프레임워크에 효과적으로 적용될 수 있습니다. 이 기사를 마치면 다양한 개발 설정에서 BEM을 구현하는 방법을 더 명확하게 이해하게 될 것입니다.

예제 1: 순수 HTML에서 BEM 사용

이 예에서는 사용자의 온라인 또는 오프라인 상태에 따라 스타일을 동적으로 변경하는 사용자 프로필 카드를 만듭니다. 이는 상태나 조건에 따라 요소를 변경해야 하는 실제 애플리케이션의 일반적인 사용 사례입니다.

HTML:

<div class="user-card user-card--offline">
  <img class="user-card__avatar lazy" src="/static/imghwm/default1.png" data-src="profile.jpg" alt="User Avatar">
  <div class="user-card__info">
    <h2 id="John-Doe">John Doe</h2>
    <p class="user-card__status">Offline</p>
  </div>
</div>

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;
}

설명:

  • 사용자 카드는 사용자 프로필 카드를 나타내는 블록입니다.
  • user-card--online 및 user-card--offline과 같은 수식자는 사용자의 상태에 따라 카드의 모양을 변경합니다.
  • user-card__avatar, user-card__name 및 user-card__status는 각각 아바타, 이름 및 상태를 나타내는 사용자 카드 블록의 요소입니다.
  • BEM을 사용하면 블록에 어떤 스타일이 적용되는지, 사용자 상태에 따라 어떤 스타일이 변경되는지가 명확해집니다.

예시 2: Angular에 BEM 적용

이 Angular 예에서는 클릭 시 로드 상태를 표시하는 대화형 버튼을 만들어 보겠습니다. 이는 사용자 상호 작용이나 API 호출에 따라 버튼 상태가 변경되는 양식이나 대화형 요소에서 자주 사용되는 사례입니다.

Angular 구성 요소(button.comComponent.html):

<button class="button" isloading>
  <span>{{ buttonText }}</span>
  <span>Loading...</span>
</button>

구성요소 스타일(button.comComponent.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;
}

구성요소 로직(button.comComponent.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);
  }
}

설명:

  • 버튼 블록은 기본 버튼을 나타냅니다.
  • [ngClass] 지시어는 버튼(버튼이 로딩 상태일 때 로딩되고, 기본 상태일 때 기본 버튼)을 동적으로 추가합니다.
  • isLoading 상태에 따라 버튼의 텍스트가 변경됩니다.
  • handleClick 메소드는 로딩 상태를 시뮬레이션하고 2초 후에 재설정하며 이는 일반적인 API 호출 시나리오를 나타냅니다.

예제 3: Next.js에서 BEM 구현

이 Next.js 예에서는 활성 페이지를 동적으로 강조 표시하는 탐색 메뉴를 만듭니다. 이는 현재 페이지가 탐색에 시각적으로 표시되어야 하는 웹 애플리케이션의 일반적인 시나리오입니다.

Next.js 구성 요소(구성 요소/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" :>
          <a href="/" classname="nav__link">Home</a>
        </li>
        <li classname="{`nav__item" :>
          <a href="/about" classname="nav__link">About</a>
        </li>
        <li classname="{`nav__item" :>
          <a href="/contact" classname="nav__link">Contact</a>
        </li>
      </ul>
    </nav>
  );
}

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;
}

설명:

  • Next.js의 useRouter 후크는 현재 경로(router.pathname)를 가져오는 데 사용됩니다.
  • nav__item--active 수정자는 현재 페이지가 메뉴 항목과 일치하는지 여부에 따라 동적으로 적용됩니다.
  • 텍스트 색상을 변경하고 글꼴을 굵게 표시하여 활성 페이지를 강조 표시합니다.
  • nav__link는 nav__item 블록 내부의 요소입니다.

결론

프로젝트에서 BEM을 사용하면 동적 구성 요소를 처리하고 상태가 변경되는 경우에도 CSS의 일관성과 확장성을 유지할 수 있습니다. 상태 관리, 동적 클래스 변경 및 조건부 스타일 지정에 BEM을 활용하면 코드를 구조화되고, 모듈화되고, 유지 관리하기 쉽게 유지할 수 있습니다.

이러한 자세한 예는 실제 애플리케이션에 BEM을 적용하여 다양한 프레임워크에서 복잡한 UI 구성 요소를 더 쉽게 관리할 수 있는 방법을 강조합니다.

더 많은 업데이트를 보려면 나를 팔로우하세요!

이 기사가 다양한 플랫폼에서 CSS BEM 사용에 대한 이해를 높이는 데 도움이 되기를 바랍니다. 웹 개발에 대한 더 많은 기사, 실용적인 팁, 통찰력에 관심이 있으시면 정기적인 업데이트를 위해 저를 팔로우하세요. 질문이나 피드백이 있으면 주저하지 말고 연락주세요. 연락해서 여러분의 의견을 듣고 싶습니다!

위 내용은 실제 예제: 순수 HTML, Angular 및 Next.js를 통해 CSS BEM 이름 지정 마스터하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
CSS 그리드는 무엇입니까?CSS 그리드는 무엇입니까?Apr 30, 2025 pm 03:21 PM

CSS 그리드는 복잡하고 반응이 좋은 웹 레이아웃을 만드는 강력한 도구입니다. 디자인을 단순화하고 접근성을 향상 시키며 이전 방법보다 더 많은 제어를 제공합니다.

CSS Flexbox 란 무엇입니까?CSS Flexbox 란 무엇입니까?Apr 30, 2025 pm 03:20 PM

기사는 반응 형 설계에서 공간의 효율적인 정렬 및 분포를위한 레이아웃 방법 인 CSS Flexbox에 대해 설명합니다. Flexbox 사용을 설명하고 CSS 그리드와 비교하고 브라우저 지원 세부 사항을 설명합니다.

CSS를 사용하여 웹 사이트를 반응하게 만드는 방법은 무엇입니까?CSS를 사용하여 웹 사이트를 반응하게 만드는 방법은 무엇입니까?Apr 30, 2025 pm 03:19 PM

이 기사는 Viewport Meta 태그, 유연한 그리드, 유체 미디어, 미디어 쿼리 및 상대 장치를 포함하여 CSS를 사용하여 반응 형 웹 사이트를 만드는 기술에 대해 설명합니다. 또한 CSS 그리드 및 Flexbox를 함께 사용하여 CSS 프레임 워크를 권장합니다.

CSS 박스 크기 부동산은 무엇을합니까?CSS 박스 크기 부동산은 무엇을합니까?Apr 30, 2025 pm 03:18 PM

이 기사는 요소 치수 계산 방법을 제어하는 ​​CSS 박스 크기 속성에 대해 설명합니다. Content-Box, Border-Box 및 Padding-Box와 같은 값과 레이아웃 설계 및 형태 정렬에 미치는 영향을 설명합니다.

CSS를 사용하여 어떻게 애니메이션 할 수 있습니까?CSS를 사용하여 어떻게 애니메이션 할 수 있습니까?Apr 30, 2025 pm 03:17 PM

기사는 CSS, 주요 특성 및 JavaScript와 결합 된 애니메이션 작성에 대해 논의합니다. 주요 문제는 브라우저 호환성입니다.

CSS를 사용하여 프로젝트에 3D 변환을 추가 할 수 있습니까?CSS를 사용하여 프로젝트에 3D 변환을 추가 할 수 있습니까?Apr 30, 2025 pm 03:16 PM

기사는 3D 변환, 주요 속성, 브라우저 호환성 및 웹 프로젝트에 대한 성능 고려 사항에 대한 CSS 사용에 대해 논의합니다. (문자 수 : 159)

CSS에 기울기를 추가 할 수있는 방법은 무엇입니까?CSS에 기울기를 추가 할 수있는 방법은 무엇입니까?Apr 30, 2025 pm 03:15 PM

이 기사는 CSS 그라디언트 (선형, 방사형, 반복)를 사용하여 웹 사이트 비주얼을 향상시키고 깊이, 초점 및 현대적인 미학을 추가합니다.

CSS의 의사 요소는 무엇입니까?CSS의 의사 요소는 무엇입니까?Apr 30, 2025 pm 03:14 PM

기사는 CSS의 의사 요소, HTML 스타일을 향상시키는 데 사용 및 의사 급의 차이점에 대해 설명합니다. 실제 사례를 제공합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구