๐ŸŽจFrontEnd/Vue

vue 3 - class & style

IOTrue 2023. 7. 11. 01:03

๐Ÿ˜Ž 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