๐Stylify CSS๋ก Vue.js ์น์ฌ์ดํธ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์คํ์ผ๋งํ์ธ์
11137 ๋จ์ด vuecsswebdevjavascript
๋ ์ฌ์ด ์์์ ์ํด Stylify Stackblitz playground ๐ฎ์ ํ์ธํ์ธ์.
๐ Stylify ์๊ฐ
Stylify์ ์์ฑํ๋ ๋ด์ฉ์ ๋ฐ๋ผ ๋์ ์ผ๋ก CSS๋ฅผ ์์ฑํฉ๋๋ค. ๊ตฌ๋ฌธ์ css
property:value
์ ์ ์ฌํฉ๋๋ค. ์ ์๋ ์ ํธ๋ฆฌํฐ๋ ๊ตฌ์ฑ ์์ ์ ํ๊ธฐ์ ๊ฒฐํฉ๋๋ฉฐ ํ๋ก๋์
์์๋ .color\:red,.button {color:red}
~ ._zx,._ga{color:red}
์ ๊ฐ์ด ์ต์ํ์ผ๋ก ์ถ์๋ฉ๋๋ค.Stylify๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ์์ ๋ฒ๋ค์ ๊ฐ์ ธ์ค๊ณ , ์ง์ฐ ๋ก๋๋ CSS ์ฒญํฌ๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ๊ณ , HTML ๋ฐ ์ ํ๊ธฐ ๐ค๋ฅผ ์์ฑํ์ฌ ํ์ด์ง ์คํ์ผ์ ์ง์ ํ ์ ์์ต๋๋ค.
๐ Vue.js ์ค์
Vue๋ฅผ ์ค์ ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ cli๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
yarn create vite app
vue
cd app
์ด๋ ๊ฒ ํ๋ฉด ๊ธฐ๋ณธ Vue ์ ํ๋ฆฌ์ผ์ด์ ์ค์ผ๋ ํค์ ์ป์ ์ ์์ต๋๋ค.
๐ Stylify ํตํฉ
NPM ๋๋ Yarn์ ์ฌ์ฉํ์ฌ @stylify/unplugin ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
yarn add @stylify/unplugin
npm i @stylify/unplugin
vite.config.js
๋ฅผ ์ด๊ณ ๋ค์ ์ฝํ
์ธ ๋ฅผ ๋ณต์ฌํฉ๋๋ค.import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { vitePlugin } from '@stylify/unplugin';
const stylifyPlugin = vitePlugin({
transformIncludeFilter: (id) => id.endsWith('vue'),
bundles: [
{
files: ['./src/**/*.vue'],
outputFile: './src/assets/stylify.css',
},
],
extend: {
bundler: {
compiler: {
// Match v-bind:class and :class attributes
selectorsAreas: ['(?:^|\\s+)(?:v-bind)?:class="([^"]+)"'],
},
},
},
});
export default defineConfig(() => ({
plugins: [stylifyPlugin, vue()]
}));
๋ง์ง๋ง ๋จ๊ณ์์
src/main.js
๋ฅผ ์ด๊ณ ๊ฒฝ๋ก๋ฅผ stylify.css
์ ์ถ๊ฐํฉ๋๋ค.// ...
import './stylify.css'
์น์ฌ์ดํธ ์คํ์ผ๋ง
์๋ ์ฝ๋๋ฅผ
src/App.vue
์ ๋ณต์ฌํ๊ณ yarn dev
๋ฅผ ์คํํ๋ฉด ์คํ์ผ์ด ์ง์ ๋ Hello World! ๐
ํ
์คํธ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.<template>
<div class="max-width:800px margin:0__auto">
<h1 class="text-align:center margin-top:100px font-size:42px">Hello World!๐คฉ</h1>
</div>
</template>
Stylify๋ ๋ฒ๋ค ํ์ผ์ ๋ง์คํฌ์ ์ผ์นํ๋ ํ์ผ์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ํ๊ณ CSS๋ฅผ
src/stylify.css
์ ์์ฑํฉ๋๋ค.์๋ฅผ ๋ค์ด
color:blue
๋ฅผ ์ถ๊ฐํ๋ฉด CSS๊ฐ ์๋์ผ๋ก ์
๋ฐ์ดํธ๋ฉ๋๋ค ๐.Stackblitz.com ๐ก์์ ์ง์ Stylify๋ฅผ ์ฌ์ฉํด ๋ณด์ญ์์ค.
๊ตฌ์ฑํ
์ ํธ๋ฆฌํฐ๋ก ์ธํด ํ ํ๋ฆฟ์ด ๋๋ฌด ์ปค์ง๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
content options (๋๊ดํธ ์๋ javascript ๊ฐ์ฒด ์์) ๋๋ compiler config ์ ํตํด ์ฌ์ฉ๋๋ ํ์ผ์์ ์ง์ ๊ตฌ์ฑ ์์.
<!--
stylify-components
container: 'max-width:800px margin:0__auto',
title: 'text-align:center margin-top:100px font-size:42px'
/stylify-components
-->
<template>
<div class="container">
<h1 class="title">Hello World!๐คฉ</h1>
</div>
</template>
๋ณ์
๊น๋ํ ์ฝ๋๊ฐ ๋ง์์ ๋ ๋ค๋ฉด ์ ํ๊ธฐ์์ ํ๋์ฝ๋ฉ๋ ๊ฐ๋ ํผํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. Variables์ ๊ตฌ์ฑ ์์์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค.
<!--
stylify-variables
titleFontSize: '42px',
containerWidth: '800px'
/stylify-variables
stylify-components
container: 'max-width:$containerWidth margin:0__auto',
title: 'text-align:center margin-top:100px font-size:$titleFontSize'
/stylify-components
-->
<template>
<div class="container">
<h1 class="title">Hello World!๐คฉ</h1>
</div>
</template>
์์ฐ์ ์ํ ๊ฑด๋ฌผ
yarn build
+ yarn preview
๋ฅผ ์คํํ๋ฉด vue ๋งํฌ์
์ด ๋ค์๊ณผ ๊ฐ์ด ์๋ง์ด ๋ฉ๋๋ค.<template>
<div class="_7tcrv">
<h1 class="_88io">Hello World!๐คฉ</h1>
</div>
</template>
CSS๋ ๋จ์ถ๋ฉ๋๋ค.
:root {--titleFontSize: 42px;--containerWidth: 800px;}
._bcda8,._7tcrv{max-width:800px}
._m0vnad,._7tcrv{margin:0 auto}
._1vegb8,._88io{text-align:center}
._jimir,._88io{margin-top:100px}
._qe393,._88io{font-size:42px}
ํ์ํ ๋ชจ๋ ๊ตฌ์ฑ
์์ ์์๋ Stylify๊ฐ ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ด ํฌํจ๋์ด ์์ง ์์ต๋๋ค.
ml:20px
์ ๊ฐ์ own macros ์ถ๊ฐ์์ธํ ๋ด์ฉ์ checkout the docs๋ก ๋ฌธ์ํ์ญ์์ค ๐.
์ฐ๋ฝ์ ์ ์งํ๋ค:
๐
๐
๐ stylifycss.com
๐
๐ medium.com/@8machy
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐Stylify CSS๋ก Vue.js ์น์ฌ์ดํธ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์คํ์ผ๋งํ์ธ์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/machy8/style-your-vuejs-website-faster-with-stylify-css-4g3mํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค