logo

JEONGGON

    블로그
github
mode
목 차
down-arrow

CSS Semantic

2023.02.22.

post-thumbnail

Semantic

1. Semantic Web

  • 웹 데이터를 의미론적으로 표현하고 연결하는 개념
  • 컴퓨터가 데이터의 내용과 문맥을 더 효율적으로 이해하고 지능적으로 활용하도록 함
  • 보여지는 것을 넘어 요소가 가진 목적역할에 집중함


2. Semantics in CSS

2-1. OOCSS

  • Object-Oriented CSS(객체 지향 CSS)의 약자

- OOCSS 예시


<div class="card">
  <h2 class="card-title">Card Title</h2>
  <p class="card-description">This is a card description.</p>
  <button class="btn bg-blue">Learn More</button>
  <button class="btn bg-red">Learn More</button>
</div>
/*기본 Card 구조*/
.card {
    border: 1px solid #ccc;
    border-radius: 4px;
    padding: 16px;
    width: 50%;
}

/*Card 제목*/
.card-title {
    font-size: 20px;
    font-weight: bold;
    margin-bottom: 8px;
}

/*Card 설명*/
.card-description {
    font-size: 16px;
    margin-bottom: 16px;
}

/*기본 버튼 구조*/
.btn {
    display: inline-block;
    border-radius: 4px;
    padding: 8px 16px;
    font-size: 1rem;
    font-weight: 400;
    color: #212529;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}

/*파란 배경*/
.bg-blue {
    background-color: #007bff;
    color: #fff;
}

/*빨간 배경*/
.bg-red {
    background-color: #cb2323;
    color: #fff;
}

OOCSS 예시
OOCSS 예시 결과


2-2. BEM

  • Block Element Modifier의 약자로 블록, 요소, 수정자를 사용해 클래스 이름을 구조화하는 방법론

- BEM 구성

  1. Block
  • 문단 전체에 적용된 요소 또는 요소를 담고 있는 컨테이너
  • 재사용 가능한 독립적 블록, 가장 바깥쪽 상위 요소
  • 재사용을 위해 margin, padding을 적용하지 않음
.block {
}
  1. Element
  • block이 포함하고 있는 한 조각
  • block을 구성하는 종속적인 하위 요소
.block__element {
}
  1. Modifier
  • block 또는 element의 속성
.block__modifier {
}

- BEM 예시


<div class="card">
  <h2 class="card__title">제목</h2>
  <ul class="card__list">
    <li class="card__list-item--none">항목1</li>
    <li class="card__list-item--none">항목2</li>
  </ul>
  <button class="card__button card__button--red">버튼</button>
</div>
/*Block*/
.card {
    display: flex;
    flex-direction: column;
}

/*Element*/
.card__title {
    font-size: 2rem;
}

.card__list {
    margin: 0;
}

.card__button {
    font-size: 1rem;
    padding: 1rem;
    cursor: pointer;
}

/*Modifier*/
.card__list-item--none {
    list-style: none;
}

.card__button--red {
    background-color: crimson;
}

BEM 예시
BEM 예시 결과



3. 참고

3-1. 클래스 이름이 너무 길어지는 건 아닐까?

  • 클래스를 생성할 때, 가장 중요한 건 클래스의 이름이 무엇을 나타내는지 명확하게 전달할 수 있는가에 대한 것임
  • 각각의 명명법은 개인적인 취향에 따라 다르지만, 빠르고 명확한 표기를 우선적으로 해야 함
  • 너무 깊게 고민하지 않도록 하는 것도 중요

3-2. CSS Semantic의 목적

  • 재사용 가능한 모듈로 분리함으로써, 유지보수성확장성을 향상시킴
  • 개발자 간의 협력이 향상되어 공통 언어와 코드 이해를 확립함
  • 방법론을 조합하여 혼용하는 사례도 있음
    • ex) Airbnb…
cssstylesemantic
profile

조정곤

주니어 프론트엔드 개발자

github
linkedin
instagram
email

< 이전글

JavaScript 역사

다음글 >

CSS Flex

Css 포스트 (6)

down-arrow
CSS 소개CSS Box modelCSS 포지션CSS FloatCSS FlexCSS Semantic