> 웹 프론트엔드 > CSS 튜토리얼 > CSS 아키텍처 : BEM (Block-Element-Modifier) ​​및 원자 CSS

CSS 아키텍처 : BEM (Block-Element-Modifier) ​​및 원자 CSS

尊渡假赌尊渡假赌尊渡假赌
풀어 주다: 2025-02-10 10:55:15
원래의
389명이 탐색했습니다.

CSS Architecture: Block-Element-Modifier (BEM) & Atomic CSS 이 기사는 Tiffany의 새 책 "CSS Master, Second Edition"에서 발췌 한 것입니다. 우리는 두 가지 CSS 명명 방법론을 탐구 할 것입니다. 두 방법 모두 대규모 웹 사이트 및 대규모 팀의 개발 프로세스를 개선하기 위해 만들어졌지만 단일 팀에도 동일하게 적용됩니다. 자신에 따라 선택하거나 혼합 할 수 있습니다. 그들을 소개하는 목적은 자신의 CS를 작성하는 방법에 대해 생각하는 데 도움이됩니다.

키 포인트

BEM (Block-Element-Modifier)은 개발자가 웹 사이트를 재사용 가능한 구성 요소 블록 모음으로 생각하도록 장려하는 CSS 방법론입니다. 웹 사이트의 여러 부분, 특히 대규모 개발 팀 간의 관계를보다 쉽게 ​​이해할 수있는 명확한 명명 시스템을 제공합니다. 대조적으로, 원자 CSS는 각 구성 요소에 대한 규칙 세트를 작성하는 대신 세밀하고 재사용 가능한 스타일을 만드는 데 중점을 둡니다. 특정 충돌을 줄이고 빠른 HTML 구성 요소 개발을 허용합니다. 그러나 소규모 팀이나 개별 개발자에게 더 적합합니다. BEM 및 원자 CSS는 BEM의 구조를 원자 CS의 재사용 성과 결합하는 데 함께 사용될 수 있습니다. 이를 통해 CSS 코드 기반을 유지하기가 쉽고 유지하기가 쉽습니다.

비록 이점이 있지만 BEM과 원자 CSS는 개발자가 태그 (예 : CMS 사용)를 완전히 제어하지 않는 상황에서 유용하지 않을 수 있습니다. 이 경우 개발자는 목표를 달성하기 위해 길고 구체적인 선택기를 사용해야 할 수도 있습니다.
  • 블록 요소 모디퍼 (BEM) BEM 또는 블록 요소 모디퍼는 방법론, 이름 지정 시스템 및 관련 도구 세트입니다. Bem은 Yandex에서 태어 났으며 대규모 개발 팀에 의해 빠르게 발전하는 것을 목표로합니다. 이 섹션에서는 개념 및 이름 지정 시스템에 중점을 둘 것입니다. BEM 방법론은 디자이너와 개발자가 웹 사이트를 재사용 가능한 구성 요소 모음으로 생각하여 인터페이스를 생성하기 위해 혼합 및 일치시킬 수있는 재사용 가능한 구성 요소
  • >입니다. 블록은 다음 그림과 같이 제목, 바닥 글 또는 사이드 바와 같은 문서의 일부일뿐입니다. 아마도 혼란스럽게도, 여기서 "블록"은 페이지 나 응용 프로그램을 구성하는 HTML 스 니펫을 나타냅니다.
  • 블록에는 다른 블록이 포함될 수 있습니다. 예를 들어, 제목 블록에는 아래와 같이 로고, 탐색 및 검색 양식 블록이 포함될 수 있습니다. 바닥 글 블록에는 사이트 맵 타일이 포함될 수 있습니다.
  • 요소는 블록보다 더 미세합니다. BEM 문서가 설명하는 것처럼 :

요소는 특정 함수를 수행하는 블록의 일부입니다. 요소는 상황에 따라 달라집니다. 그들은 그들이 속한 블록의 맥락에서만 의미가 있습니다.

예를 들어 검색 양식 블록에는 아래 그림과 같이 텍스트 입력 요소 및 제출 버튼 요소가 포함되어 있습니다. (명확성을 위해, 우리는 HTML 요소의 의미에서 "요소"가 아닌 설계 요소의 의미에서 "요소"를 사용하고 있습니다.)

반면에, 기본 내용 블록에는 기사 목록 블록이있을 수 있습니다. 이 포스트 목록 블록에는 일련의 포스트 프로모션 블록이 포함될 수 있습니다. 각 기사 프로모션 블록에는 아래와 같이 이미지, 발췌문 및 "더보기 읽기"요소가 포함될 수 있습니다.

CSS Architecture: Block-Element-Modifier (BEM) & Atomic CSS

블록과 요소는 함께 BEM 명명 규칙의 기초를 형성합니다. BEM 규칙에 따르면 :

블록 이름은 프로젝트에서 독특해야합니다 요소 이름은 블록에서 독특해야합니다 예를 들어 블록의 변형 (예를 들어 어두운 배경이있는 검색 상자)은 클래스 이름 에 수정자를 추가해야합니다. CSS Architecture: Block-Element-Modifier (BEM) & Atomic CSS 블록 이름과 요소 이름은 일반적으로 이중 밑줄 (.Block__ Element)로 구분됩니다. 블록 및 요소 이름은 일반적으로 수정 자 이름 (예 : .Block-Modifier 또는 .Block__ Element-Modifier)을 가진 이중 하이픈으로 분리됩니다. 다음은 검색 양식 예제를 사용하는 것과 같은 BEM입니다. 어두운 배경을 가진이 양식의 변형은 다음 태그를 사용할 수 있습니다.

우리의 CSS는 다음과 같이 보일 수 있습니다

우리의 태그와 CSS에서 검색 (inverse and search__label)은 에 첨부 된 클래스 이름입니다. 검색 및 search__label의 대안이 아닙니다. 클래스 이름은 BEM 시스템에서 사용되는 유일한 선택기 유형입니다. 하위 선택자와 후손이 사용될 수 있지만 자손도 계급 이름이어야합니다. 요소 및 ID 선택기는 금지됩니다. 블록과 요소 이름의 독창성을 시행하면 이름 지정 충돌이 막히지 않아 팀의 문제가 될 수 있습니다. 이 방법에는 몇 가지 장점이 있습니다
    새로운 팀원은 마크와 CSS를 쉽게 읽고 그들의 행동을 이해할 수 있습니다
  • 더 많은 개발자를 추가하면 팀 생산성을 향상시킬 수 있습니다 일관된 이름 지정은 클래스 이름 충돌 및 부작용의 가능성을 줄입니다. CSS는 Markup 와 무관합니다 CSS는 재사용 가능 입니다
  • BEM의 내용은이 장에서 하나 이상의 섹션입니다. BEM 웹 사이트는이 접근법을보다 자세하게 설명하고 시작할 수있는 도구와 튜토리얼도 제공합니다. BEM 이름 지정 규칙에 대한 자세한 내용은 또 다른 우수한 자원이 Get Bem입니다.
  • 원자 CSS BEM이 업계의 사랑이라면 원자 CSS는 반란군입니다. Yahoo의 Thierry Kobleentz는 2013 년 기사 "도전적인 CSS 모범 사례"에서 Atomic CSS를 지명하고 설명했습니다. 이 클래스 이름은 일반적으로 약칭되며 영향을 미치는 것과 접촉하지 않습니다. 원자 CSS 시스템에서는 클래스 이름이 무엇을하는지 알 수 있지만 클래스 이름 (적어도 스타일 시트에 사용 된 클래스 이름)과 컨텐츠 유형 사이에는 관계가 없습니다. 예제를 사용하여 설명합시다. 다음은 전통적인 CSS 아키텍처라고 부르는 일련의 규칙입니다. 이 규칙 세트는 응용 프로그램의 내용, 글로벌 메시지 상자, 성공, 경고 및 오류 메시지 상자의 스타일을 설명하는 클래스 이름을 사용합니다.

    오류 메시지 상자를 만들려면 요소의 클래스 속성에 MSG 및 MSG 오류 클래스 이름을 모두 추가해야합니다.

    각 선언이 자체 클래스가되는 원자 시스템과 비교해 봅시다.

    이것은 더 많은 CSS입니다. 이제 오류 메시지 구성 요소를 재현합시다. 원자 CSS를 사용하면 태그가 다음과 같습니다

    우리의 자국도 더 길다. 그러나 경고 메시지 구성 요소를 만들 때 어떻게됩니까?
    <div class="search">
      <label for="s" class="search__label">Search for: </label>
      <input type="text" id="s" class="search__input">
      <button class="search__submit">Search</button>
    </div>
    로그인 후 복사

    두 클래스 이름이 변경되었습니다. BG-D와 BC-D는 BG-C 및 BC-C로 대체됩니다. 우리는 5 개의 규칙 세트를 재사용했습니다. 이제 버튼을 만들어 봅시다 :

    <div class="search search--inverse">
      <label for="s" class="search__label search__label--inverse">Search for: </label>
      <input type="text" id="s" class="search__input">
      <button class="search__submit search__submit--inverse">Search</button>
    </div>
    로그인 후 복사

    이봐! 여기서 우리는 4 가지 규칙 세트를 재사용하고 스타일 시트에 더 많은 규칙을 추가하지 않습니다. 강력한 원자 CSS 아키텍처에서 새로운 HTML 구성 요소 (예 : Post Sidebar)를 추가하면 더 많은 CSS를 추가 할 필요가 없습니다 (실제로는 더 추가해야 할 수도 있음). 원자 CSS는 CSS에서 유틸리티 클래스를 사용하는 것과 비슷하지만 한계에 도달합니다. 구체적으로, IT :

    .search {
        color: #333;
    }
    .search--inverse {
        color: #fff;
        background: #333;
    }
    .search__submit {
        background: #333;
        border: 0;
        color: #fff;
        height: 2rem;
        display: inline-block;
    }
    .search__submit--inverse {
        color: #333;
        background: #ccc;
    }
    로그인 후 복사
    각 구성 요소에 대한 규칙 세트를 작성하는 대신 매우 세밀하고 재사용 가능한 스타일을 만들어 CSS를 간결하게 유지하십시오. 낮은 특정 선택기 시스템을 사용하여 특정 충돌을 심각하게 줄입니다. 초기 규칙 세트가 정의되면 빠른 HTML 구성 요소 개발을 수행 할 수 있습니다.

    그러나 원자 CSS는 논쟁의 여지가 없습니다.

    원자 CSS 에 대한 인수 원자 CSS는 CSS 작성에 대해 우리가 배우는 거의 모든 것과 상반됩니다. 그것은 모든 곳의 붙여 넣기 스타일 속성만큼 나쁘게 느껴집니다. 실제로, 원자 CSS 방법론의 주요 비판 중 하나는 그것이 내용과 프리젠 테이션 사이의 경계를 흐리게한다는 것입니다. 왼쪽에 요소를 떠 다니고 10 픽셀 마진을 추가하면 더 이상 요소가 왼쪽으로 떠 다니기를 원하지 않으면 어떻게해야합니까? 물론 한 가지 대답은 요소에서 FL 클래스를 제거하는 것입니다. 그러나 지금 우리는 HTML을 바꾸고 있습니다. CSS를 사용하는 모든 이유는 데모의 영향을받지 않도록하고 그 반대도 마찬가지입니다. (우리는 또한 스타일 시트에서 .fl {float : left;} 규칙을 제거하여 이것을 해결할 수 있지만, 이것은 클래스 이름 FL의 모든 요소에 영향을 미치지 만, HTML을 업데이트하는 것은 작은 가격이 지불 한 단순성을 위해 일할 수 있습니다. CSS. Kobleentz의 원래 기사에서 그는 .m-10 (마진 : 10px) 및 .p-10 (패딩 : 10px)과 같은 클래스 이름을 사용했습니다. 이 이름 지정 협약의 문제는 분명해야합니다. 5 픽셀 또는 20 픽셀 마진으로 변경한다는 것은 CSS 및 에서 내용 를 설명하는 클래스 이름을 사용하는 것을 방해하지 않습니다. 코드에 .Button-close 또는 .accordion-trigger를 추가 할 수 있습니다. JavaScript 및 DOM 작업의 경우 이러한 클래스 이름이 실제로 바람직합니다. BEM 및 원자 CSS BEM은 CSS 및 HTML 모듈을 동시에 구축하는 많은 개발자가있을 때 가장 잘 작동합니다. 대규모 팀이 생성하는 버그와 버그를 방지하는 데 도움이됩니다. 이름 지정 규칙이 설명적이고 예측 가능하기 때문에 부분적으로는 잘 조정됩니다. BEM은 대규모 팀에 적합 할뿐만 아니라 대규모 팀에게 적합합니다. 원자 CSS는 CSS 규칙 세트를 개발하는 소규모 팀 또는 엔지니어가있을 때 더 잘 작동하며 대규모 팀은 완전한 HTML 구성 요소를 구축합니다. 원자 CSS를 사용하면 개발자가 단순히 스타일 안내서 (또는 CSS 소스 코드)를보고 특정 모듈에 필요한 클래스 이름 세트를 결정할 수 있습니다. 자신의 길을 언제 갈지 배우십시오 실제로 CSS에는 여러 방법의 혼합이 포함될 수 있습니다. 레이아웃에 영향을 미치는 유틸리티 클래스 이름 외에도 내용이나 구성 요소를 설명하는 클래스 이름이있을 수도 있습니다. 태그를 완전히 제어 할 수없는 경우 (예 : CMS 사용) 이러한 방법 중 어느 것도 유용하지 않을 수 있습니다. 원하는 것을 달성하기 위해 길고 구체적인 선택기를 사용해야 할 수도 있습니다.

    CSS 아키텍처에 대한 FAQ : BEM 및 원자 CSS
    BEM과 원자 CSS의 주요 차이점은 무엇입니까?

    BEM (블록, 요소, 수정 자) 및 원자 CSS는 CSS 코드를 구성하고 구축하는 방법론입니다. BEM은 CSS를 쉽게 읽고 이해할 수 있도록 명명 컨벤션에 중점을 둡니다. 설계를 블록, 요소 및 수정 자로 나누어 CSS와 HTML 사이에 명확하고 엄격한 관계를 만듭니다. 반면에 원자 CSS는 시각적 기능을 반영하는 소규모 단일 목적 CSS 클래스를 작성하는 것입니다. 재사용 성을 장려하고 코드 금액을 줄이는 것을 목표로합니다.

    BEM은 CSS의 확장 성을 어떻게 개선합니까?

    BEM은 CSS와 HTML 사이에 명확하고 엄격한 관계를 제공함으로써 CSS의 확장 성을 향상시킵니다. 특정 명명 규칙을 사용하여 다른 요소 간의 관계를보다 쉽게 ​​이해할 수 있습니다. 따라서 코드를 더 쉽게 유지하고 확장 할 수 있습니다. 새로운 기능을 추가하거나 기존 기능을 수정할 수 없기 때문에 아무것도 깨지지 않기 때문입니다.

    동시에 BEM 및 Atomic CSS를 사용할 수 있습니까?

    예, BEM 및 원자 CSS는 동시에 사용할 수 있습니다. 일부 개발자들은이 두 가지 접근법을 결합하면 두 세계의 최선을 달성 할 수 있음을 발견했습니다. BEM의 엄격한 명명 규칙은 CSS를 구축하는 데 사용될 수 있으며, 단일 목적 클래스의 원자 CSS는 단일 요소를 스타일링하는 데 사용될 수 있습니다. 이 조합은 고도로 정리되고 관리하기 쉬운 CSS 코드 기반을 생성 할 수 있습니다.

    원자 CSS를 사용하면 어떤 이점이 있습니까?

    원자 CSS는 많은 이점을 제공합니다. 재사용 성을 장려하여 작성해야 할 CS의 양을 크게 줄일 수 있습니다. 또한 동일한 클래스가 다른 구성 요소에 사용되므로 설계 일관성을 향상시킵니다. 또한, 원자 CSS는 각 클래스가 잘 정의 된 단일 목적을 가지므로 스타일 시트를보다 쉽게 ​​관리하고 이해할 수있게 해줍니다.

    BEM은 CSS 특이성 문제를 어떻게 처리합니까?

    BEM은 개발자가 ID 선택기 대신 클래스 선택기를 사용하도록 장려함으로써 CSS 특이성 문제를 처리하는 데 도움이됩니다. 이로 인해 프로젝트 전체에 걸쳐 특이성이 일관성이있어 필요한 경우 스타일을 쉽게 다룰 수 있습니다. 또한 BEM의 명명 규칙은 어떤 요소가 관련되는지 명확하게 나타내어 예상치 못한 스타일 충돌의 가능성을 줄입니다.

    원자 CSS는 대규모 프로젝트에 적합합니까?

    예, 원자 CSS는 대규모 프로젝트에 적합합니다. 재사용 성과 단일 목적 수업에 중점을두면 프로젝트가 계속 증가하더라도 CSS를 관리 할 수 ​​있습니다. 그러나 수업이 일관되고 의미가 있도록 엄격한 접근이 필요합니다.

    BEM은 팀워크에 어떻게 도움이됩니까?

    BEM의 명확하고 엄격한 명명 컨벤션을 통해 팀 구성원이 프로젝트에 참여할 때마다 CSS 코드를 더 쉽게 이해할 수 있습니다. 개발자는 다른 사람들이 작성한 코드를 쉽게 이해하고 수정할 수 있기 때문에 협업이 향상됩니다.

    원자 CSS 사용의 잠재적 단점은 무엇입니까?

    원자 CSS의 잠재적 인 단점은 HTML에서 많은 클래스로 이어질 수 있다는 것입니다. 이로 인해 HTML을 읽고 이해하기가 더 어려워 질 수 있습니다. 또한 원자 CSS는 클래스가 일관되고 의미가 있는지 확인하기 위해 엄격한 접근법이 필요합니다.

    내 프로젝트에서 BEM 구현을 시작하는 방법은 무엇입니까?

    BEM 구현을 시작하려면 설계를 블록, 요소 및 수정 자로 나누어야합니다. 그런 다음 BEM의 이름 지정 컨벤션을 사용하여 CSS 클래스의 이름을 지정하십시오. 이로 인해 CSS와 HTML 간의 명확한 관계가 생겨 코드가 더 쉽게 읽고 유지 관리 할 수 ​​있습니다.

    SASS 이외의 CSS 전 처리기와 함께 BEM 또는 Atomic CSS를 사용할 수 있습니까?

    예, BEM 및 원자 CSS는 SASS 이하의 CSS 전 처리기와 함께 사용할 수 있습니다. 이 사전 처리기는 CSS 관리를보다 쉽게 ​​만들 수 있으며 BEM 및 원자 CSS의 조직 원칙과 잘 어울립니다.

위 내용은 CSS 아키텍처 : BEM (Block-Element-Modifier) ​​및 원자 CSS의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿