Stylefy를 사용하여 Facebook과 유사한 원자 CSS 작성
11264 단어 webdevcssjavascriptfrontend
얼마 전에 커피 마실 때.☕ 나는 줄곧 페이스북의 CSS를 뒤적거렸다.나는 여러 페이지를 검사했고, 그 중에서 CSS를 다운로드했으며, CSS 작성 방식을 간소화할 수 있는 도구를 생각해냈다.
게으름은 좋은 일이다.그것은 사람들로 하여금 일을 간소화시켰고, 결국 그들은 아무것도 하지 않게 했다.이것 또한 나로 하여금 https://stylify.dev을 창립하게 했다💎.
페이스북 코드를 뒤적였을 때 다음과 같은 내용을 발견했다.
Html:
CSS:
자세히 보면 원자 CSS를 사용하고 선택기를 손상시킬 수 있습니다.
나는 또 페이스북 자체에서 온 Rebuilding our tech stack for the new Facebook.com편의 글을 발견했는데, 그 중에서 그들은 그들이 새로운 페이스북 버전을 위해 어떤 변화를 했는지 설명했다.또 원자 CSS로 전환하기 전에 400KB가 넘는 압축 CSS를 로드했다고 덧붙였다.
내 경험에 따르면 수동으로 CSS를 작성하는 것은 느리고 시간이 걸린다.모든 구성 요소를 변환하기 전에 구성 요소 프레임워크는 매우 훌륭합니다.Tailwind의 JIT는 이미 충분하지만, 나는 내가 사용하고 싶은 선택기를 기억하거나 검색해야 할 때 좋아하지 않는다.규모를 늘리지 않고 기존 프로젝트에 통합할 수 있는 더 작은 블록이 필요합니다.
그래서 목표가 명확하다.다음 기능을 만들 수 있습니다.
기본적으로
properties:values
을 선택기로 스타일링된 원자 CSS
Stylefy는 native preset과 함께 제공되며, 여기서 선택기는 CSS
property:value
과 같습니다.그렇기 때문에 선택기를 기억하거나 검색할 필요가 없다.이 기기의 미리 설정은 선택할 수 있습니다. 선택기를 정의할 수 있습니다.Stylefy는 다음과 같은 기능도 제공합니다(모든 기능은 나열되지 않음).작은 블록: 각각 파일, 구성 요소, 레이아웃에 대해 CSS
미리 생성된 CSS 없음: 컨텐트
매크로:
m:20px
과 같은 사용자 정의 선택기를 정의할 수 있습니다.화면의 논리적 조작수: 예를 들어
&&
및 ||
화면 조합의 조작수: sm&&tolg:font-size:24px
선택기 손상: 길이
font-weight:bold
에서 짧은 _ab
주문형 CSS: CSS는 요청
HTML 작성CSS를 가져옵니다.선택기를 찢다.다 자동이야.
다음 예와 모든 코드는 StackBlitz에서 찾아 편집할 수 있습니다.
다음 예제에서는 간단한 갤러리 이미지 코드가 있습니다.
<div class="
display:inline-flex
position:relative
margin:24px
overflow:hidden
box-shadow:0__2px__8px__#000
width:300px
md:margin:48px
md:width:600px
">
<img class="width:100% object-fit:cover height:auto" src="https://stylify.dev/images/blog/stylify-facebook/mountains.jpg" alt="">
<div class="
font-family:arial
font-weight:bold
font-size:18px
position:absolute
bottom:0
left:0
padding:24px
background:rgba(0,0,0,0.7)
color:#fff
md:font-size:32px
">
Zakopané (Poland)
</div>
</div>
위 코드의 결과는 다음과 같습니다.만약 순수한 CSS로 작성한다면, 위의 코드는 거의 같아 보일 것이다.
box-shadow
에만 공백이 아닌 __
(밑줄 2개)을 사용합니다.유지보수성 및 상기 코드가 여러 곳에서 사용할 수 있다는 사실 때문에 중용성을 높일 필요가 있다.구성 요소, 매크로, 변수를 정의합시다.
정리 및 구성
위의 예에서 나는 StackBlitz에서 찾을 수 있는 다음과 같은 초기화를 사용했다. (이것은 index.js에 위치하고 이 환경에서 일하기 위해 경미한 변경을 했다.)
import { Compiler, nativePreset } from '@stylify/stylify';
const content = '';
const compiler = new Compiler(nativePreset.compiler);
const compilationResult = compiler.compile(content);
const css = compilationResult.generateCss();
const mangledContent = compiler.rewriteSelectors(content, compilationResult);
먼저 shadow 변수를 컴파일러 구성에 추가합니다.nativePreset.compiler.variables: {
shadow: '0 2px 8px #000'
};
변수를 정의한 후에 우리는 그것을 이렇게 사용할 수 있다: box-shadow:$shadow
.이 기기의 사전 설정은 필수적이지 않다.선택기를 정의할 수 있습니다.예를 들어 이윤율의 경우 다음과 같다.
nativePreset.compiler.macros['m:(\\S+?)'] = (macroMatch, cssProperties) => {
cssProperties.add('margin', macroMatch.getCapture(0));
};
매크로를 정의하면 m:24px
, md:m:48px
과 같은 사용자 정의 값과 함께 사용할 수 있습니다.둘 이상의 동일한 선택기를 여러 위치에서 사용해야 하는 경우 서비스 용이성 및 가독성을 단순화하는 어셈블리를 정의하는 것이 좋습니다.
nativePreset.compiler.components = {
'gallery-image__wrapper': `
display:inline-flex
position:relative
m:24px
md:m:48px
overflow:hidden
box-shadow:$shadow
width:300px
md:width:600px
`,
'gallery-image': 'width:100% object-fit:cover height:auto',
'gallery-image__label': `
font-family:arial
font-weight:bold
font-size:18px
position:absolute
bottom:0
left:0
padding:24px
background:rgba(0,0,0,0.7)
color:#fff
md:font-size:32px
`
};
box-sizing:border-box
을 추가하는 것도 좋은 방법으로 wtf가 미래의 어느 곳에서 문제가 발생하지 않도록 하는 것이다.nativePreset.compiler.plainSelectors: {
'*': 'box-sizing:border-box'
};
위의 모든 향상된 기능을 통해 최종 코드는 훨씬 작아집니다.<div class="gallery-image__wrapper">
<img class="gallery-image" src="https://stylify.dev/images/blog/stylify-facebook/mountains.jpg">
<div class="gallery-image__label">
Zakopané (Poland)
</div>
</div>
축소 및 최적화
Stylefy는 엔진 덮개 아래에서 다음과 같은 방법으로 CSS를 최적화합니다.
font-weight:bold
과 같은 긴 선택기를 _ab12
과 같은 짧은 선택기로 변환한다너의 생각을 나에게 알려줘!
Stylefy는 1년 동안 개발되었고 첫 번째 버전은 한 달 전에 발표되었다.
나는 어떤 피드백, 문제 또는 생각을 받아도 매우 기쁠 것이다!😊.
연락 유지:
👉
👉
👉 medium.com/@8machy
Reference
이 문제에 관하여(Stylefy를 사용하여 Facebook과 유사한 원자 CSS 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/machy8/write-atomic-css-like-facebook-with-stylify-2074텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)