Vue 구성 요소와 일치하는 CSS의 명명 규칙 고려
SFC용 CSS이므로 SFCSS라고 합니다.
scoped도 명명 규칙이 필요해요.
우선 전제로
<style scoped>
에서 구성 요소의 스타일이 드러나지 않아도 명명 규칙이 필요하다.scoped
그렇긴 하지만 적당히 적힌 학급명의 계산서는 반드시 나중에 지불하겠죠.공식 스타일 안내서에 기재된 바와 같이 제3자의 CSS가 적용되지 않도록 구성 요소의 고유한 접두사 등을 추가해야 한다.
그러나 SFC의 개발은 일반적인 웹 사이트와 성격이 다르기 때문에 접두사가 반드시 정확한 것은 아니다.
ECSS 이름의 예
※ ECSS의 생각 등은 생략합니다.ECSS에 대한 요약은 참고할 수 있습니다.[ ECSS 개요 및 아이디어 요약 ]
하나의 예이지만 ECSS는 다음과 같은 모델로 명명되었다.
.namespace-Component_ChildNode-variant {}
namespace
어셈블리가 속한 위치 등을 접두어로 추가합니다.-variant
는 BEM에서 말하는 Modifier입니다.Component
블록이요ChildNode
엘레멘트죠.이 명명 규칙은 SFC에 따라 다음과 같습니다.
SFCSS
SFCSS의 이름은 다음과 같습니다.
.ComponentName {}
.ComponentName_ChildNode {}
._variant {}
이 세 가지 모드만 사용합니다.ComponentName
ComponentName
vue 구성 요소name
와 같은 이름을 사용합니다.<template>
<div class="MyComponent"></div>
</template>
<script>
export default {
name: 'MyComponent',
}
</script>
<style lang="scss" scoped>
.MyComponent {}
</style>
루트 이름을 vue 구성 요소 name
와 일치시키면 DOM 노드에서 구성 요소를 쉽게 식별할 수 있습니다.만약 vue-devols를 사용한다면 이런 생각은 필요하지 않지만, 제작 환경과 vue-devols가 없는 브라우저에서 검증하는 것이 유용할 것이다.
ChildNode
ChildNode
는 구성 요소의 뿌리 요소 이외에 클래스를 부여하고 싶은 요소이다.예를 들어 다음과 같은 입도로 설정
ChildNode
.<template>
<div class="MyComponent">
<h1 class="MyComponent_Heading">
heading
</h1>
<ul class="MyComponent_List">
<li class="MyComponent_ListItem"
v-for="item in list"
>
{{item.label}}
</li>
</ul>
</div>
</template>
원칙적으로 다음과 같은 ChildNode
연속적인 유명은 허용하지 않는다..MyComponent_List_Item {} /* bad */
variant
variant
는 조건 등에 따라 스타일을 바꾸려는 요소에 사용되는 카테고리다.ECSS는 클래스 이름ComponentName_ChildNode
에 있는 선택기가 모두 포함된 형식이지만 이용할 수 있기 때문scoped
이므로 단일 클래스로 정의한다.ComponentName
와 ChildNode
는 파스카의 경우variant
는 낙타 껍질로 기술하고 유명의 시작은 _
로 시작한다.._variantClassName {}
variant
는 :class
에서 제외하는 데 많이 사용되기 때문에 과도하지 않은 문자열로 구성하는 것이 좋다.namespace 필요 없음
나는 vue 구성 요소
namespace
에서 필요하지 않다고 생각한다.ECSSnamespace
는 어셈블리가 속한 영역 등을 나타내지만 vue 어셈블리가 사용하는 위치를 제한할 필요는 없습니다.vue 구성 요소에 유일한 이름을 붙여야 하기 때문에 접두사의 이름 충돌을 피할 필요가 없습니다.
루트 클래스를 하나로 제한
.vue
의<style>
중 뿌리류ComponentName
는 1개로 제한된다.스타일은 구성 요소와 1 대 1 스타일만 설명해야 합니다.여러 개의 루트를 쓰려면 다른 구성 요소로 구분된 신호일 수도 있습니다.
lang="scss"로 & 기술한 생략
예를 들어 앞의
ChildNode
에서 예시한 template
에서 다음과 같이 기술한다style
.<template>
<div class="MyComponent">
<h1 class="MyComponent_Heading">heading</h1>
<ul class="MyComponent_List">
<li class="MyComponent_ListItem"
v-for="item in list"
:class="{_selectedItem: isSelectedItem(item)}"
>
{{item.label}}
</li>
</ul>
</div>
</template>
<style lang="scss" scoped>
.MyComponent {
&_Heading {}
&_List {}
&_ListItem {}
._selectedItem {}
}
</style>
template
에서 유명의 기술량은 줄어들지 않지만 모두 전력으로 쓰는 경우style
보다 전체적인 전망이 더 좋을 것으로 보인다.이것&_
은 어셈블리를 분할할 때 생략해도 유용합니다.끝말
실제 사건에서 이 SFCSS를 시도해 구성 요소의 클래스에 대한 고민을 줄였다.그러나 적당한 명칭이 아니라 균형 잡힌 상태에서 개발됐다.
Reference
이 문제에 관하여(Vue 구성 요소와 일치하는 CSS의 명명 규칙 고려), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nakajmg/items/683395c20a3afbdb2d99텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)