저의 동료는 그가 강요하는 프로젝트에서 CSS에 대한 BEM (Block Element Modifier) 방법을 강하게 추진하고 있으며, 우리가 몇 년 동안 작성한 LESS CSS보다 무엇이 더 나은지 이해할 수 없습니다.
BEM은 CSS 방법론입니다. 다른 것들은 OOCSS 및 SMACSS를 포함합니다. 이러한 방법론은 확장 성이 뛰어나고 재사용 가능한 모듈 식 코드를 작성하는 데 사용됩니다.
LESS는 CSS 프리 프로세서입니다. 다른 것들로는 Sass와 Stylus가 있습니다. 이 전처리 기는 각 소스를 확장 CSS로 변환하는 데 사용됩니다.
BEM과 LESS는 서로 "더 나은"것으로 비교할 수 없으며 다른 목적을 수행하는 도구입니다. 특정 문제를 해결하기 위해 유틸리티를 고려할 때를 제외하고는 스크루 드라이버가 망치보다 낫다고 말할 수는 없습니다.
그는 "고성능"이라고 주장합니다 ...
다음과 같은 고전적인 CSS 스타일 사이에서 성능을 측정해야합니다.
.widget .header
그리고 BEM 스타일 :
.widget__header
그러나 일반적으로 CSS 선택기 성능은 병목 현상이 아니며 최적화 할 필요가 없습니다.
BEM "성능"은 일반적으로 개발자의 성능 작성 코드와 관련이 있습니다. BEM 방법론이 일관되고 정확하게 사용되면 개발자 그룹이 스타일 충돌없이 고유 한 모듈을 동시에 작성할 수 있습니다.
그는 "가독성"과 "재사용"을 주장한다 ...
나는 새로운 개발자에게 BEM이 더 읽기 쉽다고 말할 것입니다. 클래스의 의미와 구조에 대해 잘 정의 된 지침을 제공한다고 말할 수 있습니다.
같은 수업을보고
.foo--bar__baz
상태에 있고 요소를 포함하는 foo
블록 이 있다고 알려줍니다 .bar
baz
나는 BEM이 클래식 모델보다 더 재사용 가능하다고 절대적으로 말할 것입니다.
두 개발자가 블록 ( foo
및 bar
)을 작성 하고 두 블록 모두 표제가있는 경우 이름 충돌에 대한 걱정없이 다른 컨텍스트에서 블록을 안전하게 재사용 할 수 있습니다.
고전적인 맥락에서의, 때문에 그 .foo .heading
와 .bar .heading
충돌하고, 가능한 경우에 따라 해결 될 필요가 특이 충돌을 소개한다.
BEM 사이트에서 클래스는 .foo__heading
and .bar__heading
이며 결코 충돌하지 않습니다.
그는 "중첩 CSS는 반 패턴"이라고 주장했다. "패턴 방지"란 무엇을 의미하며 중첩 된 CSS가 나쁜 이유는 무엇입니까?
"반 패턴"은 숙련 된 개발자가보다 적합한 대안보다 배우고 사용하기가 더 쉬운 코딩 패턴입니다.
중첩 CSS가 나쁜 이유 : 중첩은 선택기의 고유성을 증가시킵니다. 특이성이 높을수록 재정의하는 데 더 많은 노력이 필요합니다. 경험이 부족한 개발자는 종종 CSS가 여러 페이지에 영향을 줄 수 있으므로 다음과 같은 선택기를 사용합니다.
#something .lorem .ipsum .dolor ul.sit li.amet a.more
숙련 된 개발자가 CSS 가 여러 페이지에 영향을 미치지 않을까 걱정할 때 다음과 같은 선택기를 사용합니다.
.more
그는 "모두가 BEM을 사용하는쪽으로 나아가고 있으므로 우리도 그렇게해야한다"고 주장했다.
그것은 악의적 인 오류 이므로 나쁜 주장으로 무시하십시오. BEM 지원에 대한 잘못된 주장이 BEM이 좋지 않다고 믿을만한 이유가 아니기 때문에 오류 로 인한 오류에 빠지지 마십시오 .
누군가가 BEM을 LESS보다 나은 점을 자세히 설명해 주시겠습니까?
나는 이것을 전에 다루었 다 .BEM & LESS는 비교할 수 없다. 사과와 오렌지 등
제 동료가 저를 설득하는데 실패했지만, 선택의 여지가 있는지 모르겠지만 따라야합니다.
OOCSS, SMACSS 및 BEM을 살펴보고 각 방법론의 장단점을 팀으로 평가하는 것이 좋습니다. 형식의 엄격함을 좋아하고 추악한 선택자를 신경 쓰지 않기 때문에 BEM을 사용하지만 자신이나 팀에 적합한 것을 말할 수는 없습니다. 대변인이 공연을하게하지 마십시오. BEM에 익숙하지 않은 경우 팀에서 지원하기 쉬운 다른 대안이 있다는 점에 유의하십시오. 동료와의 입장을 변호해야 할 수도 있지만 장기적으로는 프로젝트 결과에 긍정적 인 영향을 줄 수 있습니다.
BEM을 진지하게 받아들이는 것보다 BEM을 높이 평가할 수 있기를 바랍니다.
BEM 작동 방식을 설명하는 StackOverflow에 대한 답변을 작성했습니다 . 이해해야 할 중요한 것은 이상적인 선택기가 0-0-1-0
오버라이드 및 확장하기 쉽도록 특이성을 가져야한다는 것입니다 .
BEM을 사용한다고해서 LESS를 포기할 필요는 없습니다! 여전히 변수를 사용할 수 있고 @import를 계속 사용할 수 있으며 중첩을 계속 사용할 수 있습니다. 차이점은 렌더링 된 출력이 하위 체인이 아닌 단일 클래스가되기를 원한다는 것입니다.
당신이 가진 곳
.widget {
.heading {
...
}
}
BEM을 사용하면 다음을 사용할 수 있습니다.
.widget {
&__heading {
...
}
}
또한 BEM은 개별 블록을 중심으로 진행되므로 코드를 별도의 파일로 쉽게 분리 할 수 있습니다. widget.less
스타일을 포함 할 .widget
때, 블록 component.less
의 스타일 포함됩니다 .component
블록을. 소스 맵을 사용하고 싶더라도 특정 클래스의 소스를 훨씬 쉽게 찾을 수 있습니다.