웹사이트의 UI 작성을 위하여 Buefy 와 tailwind css 를 적용하려 합니다. Buefy 나 tailwind css 중 하나를 적용하지 않고 두 개를 적용하는 이유는 다음의 스텝으로 UI 개발을 진행하기 위함입니다.
UI 컴포넌트는 기본적으로 Buefy의 컴포넌트 활용
전체 테마는 assets/scss/buefy/buefy-custom.scss에 buefy 변수 작성
1차 커스터마이징은 기본 제공되는 Buefy 컴포넌트의 property 활용
2차 커스터마이징은 tailwind.config.js에 정의한 tailwind css를 활용해 클래스로 작성
buefy 는 커스텀을 위한 가이드가 잘 되어 있습니다. 추후 디자이너의 요구사항을 잘 반영할 수 있도록, Buefy 커스텀 전용 SCSS 파일을 만들겠습니다.
Css 프리프로세서인 sass를 이용하기 위해 node-sass 와 sass-loader를 설치합니다.
npm install --save-dev node-sass sass-loader
assets 폴더 내 scss 폴더를 생성합니다. 프로젝트 진행시 css와 scss를 혼용하여 사용할 경우에 대비하여, scss 전용 폴더로 분리하였습니다.
assets/scss 폴더 내에 buefy 폴더를 만든 후, buefy-custom.scss 파일을 만들어 줍니다.
assets/scss 폴더 내 main.scss 파일을 만들어줍니다. main.scss 파일은 프로젝트 내 분리되어 있는 scss를 import 하는 역할을 담당하도록 하였습니다.
nuxt.config.js에 sass 사용하기 위한 파일을 등록합니다.
// nuxt.config.js
module.exports = {
// ...
css: [
'@/assets/scss/main.scss'
]
// ...
}
step2에서 만든 main.scss 에서는 다음과 같이 buefy-custom.scss 파일을 임포트합니다.
// assets/scss/main.scss
@import "./buefy/buefy-custom";
buefy-custom.scss 파일에서는 다음과 같이 buefy에서 제공하는 샘플 코드를 복사+붙여넣기 합니다.
// Import Bulma's core
@import '~bulma/sass/utilities/_all';
// Set your colors
$primary: #4c45ff;
$primary-invert: findColorInvert($primary);
$twitter: #4099ff;
$twitter-invert: findColorInvert($twitter);
// Setup $colors to use as bulma classes (e.g. 'is-twitter')
$colors: (
'white': (
$white,
$black
),
'black': (
$black,
$white
),
'light': (
$light,
$light-invert
),
'dark': (
$dark,
$dark-invert
),
'primary': (
$primary,
$primary-invert
),
'info': (
$info,
$info-invert
),
'success': (
$success,
$success-invert
),
'warning': (
$warning,
$warning-invert
),
'danger': (
$danger,
$danger-invert
),
'twitter': (
$twitter,
$twitter-invert
)
);
// Links
$link: $primary;
$link-invert: $primary-invert;
$link-focus-border: $primary;
// Import Bulma and Buefy styles
@import '~bulma';
@import '~buefy/src/scss/buefy';
간단하게 주요 색상(primary) 색상을 블랙(#000000)으로 바꿔보면, 색상이 정상적으로 반영됨을 확인할 수 있습니다.
buefy 는 가볍고 커스텀하기 쉽지만, 더 디테일한 커스텀을 위해서 tailwind css를 적용합니다. 컴포넌트를 직접 정의하려면 위의 buefy는 사용하지 않고, Tailwind css 만 적용하여 활용해도 됩니다.
npm install --save-dev @nuxtjs/tailwindcss
// nuxt.config.js
module.exports = {
// ...
buildModules: [
// ...
'@nuxtjs/tailwindcss'
],
tailwindcss: {
configPath: '~/config/tailwind.config.js',
cssPath: '~/assets/css/tailwind.css',
purgeCSSInDev: false,
exposeConfig: false
}
// ...
}
tailwind css는 style 정의 없이 클래스로 쉽게 스타일을 정의할 수 있습니다. 여기서 사용하진 않지만, Purge css 는 사용하지 않는 불필요한 css 를 제거해 주는데, 이로 인해 tailwind css가 적용되지 않을 수 있습니다. 이를 해결하기 위해, 아래와 같은 파일을 생성하여 코드를 작성해주어, purgecss 가 무시할 수 있도록 합니다.
// ~/assets/css/tailwind.css
/* purgecss start ignore */
@import 'tailwindcss/base';
@import 'tailwindcss/components';
/* purgecss end ignore */
@import 'tailwindcss/utilities';
tailwind.config.js 파일에 사용할 스타일 클래스들을 정의할 수 있습니다.
/*
Tailwind - The Utility-First CSS Framework
A project by Adam Wathan (@adamwathan), Jonathan Reinink (@reinink),
David Hemphill (@davidhemphill) and Steve Schoger (@steveschoger).
Welcome to the Tailwind config file. This is where you can customize
Tailwind specifically for your project. Don't be intimidated by the
length of this file. It's really just a big JavaScript object and
we've done our very best to explain each section.
View the full documentation at https://tailwindcss.com.
|-------------------------------------------------------------------------------
| The default config
|-------------------------------------------------------------------------------
|
| This variable contains the default Tailwind config. You don't have
| to use it, but it can sometimes be helpful to have available. For
| example, you may choose to merge your custom configuration
| values with some of the Tailwind defaults.
|
*/
// let defaultConfig = require('tailwindcss/defaultConfig')
/*
|-------------------------------------------------------------------------------
| Colors https://tailwindcss.com/docs/colors
|-------------------------------------------------------------------------------
|
| Here you can specify the colors used in your project. To get you started,
| we've provided a generous palette of great looking colors that are perfect
| for prototyping, but don't hesitate to change them for your project. You
| own these colors, nothing will break if you change everything about them.
|
| We've used literal color names ("red", "blue", etc.) for the default
| palette, but if you'd rather use functional names like "primary" and
| "secondary", or even a numeric scale like "100" and "200", go for it.
|
*/
module.exports = {
important: true,
// prefix: '',
// separator: ':',
theme: {
/*
|-----------------------------------------------------------------------------
| Colors https://tailwindcss.com/docs/colors
|-----------------------------------------------------------------------------
|
| The color palette defined above is also assigned to the "colors" key of
| your Tailwind config. This makes it easy to access them in your CSS
| using Tailwind's config helper. For example:
|
| .error { color: config('colors.red') }
|
*/
colors: {
primary: '#4c56ff'
}
}
}
tailwind.config.js가 제대로 적용되었는지 확인해보겠습니다.
Vue 파일 중 template 위치에 위에서 적용한 primary 를 텍스트해 적용해볼 수 있습니다.
<div class="text-primary">반갑습니다</div>