vue 3 - class & style
๐ vue 3 - class & style
composition API๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค
โ ํด๋์ค ๋ฐ์ธ๋ฉ
๊ฐ์ฒด ๋ฐ์ธ๋ฉ
์๋ ์ฝ๋ isActive์ Boolean๊ฐ์ ์ํด active ํด๋์ค๊ฐ ๊ฒฐ์ ๋๋ค
<div :class="{ active: isActive }"></div>
const isActive = ref(true)
// ๋ค์๊ณผ ๊ฐ์ด ๋๋๋ง ๋๋ค
<div class="active"></div>
computed
์ผ๋ฐ์ ์ผ๋ก๋ ๊ฐ๋ ์ฑ ๋ฐ ์ฌ์ฌ์ฉ์ฑ์ ์ํด ๊ณ์ฐ๋ ๊ฐ์ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค
<div :class="classObject">classObject</div>
const isActive = ref(true)
const error = ref(null)
const classObject = computed(() => ({
active: isActive.value && !error.value,
'text-error': error.value
}))
component
์ปดํฌ๋ํธ์ class ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ ๋ฃจํธ ์๋ฆฌ๋จผํธ์ ๊ธฐ์กด ํด๋์ค์ ๋ณํฉ๋๋ค
<!-- ์์ ์ปดํฌ๋ํธ์ ํ
ํ๋ฆฟ -->
<p class="foo bar">์๋
!</p>
<!-- ์ปดํฌ๋ํธ๊ฐ ์ฌ์ฉ๋ ๋ -->
<MyComponent class="baz boo" />
<!-- ์๋์ฒ๋ผ ๋๋๋ง๋๋ค -->
<p class="foo bar baz boo">์๋
!</p>
์ปดํฌ๋ํธ ๋ด๋ถ์ ์์๋ค์ class๋ฅผ ์ ๋ฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ $attrs๋ฅผ ์ฌ์ฉํ๋ค
// MyComponent
<div>
<p :class="$attrs.class">์๋
!</p>
<span>๋ฐ๊ฐ์!</span>
</div>
// app
<MyComponent class="hello" />
// ์๋์ฒ๋ผ ๋๋๋ง๋๋ค
<div>
<p class="hello">์๋
!</p>
<span>๋ฐ๊ฐ์!</span>
</div>
โ ์คํ์ผ ๋ฐ์ธ๋ฉ
:style ๋๋ ํฐ๋ธ๋ฅผ ํตํด ์ธ๋ผ์ธ ์คํ์ผ ๋ฐ์ธ๋ฉ์ด ๊ฐ๋ฅํ๋ค
const styleObject = reactive({
color: 'red',
fontSize: '20px'
})
<div :style="styleObject">styleObject</div>
์คํฌ๋ฆฝํธ ๋จ์์์ ์คํ์ผ๋ง์ ์ง์ํ๋ ์คํฌ๋กค ์ด๋ฒคํธ ๋ฑ ๋์ ์ธ ๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค
์ ๋์ฌ ์๋์์ฑ
ํด๋น ๋ธ๋ผ์ฐ์ ์์ ์ง์๋์ง ์๋ CSS ์์ฑ์ด :style์ ์ฌ์ฉ๋๋ฉด,
์๋์ผ๋ก ํด๋น ์์ฑ๊ณผ **๋ฒค๋ ์ ๋์ฌ**๊ฐ ์กฐํฉ๋ ์ฌ๋ฌ ๊ฐ์ ์์ฑ์ ํ ์คํธํ๊ณ ์ง์๋๋ ์์ฑ์ ์ฐพ์์ ์ถ๊ฐํ๋ค
// ์คํ์ผ ์์ฑ์ ๋ค์ค ๊ฐ์ ๋ฐฐ์ด๋ก ์ถ๊ฐํ ์ ์๋ค
<div :style="{ display: ['flex', '-webkit-box', '-ms-flexbox', '-moz-flexbox'] }"></div>
์ด ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ ๋ฐฐ์ด ๋ด ๋ง์ง๋ง ๊ฐ์ ๋ ๋๋ง ํ๋ค
๋ง์ฝ ๋ธ๋ผ์ฐ์ ๊ฐ flex์ -webkit-box ์์ฑ๋ง ์ง์ํ๋ค๋ฉด, flex๋ผ๋ ํ์ค ์์ฑ ๊ฐ์ด ์์ด๋ display: -webkit-box๋ฅผ ๋ ๋๋ง ํ๋ค
๋ถํ์ํ ์์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด์ ์์ ํ ๋ธ๋ผ์ฐ์ ์ ๋ง๋ ๋ฒค๋ ์ ๋์ฌ๋ฅผ ์ ์ถ๊ฐํ๋๋ก ํ์
https://v3-docs.vuejs-korea.org/guide/essentials/class-and-style.html