CSS 폭발 관리


682

나는 작업중 인 웹 사이트를 CSS에 크게 의존했습니다. 현재 모든 CSS 스타일이 태그별로 적용되고 있으므로 앞으로 변경 사항을 돕기 위해 더 많은 외부 스타일로 이동하려고합니다.

그러나 이제 문제는 "CSS 폭발"을 받고 있다는 것을 알게되었습니다. CSS 파일 내에서 데이터를 가장 잘 구성하고 추상화하는 방법을 결정하기가 어려워지고 있습니다.

div웹 사이트 내에서 많은 테이블 태그를 사용하고 있으며 테이블 기반 웹 사이트에서 많이 이동했습니다. 그래서 다음과 같은 CSS 선택기가 많이 있습니다.

div.title {
  background-color: blue;
  color: white;
  text-align: center;
}

div.footer {
  /* Styles Here */
}

div.body {
  /* Styles Here */
}

/* And many more */

아직 나쁘지는 않지만 초보자로서 CSS 파일의 다양한 부분을 구성하는 가장 좋은 방법에 대한 권장 사항이 있는지 궁금합니다. 내 웹 사이트의 모든 요소에 대해 별도의 CSS 속성을 원치 않으며 항상 CSS 파일이 상당히 직관적이고 읽기 쉽기를 원합니다.

나의 궁극적 인 목표는 CSS 파일을 쉽게 사용하고 웹 개발 속도를 높이는 힘을 보여주는 것입니다. 이런 식으로 미래에이 사이트에서 일할 수있는 다른 개인들도 내가 한 방식대로 선택하지 않고 좋은 코딩 방법을 사용하게 될 것입니다.


122
이것은 좋은 질문이지만 많은 기업에게는 정말 해결할 수없는 문제입니다. 주로 CSS는 조건을 인식하지 않을 수 있습니다 그래픽 디자이너에 의해 작성 및 관리되고 있기 때문에 simplicity, complexity, maintenance, structurerefactoring.
cherouvim

8
@cherouvim-이 질문을하는 나의 모든 이유가 그래픽 아티스트가 디자인 한 무서운 CSS를 보는 것부터 시작했기 때문에 재미 있어요. 아마도 우리는 그들에게 더 나은 훈련이 필요할까요?
JasCav

13
나의 이상적인 해결책은 팀에 헌신적 인 사람들이 PSD를 html + css로 자르고 나중에 유지하는 것입니다. 이 사람들은 프로그래머와 디자이너와 가까워 야합니다.
cherouvim

@cherouvim 동의해야합니다. 특히 CSS가 더욱 복잡 해짐에 따라 대행사와 거의 같은 방식입니다.
John Parker

27
@JasCav, 그래픽 아티스트는 CSS를 건드리지 않아야합니다. 웹 디자이너 및 프론트 엔드 웹 개발자 는 CSS를 다루어야합니다. 그래픽 디자이너의 임무는 그래픽을 만드는 것입니다.
zzzzBov

답변:


566

이것은 매우 좋은 질문입니다. 어디에서나 CSS 파일은 특히 팀에서 일할 때뿐만 아니라 잠시 후 제어 할 수없는 경향이 있습니다.

다음은 내가 준수하려고하는 규칙입니다 (항상 관리하지는 않습니다).

  • 일찍 리팩터링하고 자주 리팩터링하십시오. CSS 파일을 자주 정리하고 동일한 클래스의 여러 정의를 통합하십시오. 더 이상 사용되지 않는 정의를 즉시 제거하십시오 .

  • 버그를 수정하는 동안 CSS를 추가 할 때 변경 내용에 대한 설명을 남겨주십시오 ( "이는 상자가 IE <7"에 정렬되어 있는지 확인하는 것입니다).

  • 중복을 피하십시오 (예 : .classname및 에서 동일한 것을 정의) .classname:hover.

  • 주석 /** Head **/을 사용하여 명확한 구조를 만드십시오.

  • 일정한 스타일을 유지하는 데 도움이되는 프리티 파이어 도구를 사용하십시오. 나는 꽤 행복합니다 ($ 15 비용이지만 돈을 잘 소비합니다) Polystyle을 사용 합니다. 무료로 사용할 수도 있습니다 (예 : 오픈 소스 도구 인 CSS Tidy 기반의 Code Beautifier ).

  • 합리적인 수업을 만드십시오. 이에 대한 몇 가지 참고 사항은 아래를 참조하십시오.

  • 의미론을 사용하고 DIV 수프를 피하십시오- <ul>예를 들어 메뉴에 s를 사용하십시오 .

  • 가능한 한 낮은 수준 (예 : 기본 글꼴 모음, 색상 및 크기 body) 으로 모든 것을 정의하고 가능한 경우 사용 inherit하십시오.

  • CSS가 매우 복잡한 경우 CSS 사전 컴파일러가 도움이 될 수 있습니다. 곧 같은 이유로 xCSS 를 조사 할 계획 입니다. 주위에 다른 몇 가지가 있습니다.

  • 팀에서 작업하는 경우 CSS 파일에 대한 품질 및 표준의 필요성도 강조하십시오. 모든 사람들은 프로그래밍 언어로 코딩 표준에 큰 관심을 가지고 있지만 CSS에도 이것이 필요하다는 인식이 거의 없습니다.

  • 팀에서 작업하는 경우 않는 버전 제어를 사용하는 것이 좋습니다. 추적하기가 훨씬 쉬워지고 수정하기가 훨씬 쉬운 충돌이 수정됩니다. HTML과 CSS에 "맞아"있어도 가치가 있습니다.

  • 로 작업하지 마십시오 !important. IE = <7 때문에 처리 할 수 ​​없습니다. 복잡한 구조에서 !important소스를 찾을 수없는 동작을 변경하려는 유혹이 종종 있지만 장기적인 유지 관리에는 독이 됩니다.

현명한 수업 만들기

이것이 현명한 수업을 만드는 방법입니다.

전역 설정을 먼저 적용합니다.

body { font-family: .... font-size ... color ... }
a { text-decoration: none; }

그런 다음 페이지 레이아웃의 주요 섹션 (예 : 상단 영역, 메뉴, 내용 및 바닥 글)을 식별합니다. 좋은 마크 업을 작성하면이 영역은 HTML 구조와 동일합니다.

그런 다음 가능한 한 많은 조상을 지정하고 가능한 한 밀접하게 관련 클래스를 그룹화하여 CSS 클래스를 작성하기 시작합니다.

div.content ul.table_of_contents 
div.content ul.table_of_contents li 
div.content ul.table_of_contents li h1
div.content ul.table_of_contents li h2
div.content ul.table_of_contents li span.pagenumber

전체 CSS 구조를 루트에서 멀어 질수록 점점 더 구체적인 정의가 있는 트리 로 생각하십시오 . 수업의 수를 가능한 적게 유지하고 가능한 한 드물게 반복하고 싶습니다.

예를 들어, 세 가지 수준의 탐색 메뉴가 있다고 가정 해 봅시다. 이 세 가지 메뉴는 다르게 보이지만 특정 특성을 공유합니다. 예를 들어, 그것들은 모두 <ul>이고, 모두 같은 폰트 크기를 가지고 있으며, 아이템은 모두 서로 옆에 있습니다 (의 기본 렌더링과 반대 ul). 또한 어떤 메뉴에도 글 머리 기호 ( list-style-type) 가 없습니다 .

먼저 다음과 같은 클래스에서 공통 특성을 정의하십시오 menu.

div.navi ul.menu { display: ...; list-style-type: none; list-style-image: none; }
div.navi ul.menu li { float: left }

그런 다음 세 가지 메뉴 각각의 특정 특성을 정의하십시오. 레벨 1의 높이는 40 픽셀입니다. 레벨 2 및 3, 20 픽셀.

참고 : 이 클래스에 여러 클래스를 사용할 수도 있지만 Internet Explorer 6 에는 여러 클래스에 문제가 있으므로이 예제에서는 ids 를 사용 합니다.

div.navi ul.menu#level1 { height: 40px; }
div.navi ul.menu#level2 { height: 20px; }
div.navi ul.menu#level3 { height: 16px; }

메뉴의 마크 업은 다음과 같습니다.

<ul id="level1" class="menu"><li> ...... </li></ul>
<ul id="level2" class="menu"><li> ...... </li></ul>
<ul id="level3" class="menu"><li> ...... </li></ul>

이 세 가지 메뉴와 같이 페이지에서 의미 적으로 유사한 요소가있는 경우 공통점을 먼저 해결하여 클래스에 배치하십시오. 그런 다음 특정 속성을 계산하여 클래스에 적용하거나 Internet Explorer 6을 지원해야하는 경우 ID를 적용하십시오.

기타 HTML 팁

이러한 의미를 HTML 출력에 추가하면 디자이너는 나중에 순수 CSS를 사용하여 웹 사이트 및 / 또는 앱의 모양을 사용자 지정할 수 있습니다. 이는 큰 이점이자 시간 절약입니다.

  • 가능하면 모든 페이지 본문에 고유 한 클래스를 지정하십시오. <body class='contactpage'>이렇게하면 스타일 시트에 페이지 별 조정을 매우 쉽게 추가 할 수 있습니다.

    body.contactpage div.container ul.mainmenu li { color: green }
  • 메뉴를 자동으로 만들 때는 나중에 CSS 스타일을 최대한 많이 할 수 있도록 CSS 컨텍스트를 최대한 추가하십시오. 예를 들면 다음과 같습니다.

    <ul class="mainmenu">
     <li class="item_first item_active item_1"> First item </li> 
     <li class="item_2"> Second item </li> 
     <li class="item_3"> Third item </li> 
     <li class="item_last item_4"> Fourth item </li> 
    </ul>

    이런 식으로, 모든 메뉴 항목은 그 의미 론적 맥락에 따라 스타일링을 위해 액세스 할 수 있습니다 : 목록에서 첫 번째 항목인지 마지막 항목인지; 현재 활성화 된 항목인지 여부 그리고 숫자로.

참고 예제에 설명 된대로 여러 클래스의 할당이 위의 것을 IE6에서 제대로 작동하지 않습니다 . IE6에서 여러 클래스를 처리 할 수 있는 해결 방법 이 있습니다. 해결 방법이 옵션이 아닌 경우 가장 중요한 클래스 (항목 번호, 활성 또는 첫 번째 / 마지막)를 설정하거나 ID 사용에 의존해야합니다.


3
@Andrew는 주로 ID를 사용하는 동적 환경 (CMS와 같은)에서 충돌로 이어질 수 있기 때문에 (예를 들어, 사용자가 페이지 이름을 "연락처"로 변경하여 해당 이름이 본문의 ID로 사용되어 연락처 양식과 충돌 할 수 있기 때문에) "연락처"라고도 함). 일반적으로 ID를 최대한 적게 사용하는 것이 좋습니다.
Pekka

4
@Pekka 당신은 www.oocss.org를 확인해야합니다 여기에 언급 한 것과는 대조적이지만 CSS 부풀림을 관리하는 가장 좋은 방법입니다. 아래 답변도 참조하십시오 : stackoverflow.com/questions/2253110/how-to-manage-css-explosion/…
Moin Zaman

2
@ 감사합니다! 나는 때때로이 지침들이 제 자신을 따르기가 매우 어렵다는 것을 알지만 아주 좋아합니다 . CSS 스타일 시트는 시간이 지남에 따라 쉽게 조일 수 있습니다. 여기에서 색 변경, font-weight: bold저기 .... 징계가 유일한 약입니다 :)
Pekka

1
CSS 폭발 연구를 처음 접하는 사람이라고하면 "고유 수업"이라는 문구가 혼동됩니다. 나는 id그것이 아니라는 느낌을 얻고 있지만 확실히 하나처럼 들립니다. 어쩌면 개념을 명확히 할 수 있습니까?
ari gold

2
@ari는 기술적으로 id도 마찬가지 일 수 있습니다.
Pekka

89

다음은 4 가지 예입니다.

내 답변에는 Natalie Downe의 PDF CSS Systems 를 다운로드하고 읽는 조언이 포함되어 있습니다. (PDF에는 슬라이드에없는 수많은 메모가 포함되어 있으므로 PDF를 읽으십시오!). 조직에 대한 그녀의 제안을 적어 둡니다.

4 년 후 EDIT (2014/02/05) 는 다음과 같습니다.

  • CSS 전처리 기를 사용하고 파일을 부분적으로 관리하십시오 (개인적으로 Sass with Compass를 선호하지만 Less도 꽤 좋고 다른 것들도 있습니다)
  • OOCSS , SMACSSBEM 또는 getbem 과 같은 개념을 읽으십시오 .
  • BootstrapZurb Foundation 과 같은 인기있는 CSS 프레임 워크가 어떻게 구성되어 있는지 살펴보십시오 . 덜 인기있는 프레임 워크를 할인하지 마십시오- 이누이트 는 흥미로운 것이지만 다른 많은 것들이 있습니다.
  • 지속적인 통합 서버 및 / 또는 Grunt 또는 Gulp와 같은 작업 실행기에서 빌드 단계로 파일을 결합 / 최소화하십시오.

CSS 프리 프로세서는 솔루션이 아니라 문제의 원인입니다. 계단식 개념을 완전히 익히면 부풀림이 줄어 듭니다.
Daniel Sokolowski

@DanielSokolowski @ 부적절하게 사용 된 도구는 해결책이 아니라 문제가 될 수 있습니다. 그러나 캐스케이드를 마스터한다는 점에 100 % 동의합니다.
Andy Ford

73

CSS에 제목을 쓰지 마십시오

섹션을 파일로 나누기 만하면됩니다. 모든 CSS 주석은 주석이어야합니다.

reset.css
base.css
somepage.css
someotherpage.css
some_abstract_component.css

스크립트를 사용하여 하나를 결합하십시오. 필요하다면. 멋진 디렉토리 구조를 가질 수도 있고 스크립트가 재귀 적으로 .css파일을 스캔하도록 할 수도 있습니다.

표제를 작성해야하는 경우 파일 시작 부분에 TOC를 두십시오.

목차의 제목은 나중에 쓰는 제목과 완전히 같아야합니다. 제목을 찾는 것은 고통입니다. 문제를 더하기 위해 첫 번째 헤더 다음에 다른 헤더가 있다는 것을 어떻게 알고 있습니까? 추신. TOC를 작성할 때 각 줄의 시작 부분에 문서와 같은 * (별표)를 추가하지 마십시오. 텍스트를 선택하는 것이 더 성가 시게합니다.

/* Table of Contents
   - - - - - - - - -
   Header stuff
   Body Stuff
   Some other junk
   - - - - - - - - -
 */
...
/* Header Stuff 
 */
...
/* Body Stuff 
 */

블록 외부가 아닌 규칙 내에서 또는 규칙 내에서 의견 쓰기

먼저, 스크립트를 편집 할 때 룰 블록 외부에있는 내용에주의를 기울여야합니다 (특히 텍스트가 큰 경우;)). 둘째, 외부에 "댓글"이 필요한 경우는 거의 없습니다. 외부에있는 경우 제목 시간의 99 %이므로 제목을 그대로 유지하십시오.

페이지를 컴포넌트로 분할

구성 요소에는 대부분 position:relative, no padding및 no 가 있어야합니다 margin. 이 간소화 %가 많은뿐만 아니라 훨씬 더 간단 허용 규칙 absolute:position절대 위치 지정된 컨테이너가 있다면 계산할 때 절대 위치 지정된 요소가 컨테이너를 사용하기 때문에, 요소 보내고 ' top, right, bottom, left속성을.

HTML5 문서의 대부분의 DIV는 일반적으로 구성 요소입니다.

구성 요소는 페이지에서 독립적 인 단위로 간주 될 수도 있습니다. 평신도의 용어로 블랙 박스 와 같은 것을 다루는 것이 합리적이라면 구성 요소와 같은 것을 취급합니다 .

품질 보증 페이지 예를 다시 살펴 보겠습니다.

#navigation
#question
#answers
#answers .answer
etc.

페이지를 구성 요소로 분할하면 작업을 관리 가능한 단위로 분할 할 수 있습니다.

같은 줄에 누적 효과가있는 규칙을 적용하십시오.

예를 들어 border, marginpadding(하지만 outline) 당신은 스타일링하는 요소의 치수와 크기에 대한 모든 추가.

position: absolute; top: 10px; right: 10px;

그들이 한 줄로 읽을 수 없다면 적어도 가까이 두십시오.

padding: 10px; margin: 20px;
border: 1px solid black;

가능하면 속기를 사용하십시오.

/* the following... */
padding-left: 10px;
padding-right: 10px;
/* can simply be written as */
padding: 0 10px;

선택기를 반복하지 마십시오

동일한 선택기의 인스턴스가 더 많은 경우 동일한 규칙의 여러 인스턴스가 생길 수 있습니다. 예를 들면 다음과 같습니다.

#some .selector {
    margin: 0;
    font-size: 11px;
}
...
#some .selector {
    border: 1px solid #000;
    margin: 0;
}

ID / 클래스를 사용할 수있는 경우 TAG를 선택기로 사용하지 마십시오.

먼저 DIV 및 SPAN 태그는 예외입니다. 절대로 사용해서는 안됩니다! ;) 클래스 / ID를 첨부 할 때만 사용하십시오.

이...

div#answers div.answer table.statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
div#answers div.answer table.statistics thead {
    outline: 3px solid #000;
}

다음과 같이 작성해야합니다.

#answers .answer .statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

여분의 매달려있는 DIV가 있기 때문에 선택기에 아무것도 추가하지 않습니다. 또한 불필요한 태그 규칙을 강제합니다. 당신은, 예를 들어, 변경한다면 .answerA로부터div A와 article스타일 휴식 것입니다.

또는 더 명확성을 선호하는 경우 :

#answers .answer .statistics {
    color: pink;
    border: 1px solid #000;
}
#answers .answer table.statistics {
    border-collapse: collapsed;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

border-collapse속성이 되는 이유는에 적용될 때만 의미가있는 특수 속성입니다 table. 만약.statistics 않은table 적용되지 않아야합니다.

일반적인 규칙은 악하다!

  • 가능한 경우 일반 / 마법 규칙을 작성하지 마십시오
  • CSS-reset / rereset에 대한 것이 아닌 한 모든 일반적인 마술은 적어도 하나의 루트 구성 요소에 적용되어야합니다.

그들은 시간을 절약하지 않고 머리를 터뜨립니다. 유지 보수를 악몽으로 만듭니다. 규칙을 작성할 때 규칙이 적용되는 위치를 알 수 있지만 나중에 규칙이 엉망이된다는 보장은 없습니다.

이 일반적인 규칙에 추가하는 것은 스타일을 지정하는 문서에 대한 아이디어가 있더라도 혼란스럽고 읽기 어렵습니다. 이것은 일반적인 규칙을 작성해서는 안된다고 말하는 것이 아니라, 규칙을 일반화하려는 의도가 아니라면 규칙을 사용하지 말고 선택기에 가능한 한 많은 범위 정보를 추가하는 것입니다.

이런 것들 ...

.badges {
    width: 100%;
    white-space: nowrap;
}

address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

... 프로그래밍 언어에서 전역 변수를 사용하는 것과 같은 문제가 있습니다. 당신은 그들에게 범위를 제공해야합니다!

#question .userinfo .badges {
    width: 100%;
    white-space: nowrap;
}

#answers .answer .userinfo address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

기본적으로 다음과 같이 읽습니다.

components                   target
---------------------------- --------
#answers .answer   .userinfo address
-------- --------- --------- --------
domain   component component selector 

내가 알고있는 구성 요소가 페이지의 단일 항목 일 때마다 ID를 사용하는 것이 좋습니다. 당신의 요구는 다를 수 있습니다.

참고 : 이상적으로는 충분히 작성해야합니다. 그러나 선택기에서 더 많은 구성 요소를 언급하는 것은 더 적은 구성 요소를 언급하는 것과 비교하여 더 관대 한 실수입니다.

pagination컴포넌트 가 있다고 가정 해 봅시다 . 사이트의 여러 곳에서 사용합니다. 이것은 일반적인 규칙을 작성할 때 좋은 예입니다. display:block개별 페이지 번호 링크를 말하고 어두운 회색 배경을 제공합니다. 그것들이 보이려면 다음과 같은 규칙이 있어야합니다.

.pagination .pagelist a {
    color: #fff;
}

이제 답변 목록에 페이지 매김을 사용한다고 말하면 다음과 같은 상황이 발생할 수 있습니다

#answers .header a {
    color: #000;
}
...
.pagination .pagelist a {
    color: #fff;
}

이렇게하면 원하지 않는 흰색 링크가 검은 색이됩니다.

그것을 고치는 잘못된 방법은 다음과 같습니다.

.pagination .pagelist a {
    color: #fff !important;
}

그것을 고치는 올바른 방법은 다음과 같습니다.

#answers .header .pagination .pagelist a {
    color: #fff;
}

복잡한 "논리"설명이 작동하지 않습니다 :)

"이 값은 blah-blah의 높이와 결합 된 blah-blah에 따라 다릅니다"와 같은 것을 쓰면 실수를 저지르는 것이 불가피하며 모두 카드 집처럼 쓰러 질 것입니다.

귀하의 의견을 단순하게 유지하십시오. "논리 연산"이 필요한 경우 SASS 또는 LESS 와 같은 CSS 템플릿 언어 중 하나를 고려하십시오 .

컬러 팔레트는 어떻게 작성합니까?

이것을 마지막으로 두십시오. 전체 색상 표에 파일을 준비하십시오. 이 파일이 없으면 스타일에 규칙에 사용 가능한 색상 표가 여전히 있어야합니다. 색상 표를 덮어 써야합니다. 매우 높은 수준의 상위 컴포넌트 (예 :)를 사용하여 선택기를 연결 한 #page다음 스타일을 자체 규칙 블록으로 작성하십시오. 그냥 색이나 그 이상일 수 있습니다.

예.

#page #header .description,
#page #categories .description,
#page #answers .answer .body
{
    color: #222; background: #fff; 
    border-radius: 10px;
    padding: 1em;
}

아이디어는 간단합니다, 당신의 컬러 팔레트는 기본 스타일의 스타일 시트 독립적이며, 단계적으로 으로.

이름이 적고 메모리가 적으므로 코드를 쉽게 읽을 수 있습니다.

더 적은 이름을 사용하는 것이 좋습니다. 텍스트, 본문, 머리글과 같은 매우 간단한 단어를 사용하는 것이 이상적입니다.

또한 간단한 단어의 조합을 이해하기가 더 쉽다는 것을 알았습니다. 그런 다음 긴 "적절한"단어가 포함 된 포스트 바디, 포스트 헤드, 사용자 정보 등이 있습니다.

몇 주 후에 자신과 같은 스타일 스프를 읽기 위해 어떤 낯선 사람이 와서도 모든 셀렉터가 사용되는 곳이 아니라 단어가 사용되는 곳만 이해하면됩니다. 예를 들어.this 요소가 "선택한 항목"또는 "현재 항목"등일 때마다 .

자신을 정리

CSS를 작성하는 것은 먹는 것과 같습니다. 때로는 혼란스러워합니다. 그 엉망을 정리하십시오. 그렇지 않으면 가비지 코드가 쌓일 것입니다. 사용하지 않는 클래스 / ID를 제거하십시오. 사용하지 않는 CSS 규칙을 제거하십시오. 모든 것이 단단하고 규칙이 충돌하거나 중복되지 않는지 확인하십시오.

내가 제안한 것처럼 일부 컨테이너를 스타일의 블랙 박스 (구성 요소)로 처리하고 선택기에서 해당 구성 요소를 사용하고 모든 것을 하나의 전용 파일에 보관하거나 파일을 TOC와 헤더로 올바르게 분할하면 일이 훨씬 쉽다 ...

firefox 확장 프로그램 Dust-Me Selectors (팁 : sitemap.xml을 가리킴)와 같은 도구를 사용하여 CSS 핵무기 및 카르 니에 숨겨진 일부 정크를 찾을 수 있습니다.

unsorted.css파일 보관

품질 보증 사이트를 스타일링하고 있고 '응답 페이지'에 대한 스타일 시트가 이미 있다고 가정 해 보겠습니다 answers.css. 새로운 CSS를 많이 추가해야하는 경우 unsorted.css스타일 시트에 추가 한 다음answers.css .

이에 대한 몇 가지 이유 :

  • 완료 한 후 리팩토링하는 것이 더 빠르며, 규칙을 검색하고 (존재하지 않을 수 있음) 코드를 삽입하는 것입니다
  • 제거 할 내용을 작성하고 코드를 삽입하면 해당 코드를 제거하기가 더 어려워집니다.
  • 원본 파일에 쉽게 추가하면 규칙 / 선택기 중복이 발생합니다

1
비 태그 선택기는 태그 기반 선택기보다 훨씬 느립니다. 모든 브라우저에는 'div'(또는 다른 태그)를 얻는 기본 메소드가 있습니다. 너무 일반적인 경우 ( '.class') 렌더링 엔진은 일치하는 항목이 있는지 확인하기 위해 DOM의 모든 요소를 ​​탐색해야합니다.
Miguel Ping

@Miguel 렌더링 엔진이 DOM의 모든 요소를 ​​DIV인지 확인하지 않아도되는 이유는 무엇입니까? 특별한 최적화가 있다면 왜 클래스 / ID에 적용되지 않습니까? 소스가 있습니까? CSS에서 눈에 띄는 성능 저하 요인은 플로트 스팸 때문이었습니다. 페이지를 스크롤 할 때 렌더링 엔진이 일부 브라우저에서 심하게 지연 될 수 있습니다 (아마도 너무 많은 계산).
srcspider

3
나는 tagNames (yay!)를 표적으로하지 않기 위해 이것을 표결하려고했지만, 일반 (boo!)이 아닌 부분이 있었다
mwilcox

1
@ Miguel, 그렇게 작동하지 않습니다. 브라우저는 CSS 문자열을 거꾸로 읽으므로 "div .myclass"를 가져 와서 모든 ".myclass"클래스를 찾은 다음 div의 조상인지 확인하십시오.
mwilcox

5
일반적인 규칙과 전역 변수를 비교하는 것은 CSS에 대해 들어 본 가장 큰 오해입니다.
gblazex

55

1. SASS 2. Compass를 살펴보십시오.


11
이 백만 배. Sass를 사용하면 그 어느 때보 다 더욱 체계적이고 강력한 CSS 랭글러가되었습니다. 여러 파일에 걸쳐 스타일을 구성하고, 스타일을 중첩하고, 변수를 사용하는 등의 작업을 수행 할 수 있습니다.
Alan H.

2
sass, compass 및 less는 모두 하루가 끝날 때 정상적인 CSS를 생성하며 여전히 추악하고 폭발 할 수 있습니다. CSS 자체에 대한 해결책은 아닙니다.
Moin Zaman

8
@Moin_Zaman 저의 겸손한 의견으로는, 당신의 진술은 순수한 허벅지입니다. sass / compass / less로 작성하고 파일에서 코드를 구성하십시오. 출력 CSS가 어떻게 보이는지 신경 쓰지 마십시오. 또한 (적어도 적은 응용 프로그램을 통해) 최소한의 출력을 최소화 할 수 있습니다.
bzx

1
@ bzx 내 요점을 입증하고 있습니다 :) 브라우저가 sass / compass / less를 이해하지 못합니다. 이들 모두는 클라이언트 측 또는 빌드의 일부로 일반 CSS로 컴파일해야합니다. 결국 CSS로 무엇을 생산하는지 몰라도 이와 같은 도구를 사용하면 무의식적으로 악용하기 쉽고 최적의 CSS 파일보다 큰 파일로 끝날 수 있습니다.
Moin Zaman

그것이 바로 gzip 압축이 작용하는 곳입니다… 대부분의 웹 서버와 브라우저는 가능할 때 gzip으로 압축 된 내용과 통신합니다. 선택기 조각을 여러 번 반복하면 단일 해시 테이블 항목으로 압축됩니다. 유일한 문제는 브라우저에서 CSS 규칙을 구문 분석하는 데 필요한 RAM의 양입니다.
제삼자

31

CSS부풀림 을 방지하는 가장 좋은 방법 은 객체 지향 CSS 원칙을 사용하는 것입니다.

꽤 좋은 OOCSS 프레임 워크 도 있습니다 .

이데올로기 중 일부는 최고의 답변에서 여기에 언급 된 많은 것에 반대하지만 CSS객체 지향 방식 으로 설계하는 방법을 알고 나면 실제로 코드를 간결하고 의미있게 유지하는 데 효과적이라는 것을 알 수 있습니다.

여기서 중요한 것은 사이트에서 '객체'또는 빌딩 블록 패턴을 식별하고이를 설계하는 것입니다.

페이스 북은 OOCSS 제작자를 고용했습니다. Nicole Sullivan 을 프론트 엔드 코드 (HTML / CSS)를 많이 절약했습니다. 당신이 변환 말할 것도 같은 예는 실제로 CSS에서, 그러나 그것의 소리, 당신을 위해 아주 가능하다 너무 당신의 HTML에서뿐만 아니라 절감 효과를 얻을 수있는 table많은으로 기반의 레이아웃을 div

또 다른 위대한 접근 방식은 OOCSS와 일부 측면에서 비슷합니다. CSS는 처음부터 확장 가능하고 모듈화되도록 CSS를 계획하고 작성하는 것입니다. Jonathan SnookSMACSS-CSS를위한 확장 가능하고 모듈화 된 아키텍처에 대해 훌륭한 글을 쓰고 책을 읽었습니다.

다음은 몇 가지 링크로 연결하겠습니다.
대규모 CSS 실수 5 개-(비디오)
대규모 CSS 실수 5 개-(슬라이드)
CSS Bloat-(슬라이드)


16

캐스케이드, 무게 및 작동 방식도 이해해야합니다.

클래스 식별자 (div.title) 만 사용하고 있습니다. ID를 사용할 수 있고 ID가 클래스보다 더 중요하다는 것을 알고 있습니까?

예를 들어

#page1 div.title, #page1 ul, #page1 span {
  // rules
}

모든 요소가 글꼴 크기, 말 또는 색상 또는 규칙에 관계없이 공유되도록합니다. # page1의 후손 인 모든 DIV에 특정 규칙을 적용 할 수도 있습니다.

가중치와 관련하여 CSS 축은 가장 일반적인 / 가장 가벼운 것에서 가장 구체적인 것 / 가벼운 것으로 이동합니다. 즉, CSS 선택기에서 요소 지정자가 클래스 지정자에 의해 제어되고 ID 지정자에 의해 제어됩니다. 숫자가 계산되므로 두 요소 지정자 (ul li)가있는 선택기는 단일 지정자 (li) 만있는 것보다 가중치가 더 큽니다.

숫자처럼 생각하십시오. ones 열의 9는 여전히 tens 열의 1보다 작습니다. ID 지정자, 클래스 지정자 및 두 개의 요소 지정자가있는 선택기는 ID가없는 선택자, 500 개의 클래스 지정자 및 1,000 개의 요소 지정자보다 가중치가 더 높습니다. 물론 이것은 터무니없는 예이지만 아이디어를 얻습니다. 요점은이 개념을 적용하면 많은 CSS를 정리하는 데 도움이됩니다.

BTW에서 class = "title"이있는 다른 요소와 충돌하지 않는 한 요소 지정자를 클래스 (div.title)에 추가 할 필요는 없습니다. 나중에 그 무게를 사용해야 할 수도 있으므로 불필요한 무게를 추가하지 마십시오.


ID를 사용하는 것은 Visual Basic 코드에서 전역 변수를 사용하는 것과 마찬가지로 나쁩니다.
alpav

2
@ alpav : 죄송합니다, 잘못되었습니다. ID는 새로운 클래스 이름을 작성하지 않고도 페이지의 다른 부분에서 같은 요소가 다르게 표시되도록하는 훌륭한 방법입니다.
Robusto

@Robusto : 새로운 클래스 이름을 만드는 것보다 새로운 ID 이름을 만드는 것이 왜 어려운가요?
alpav

@Robusto : ID를 사용하면 전역 범위에 대해 걱정해야하고 클래스 이름을 사용하면 로컬 범위에 대한 고유성에 대해서만 걱정할 필요가 있기 때문에 새 클래스 이름을 만드는 것이 실제로는 ID 이름보다 쉽습니다.
alpav

1
@alpav“전 세계적으로 생각하지 않고 현지 이름을 지정할 수 있도록 캡슐화의 목적을 무너 뜨 렸습니다.” 맞습니다. 그러나 CSS 선택기는 본질적으로 전역 적입니다. 작성할 때 .myclass클래스로 모든 것을 선택합니다 myclass. CSS에서 클래스는 그런 점에서 ID와 동일합니다.
Paul D. Waite

12

적은 CSS 동적 프레임 워크를 제안해도 될까요

앞에서 언급 한 SASS와 유사합니다.

부모 클래스 당 CSS를 유지하는 데 도움이됩니다.

예 :

 #parent{     
  width: 100%;

    #child1
    {    
     background: #E1E8F2;    
     padding: 5px;    
    }

    #child2
   {
     background: #F1F8E2;
     padding: 15px
   }
 }

이것이하는 일 : width : 100 %를 # child1과 # child2에 적용합니다.

또한 # child1 특정 CSS는 #parent에 속합니다.

이것은 렌더링

#parent #child1
{
 width: 100%;
 background: #E1E8F2;
 padding: 5px;
}

#parent #child2
{
 width: 100%;
 background: #F1F8E2;
 padding: 15px;
}

1
나는 sass를 사용하고 이것이 sass와 적은 것의 차이점일지도 모르지만`#parent {width : 100 %; } #parent # child1 {배경 : # E1E8F2; 패딩 : 5px; } #parent # child2 {배경 : # F1F8E2; 패딩 : 15px; }`
emik

12

어려운 것은 사이트에 필요한 디자인을 일련의 규칙으로 변환하는 것입니다. 사이트의 디자인이 명확하고 규칙에 기반한 경우 클래스 이름과 CSS 구조가 그로부터 흘러 나올 수 있습니다. 그러나 사람들이 시간이 지남에 따라 사이트에 의미가없는 비트를 무작위로 추가하는 경우 CSS에서 할 수있는 일이 많지 않습니다.

CSS 파일을 대략 다음과 같이 구성하는 경향이 있습니다.

  1. 를 기반으로 CSS 리셋, 에릭 마이어의 . (그렇지 않으면 대부분의 요소에 대해 기본 브라우저 스타일을 재설정하는 규칙이 하나 이상 있습니다. 대부분의 목록은 예를 들어 목록의 기본 HTML 스타일처럼 보이지 않습니다.)

  2. 사이트에서 요청하는 경우 그리드 시스템 CSS. (나는 960.gs를 기반으로 한다 )

  3. 모든 페이지에 나타나는 구성 요소 스타일 (머리글, 바닥 글 등)

  4. 사이트 전체의 다양한 장소에서 사용되는 구성 요소의 스타일

  5. 개별 페이지에만 관련된 스타일

보시다시피, 대부분은 사이트의 디자인에 달려 있습니다. 디자인이 명확하고 체계적이라면 CSS가 될 수 있습니다. 그렇지 않으면, 당신은 망했다.


7

귀하의 질문에서 제기 한 높은 수준의 문제를 해결하기 위해 제 답변은 높은 수준입니다. 낮은 수준의 조직 트릭이있을 수 있으며 더 예쁘게하기 위해 조정할 수는 있지만 방법 론적 결함을 해결할 수있는 것은 없습니다. CSS 폭발에 영향을 미치는 몇 가지 사항이 있습니다. 분명히 사이트의 전체적인 복잡성뿐만 아니라 명명 의미, CSS 성능, CSS 파일 구성 및 테스트 가능성 / 허용 가능성과 같은 것들도 있습니다.

네이밍 시맨틱으로 올바른 길을 가고있는 것처럼 보이지만 한 걸음 더 나아갈 수 있습니다. 구조적 수정없이 사이트에 반복적으로 나타나는 HTML 섹션 ( "모듈"이라고도 함)은 선택기 루트로 간주 될 수 있으며이 루트를 기준으로 내부 레이아웃의 범위를 지정할 수 있습니다. 이것은 객체 지향 CSS 의 기본 교리이며 , 야후 엔지니어가이 강연에서 이에 대한 자세한 내용을 읽거나 볼 수 있습니다 .

이 깔끔한 접근 방식은 성능 문제와 반대로 실행될 수 있으며 id 또는 tag name 기반의 짧은 선택기 를 선호 합니다. 그 균형을 찾는 것은 당신에게 달려 있지만, 당신이 방대한 사이트를 가지고 있지 않다면, 이것은 당신의 선택기들을 짧게 유지하도록 상기시키는 당신의 머리 뒤의 가이드 일뿐입니다. 성능에 대한 자세한 내용은 여기를 참조하십시오 .

마지막으로 전체 사이트에 단일 CSS 파일 을 만들거나 여러 파일 (페이지 당 또는 섹션 파일과 함께 사용되는 단일 기본 파일)을 사용 하시겠습니까? 단일 파일은 성능이 우수하지만 여러 팀 구성원과 이해 / 유지하기가 어려울 수 있으며 테스트하기가 더 어려울 수 있습니다. 테스트 를 위해 충돌 및 의도하지 않은 캐스케이드를 테스트하기 위해 지원되는 모든 CSS 모듈이 포함 된 단일 CSS 테스트 페이지 를 사용 하는 것이 좋습니다 .

또는 CSS 규칙의 범위를 페이지 나 섹션으로 지정하기 위해 다중 파일 접근 방식 을 사용할 수 있습니다 . 이를 위해서는 브라우저가 성능 문제인 여러 파일을 다운로드해야합니다. 서버 측 프로그래밍을 사용하여 CSS 파일을 단일 파일로 동적으로 지정 및 집계 (및 축소) 할 수 있습니다. 그러나이 파일들은 분리되어 있고 테스트는 분리되어 있기 때문에 페이지 / 섹션에서 모양과 느낌이 일치하지 않을 가능성이 있습니다. 따라서 테스트가 더 어려워집니다.

고객의 특정 요구를 분석하고 그에 따라 이러한 우려를 균형을 맞추는 것은 귀하의 책임입니다.


5

나 앞에서 말했듯이 : OOCSS에 들어가십시오. Sass / Less / Compass는 사용을 유혹하지만 바닐라 CSS가 올바른 방식으로 사용될 때까지 Sass / Less / Compass는 상황을 악화시킬뿐입니다.

먼저 효율적인 CSS에 대해 읽으십시오. Google Page Speed를 사용 해보고 Souders가 효율적인 CSS에 대해 작성한 것을 읽으십시오.

그런 다음 OOCSS를 입력하십시오.

  • 계단식 작업을 배우십시오. 결국 캐스 케이 딩 스타일 시트 라고합니다 .
  • 세분성을 올바르게 얻는 방법 알아보기 (위에서 아래가 아닌 아래에서 위)
  • 구조와 피부를 분리하는 방법을 배웁니다 (독특하고 이러한 개체의 변형은 무엇입니까?)
  • 컨테이너와 내용을 분리하는 방법을 배웁니다.
  • 격자를 사랑하는 법을 배우십시오.

CSS 작성에 대한 모든 비트를 혁신합니다. 나는 완전히 새롭게되어 사랑합니다.

업데이트 : SMACSS는 OOCSS와 유사하지만 일반적으로 말하기에 적응하기가 더 쉽습니다.


2
"Sass / Less / Compass는 상황이 더 나빠질 것입니다"– 그것은 주관적이고 프로젝트에 따라 다릅니다. OOCSS와 함께 이들 중 하나를 사용하면 많은 대형 프로젝트 (특히 스타일이 자주 변경 될 수있는 프로젝트)의 유지 관리에 실제로 도움이 될 것입니다.
Zach Lysobey

Zach L : OOCSS (또는 SMACSS)는 공급 업체 접두사에만 Compass / Less / Sass가 올바르게 사용되도록합니다.
madr

나는 이것을 너무 많이 주장하려고하지 않을 것입니다 (현재 전처리기를 사용하지 않기 때문에).하지만 그런 것들을 유용하게 사용하는 사람들이 많이 있다고 확신합니다. 공급 업체 접두사 문제의 OOCSS / SMACSS의 외부와
자크 Lysobey

4

CSS 리팩토링 에서 추출한 현명한 CSS의 기본 원칙 : 추가 전용에서 모듈 식 CSS로

SASS로 작성하십시오. 변수, 믹스 인 등의 장점을 잊어 버리는 것은 미치 겠죠.

스타일링에 HTML ID를 사용하지 마십시오. 항상 클래스를 사용하십시오 . HTML ID는 올바르게 사용될 때 전체 페이지에 한 번만 표시되는데, 이는 합리적인 엔지니어링의 가장 기본적인 상품 중 하나 인 재사용 성과는 완전히 반대입니다. 또한 ID를 포함하는 선택기를 재정의하는 것은 실제로 어렵고 하나의 HTML ID를 압도하는 유일한 방법은 다른 ID를 생성하여 ID가 ​​해충처럼 코드베이스에 전파되도록하는 것입니다. 변경되지 않은 Javascript 또는 통합 테스트 후크를 위해 HTML ID를 유지하는 것이 좋습니다.

CSS 클래스의 이름은 응용 프로그램 별 기능이 아닌 시각적 기능으로 지정하십시오. 예를 들어 ".bundle-product-discount-box"대신 ".highlight-box"라고 말합니다. 이런 식으로 코딩하면 부가 비즈니스를 수행 할 때 기존 스타일 시트를 재사용 할 수 있습니다. 예를 들어, 우리는 법률 노트 판매를 시작했지만 최근 법률 교사로 옮겼습니다. 우리의 기존 CSS 클래스는 ".download_document_box"와 같은 이름을 가졌습니다.이 클래스 이름은 디지털 문서에 대해 이야기 할 때 이해가되지만 새로운 개인지도 교사 도메인에 적용될 때 혼동 될 것입니다. 기존 서비스와 향후 서비스 모두에 적합한 더 나은 이름은 ".pretty_callout_box"입니다.

특정 격자 정보 뒤에 CSS 클래스의 이름을 지정하지 마십시오. CSS 커뮤니티에는 CSS 프레임 워크의 디자이너와 제작자 (Cough Twitter Bootstrap )가 "span-2"또는 "cols-8"이 CSS 클래스의 합리적인 이름이라고 생각 하는 무서운 반 패턴이있었습니다 . CSS의 핵심은 마크 업에 많은 영향을 미치지 않고 디자인을 수정할 수있는 가능성을 제공하는 것입니다. 그리드 크기를 HTML로 하드 코딩하면이 목표를 방해하므로 주말보다 오래 지속될 것으로 예상되는 모든 프로젝트에서 사용하는 것이 좋습니다. 나중에 그리드 클래스를 피하는 방법에 대해 자세히 알아보십시오.

CSS를 여러 파일로 분할하십시오 . 이상적으로 모든 것을 "컴포넌트"/ "위젯"으로 분할 한 다음 이러한 디자인 원자에서 페이지를 작성하는 것이 이상적입니다. 그러나 실제로는 일부 웹 사이트 페이지에 특이점이 있습니다 (예 : 특수 레이아웃 또는 기사 하나에 나타나는 이상한 사진 갤러리). 이 경우 해당 특정 페이지와 관련된 파일을 작성하여 요소가 다른 곳에서 재사용 될 것이 확실 해지면 전체 위젯으로 리팩토링 할 수 있습니다. 이는 실질적인 예산 문제에 의해 유발되는 트레이드 오프입니다.

중첩을 최소화하십시오. 중첩 선택기 대신 새 클래스를 소개하십시오. 중첩시 SASS가 반복 선택기의 고통을 제거한다고해서 5 단계 깊이 중첩해야한다는 의미는 아닙니다. 선택자를 과도하게 한정하지 마십시오 (예 : ".nav"가 동일한 작업을 수행 할 수있는 "ul.nav"를 사용하지 마십시오). 사용자 정의 클래스 이름과 함께 HTML 요소를 지정하지 마십시오 (예 : "h2.highlight"). 대신 클래스 이름 만 사용하고 기본 선택기를 삭제하십시오 (예 : 이전 예제는 ".highlight"여야 함). 과다한 선택기는 값을 추가하지 않습니다.

전체 응용 프로그램에서 일관성을 유지해야하는 기본 구성 요소를 스타일링 할 때만 HTML 요소 (예 : "h1")에 대한 스타일을 만듭니다. "header ul"과 같은 광범위한 선택기를 사용하지 마십시오. 어쨌든 일부 위치에서 재정의해야 할 수 있습니다. 계속 말하지만, 대부분의 경우 특정 스타일을 원할 때마다 잘 알려진 특정 클래스를 사용하려고합니다.

Block-Element-Modifier의 기본 사항을 받아들입니다. 예를 들어 여기에서 읽을 수 있습니다. 우리는 그것을 아주 가볍게 사용했지만 여전히 CSS 스타일을 구성하는 데 많은 도움이되었습니다.


2

많은 경우 개인이 섹션 사이에 제목 주석과 함께 파일을 섹션으로 나눕니다.

같은 것

/* Headings and General Text */

.... stuff here for H1, etc..

/* Main page layout */

.... stuff here for layout page setup etc.

꽤 잘 작동하며 나중에 쉽게 돌아가서 작업중인 것을 찾을 수 있습니다.


이것은 "모든 것에 대해 별도의 CSS 속성"을 갖는 것에 대한 asker의 관심사에 대해서는 아무 것도 말하지 않습니다.
G-Wiz

1

BEM을 봐야 합니다.

이론

BEM은 CSS 재 사용자를 구성하고 이름을 지정하기위한 일련의 지침을 제공하여 사물을보다 재사용 가능하고 모듈화하고 스파게티 코드와 특수성 두통으로 이어지는 종류의 선택기 사이의 충돌을 피하기위한 것입니다.

올바르게 사용하면 실제로 매우 긍정적 인 효과가 있습니다.

  • 스타일은 요소에 추가 될 때 원하는 것을 수행합니다.
  • 스타일은 새지 않으며 추가 된 항목에만 영향을줍니다.
  • 스타일은 문서 구조에서 완전히 분리됩니다
  • 스타일이 서로 오버라이드되도록 강제 할 필요는 없습니다.

BEM은 SASS와 함께 작동하여 거의 객체 지향 스타일을 CSS에 제공합니다. 단일 UI 요소의 표시를 처리하고 내부 요소를 처리하는 방법과 같은 '방법'과 같은 변수를 포함하는 모듈 식 파일을 작성할 수 있습니다. 실제로 하드 코어 OO 프로그래머가이 아이디어를 잃을 수도 있지만, 실제로 적용된 개념은 모듈성, 느슨한 결합 및 긴밀한 응집성 및 컨텍스트없는 재사용과 같은 OO 구조의 더 멋진 부분을 가져옵니다. 당신은 방식으로 구축 할 수 있습니다 사용하여 캡슐화 된 객체 같다고 말대꾸하고 &operato의 연구를.

Smashing Magazine의 자세한 내용은 여기를 참조하십시오 . 그리고 CCS Wizardry의 Harry Roberts (CSS에 관련된 누구나 읽어야 할 사람) 가 여기 있습니다 .

실제로

나는 이것을 SMACSS와 OOCSS와 함께 여러 번 사용했으며, 이것도 비교할 무언가가 있음을 의미합니다. 나는 또한 종종 내 자신의 경험이없는 창조물로 큰 혼란을 겪었습니다.

실제 환경에서 BEM을 사용하면 몇 가지 추가 원칙으로 기술을 향상시킵니다. 유틸리티 클래스를 사용합니다. 좋은 예는 래퍼 클래스입니다.

.page-section {
    width: 100%;
}
@media screen and (min-width: 1200px) {
    margin: 0 auto;
    width: 1200px;
}

그리고 나는 또한 계단식과 특이성에 어느 정도 의존합니다. 여기 BEM 모듈은 것 .primary-box하고는 .header특정 오버 타고 맥락 것

.header {
  .primary-box {
    color: #000;
  }
}

(나는 가능한 한 일반적이고 컨텍스트가없는 모든 것을 만들기 위해 최선을 다합니다. 즉, 좋은 프로젝트는 거의 모든 것이 재사용 가능한 모듈에 있음을 의미합니다)

내가 여기서 할 마지막 요점은 작지만 복잡하지 않은 프로젝트가 나타날 수 있다는 것입니다. 두 가지 이유로 시작부터 시작해야합니다.

  • 프로젝트는 복잡성이 증가하므로 좋은 기초를 세우는 것이 중요하며 CSS는 포함됩니다.
  • WordPress를 기반으로 구축되어 단순 해 보이는 프로젝트조차도 CSS에서 JavaScript가 매우 복잡 할 수 있습니다. 서버 측 코딩을 수행 할 필요가 없으므로 브로셔 부분의 프런트 엔드 20 개의 모듈과 각각의 3 가지 변형이 있습니다 : 매우 복잡한 CSS가 있습니다!

웹 컴포넌트

2015 년에는 웹 구성 요소를 살펴보기 시작했습니다. 나는 이것에 대해 아직 많이 알지 못하지만 모든 프론트 엔드 기능을 자체 포함 모듈로 통합하여 BEM에서 프론트 엔드까지 전체 원칙을 효과적으로 적용하려고 노력합니다. DOM 프래그먼트, Js (MVC) 및 CSS와 같은 요소는 모두 동일한 UI 위젯을 빌드합니다.

이 작업을 수행하면 BEM과 같은 문제로 해결하려고 시도한 CSS에 존재하는 원래 문제 중 일부를 해결하면서 다른 프런트 엔드 아키텍처 중 일부를 제정신으로 만들 수 있습니다.

여기에 더 읽을 거리 가 있고 여기에 볼만한 가치가 있는 프레임 워크 폴리머 가 있습니다.

드디어

또한 이것은 훌륭한 CSS 모범 사례 CSS 가이드 라고 생각합니다. 특히 대규모 CSS 프로젝트가 지저분 해지는 것을 막기 위해 설계되었습니다. 나는 이것들의 대부분을 따르려고 노력한다.



0

여기에 훌륭한 자료가 있으며 일부는이 질문에 대답하는 데 많은 시간을 할애했지만 별도 또는 개별 스타일 시트와 관련하여 개발을 위해 별도의 파일을 사용하고 사이트 전체에서 사용되는 모든 일반 CSS를 사용합니다. 배포시 단일 파일로.

이 방법을 사용하면 두 가지 이점을 모두 얻을 수 있으며, 성능을 향상시키고 (브라우저에서 HTTP 요청을 덜 받음) 개발 중에 코드 문제를 분리 할 수 ​​있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.