내 첫 번째 Tailwind CSS 플러그인 작성
13633 단어 tailwindcsswebdevcssjavascript
backdrop-filter
모호 중첩 효과를 만들고 autofill
폼 필드를 자동으로 완성할 때의 위조 스타일 등입니다. 이런 용례는TailwindCSS 핵심 패키지에 없습니다.그래서 나는 사용자 정의 CSS 속성을 사용할 수 있도록 HTML을 떠나서 단독 CSS 파일을 작성해야만 했다.CSS를 따로 쓰는 건 좋지만 광고가 있는 건 싫어요곳곳에 hoc CSS 파일이 있습니다. 이것은 저에게 반모드와 같습니다. 순풍 CSS를 사용하십시오. 특히 테마 시스템이 어디서나 보이기 시작할 때입니다.그래서 나는 물었다.
"Why don't I just create a TailwindCSS plugin, I'll get to see how it works more specifically, too!".
나 왔어.
TL;DR: It turned out pretty fun!
tailwindcss 자동 충전 변체
첫 번째 플러그인은 원소가 특수한 상태(예를 들어
hover
, focus
등에 들어갈 때 스타일을 추가하는 변체를 추가했다.내가 필요로 하는 상태는 폼 필드가 자동으로 완성될 때이다.
기본적으로 양식 필드가 자동으로 완성되면 해당 전경과 배경이 일부 브라우저 기본값으로 변경됩니다.
그러나 기본 설정은 분명히 내 디자인에 적용되지 않는다.TailwindCSS를 사용하는 완벽한 방법은 다음과 같습니다.
<input className="autofill:bg-white autofill:text-gray-700" />
그래서 나는 그것을 지지하기 위해 변체를 썼다.결과는 간단합니다.const plugin = require("tailwindcss/plugin");
const autofill = plugin(({ addVariant, e }) => {
addVariant("autofill", ({ modifySelectors, separator }) => {
modifySelectors(({ className }) => {
const newClass = e(`autofill${separator}${className}`);
return [
`.${newClass}:-webkit-autofill`,
`.${newClass}:-webkit-autofill:hover`,
`.${newClass}:-webkit-autofill:focus`,
].join(",");
});
});
});
module.exports = autofill;
내가 한 addVariant
호출에서 호출tailwindcss/plugin
한 것은 두 가지 기본 내용을 포함한다.autofill
.이렇게 하면 구문autofill:text-gray-100
이 활성화됩니다.autofill:text-gray-100
를 사용할 때 이 함수는 className
=text-gray-100
를 받는다. 이 함수는 이 종류를 목표 상태를 정확하게 처리할 수 있는 것으로 수정하는 것이다. 이 예는-webkit-autofill
이다.지금 내가 해야 할 일은 이 플러그인을tailwind
plugins
에 추가하는 것이다.배치하다.js.module.exports = {
// ...
plugins: [
require("tailwindcss-autofill"),
// Other plugins.
],
variants: {
extend: {
// Enable `autofill` variant for essential plugins.
borderColor: ["autofill", "dark"],
textColor: ["autofill", "dark"],
backgroundColor: ["autofill", "dark"],
},
},
};
이 플러그인은 borderColor
, focusRing
대부분의 다른 플러그인과 함께 사용할 수 있습니다. 불행하게도, backgroundColor
와 textColor
는 사용할 수 없습니다. 브라우저가 사용하는 특수한 속성이 우선순위를 얻었기 때문입니다. (이상합니다.)따라서 해결 방안은 -webkit-text-fill-color
을 전망으로 하고 특수한 box-shadow
값을 배경으로 덮어쓰는 것이다.tailwindcss 텍스트 채우기와 tailwindcss 음영 채우기
-webkit-text-fill-color
와 배경 충전 사용box-shadow
도 TailwindCSS 핵심 패키지에서 지원하지 않는 특수한 속성입니다.그래서 나는 각각 다른 두 개의 플러그인tailwindcss-text-fill과 tailwindcss-shadow-fill을 짰다.이번에 이 두 개의 새 플러그인은 변체가 아닌 실용 프로그램을 추가했다.TailwindCSS 유틸리티는 요소 스타일을 쉽게 설정할 수 있는 클래스입니다. 예를 들어
text-gray-100
, bg-red-50
등입니다.다음은 코드 중 하나입니다.
const plugin = require("tailwindcss/plugin");
const flatten = require("flatten-tailwindcss-theme");
const textFill = plugin(
({ addUtilities, variants, theme, e }) => {
const colors = flatten(theme("colors"));
const utils = Object.entries(colors).reduce(
(res, [key, value]) =>
Object.assign(res, {
[`.${e(`text-fill-${key}`)}`]: {
"-webkit-text-fill-color": value,
},
}),
{}
);
addUtilities(utils, variants("textFill"));
},
{ variants: { textFill: [] } }
);
module.exports = textFill;
이 플러그인은 text-fill-{color}
클래스나 text-{color}
클래스처럼 여러 개의 bg-{color}
클래스를 생성할 것입니다.가장 멋있는 것은 주제를 동적으로 존중하고 습관적인 색깔(현재 디자인 시스템의 색깔)만 클래스를 생성하며 VS 코드의 모든 Intellisense 기능은 자동으로 통합됩니다(tailwindcss-autofill 플러그인과 같습니다).최종 결과
결국 그것은 성공했다🔥!
다음은 내 어셈블리를 설계하는 방법입니다.
<input
className={classNames(
"bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100",
"autofill:text-fill-gray-900 autofill:shadow-fill-white dark:autofill:shadow-fill-gray-800 dark:autofill:text-fill-gray-100"
)}
/>
실제 생활에서의 최종 결과를 보고 checkout my website 구독 뉴스 원고 표를 테스트하려면 즉시 결과를 입력하세요!마지막 생각
나는 네가 지금 무슨 생각을 하고 있는지 안다
A couple of different CSS properties and pseudo-classes turned into 3 JS plugins.
그래.그러나 사실 이 플러그인들도 많은 시간이나 LOC가 필요하지 않다. 특히 지금은 단독 CSS, 클래스 이름을 만들고, 순풍에 기반한 다른 설정과 함께 그것을 유지하는 데 소모되는 노력이 거의 같다.다른 한편, 나도 장래에 서로 다른 목적을 위해 이 플러그인을 다시 사용할 수 있다.기억하다
Tailwind를 사용할 때 추가 CSS를 거의 작성하지 않습니다. 플러그인을 많이 추가할수록 미래 프로젝트에서 추가 CSS를 작성할 가능성이 낮아집니다.
모든 플러그 인이 릴리즈되고 소스가 시작되었으며 자세한 내용을 보려면 다음을 참조하십시오.
Reference
이 문제에 관하여(내 첫 번째 Tailwind CSS 플러그인 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/phuctm97/write-my-first-tailwind-css-plugin-1j2h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)