vue ์์ v-deep ์ด๋?
๐ ์ปดํฌ๋ํธ์ scoped ์ ์ธ
์ฌ๋ด์์ vuetify
๋ก ๊ตฌ์ฑ๋ ์ผ๋ถ ํ๋ฉด์ ๋ค๋ฃฐ ์ผ์ด ์๊ฒผ๋๋ฐ
vuetify
์์ ์ ๊ณต๋๋ ์ปดํฌ๋ํธ์ ์คํ์ผ ์ง์ ์ด ๋ป๋๋ก ๋์ง ์์ ๋๊ฐ ๋ฐ์ํ๊ณค ํฉ๋๋ค.
์ด๋ด ๋ ๋ค์๊ณผ ๊ฐ์ด scoped
์ ์ธ ์์ด ์คํ์ผ์ ๋ฎ์ด ์์ฐ๋ฉด ํด๊ฒฐ๋๋ ๊ฒฝ์ฐ๋ ์์ง๋ง
์ด ๊ฒฝ์ฐ ์ ์ญ์ ์ผ๋ก ํด๋น ์คํ์ผ์ด ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ข์ง ์์ ๋ฐฉ๋ฒ์ ๋๋ค.
// BAD !
<style>
.some-style { /** */ }
<style>
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ scoped
๋ฅผ ํด์น์ง ์๊ณ ์์ ์ปดํฌ๋ํธ์ ์คํ์ผ์ ์ง์ ํ ์ ์์๊น์?
๊ฐ๋ฐ์๊ฐ ๊ตฌํํ ์์ ์ปดํฌ๋ํธ๋ผ๋ฉด ํด๋น ์ปดํฌ๋ํธ๊ฐ ์ ์ธ๋ ๋ถ๋ถ์์ ์์ ์ ํ๋ฉด ๋๊ฒ ์ง๋ง,
vuetify
์ ๊ฐ์ด ๋ฒ๋ค๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฒ์ ์ฝ์ง ์์ ์ผ์
๋๋ค.
์ด๋ด ๋ vue
์์ ์ ๊ณตํ๋ ๋ฅ ์
๋ ํฐ
์ธ v-deep
์ ํ์ฉํ๋ฉด ๋ฉ๋๋ค.
๐ v-deep ์ ํตํด ์์ ์ปดํฌ๋ํธ ์คํ์ผ ๋ณ๊ฒฝํ๊ธฐ
Vue ์์ ์ ๊ณตํ๋ ๋ฅ ์
๋ ํฐ
๋ ์ด 3๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
// #1
<style scoped>
.a >>> .b { /* ... */ }
</style>
// #2
<style scoped>
.a::v-deep .b { /* ... */ }
</style>
// #3
<style scoped>
.a /deep/ .b { /* ... */ }
</style>
sass
์ ๊ฐ์ ์ผ๋ถ CSS ์ ์ฒ๋ฆฌ ํ๊ฒฝ์์๋ >>>
๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ์ง ์์ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ์๋ ๋๋ฒ์งธ๋ ์ธ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
๐ v-deep ์ ์ด์ฉํด์ v-html ์คํ์ผ ๋ค๋ฃจ๊ธฐ
v-html
๋ก ์ ์ธ๋ HTML ๋งํฌ์
์ scoped
์คํ์ผ ์ ์ฉ์ด ์๋ฉ๋๋ค.
์ด๋ v-deep
์ ์ด์ฉํ๋ฉด ์คํ์ผ์ ์ ์ฉํ ์ ์์ต๋๋ค.
<template>
<div>
<div v-html="htmlData" />
</div>
</template>
<script lang="ts">
// ...
export default class Index extends Vue {
private htmlData = '<p class="red">Hello World!</p>'
}
</script>
<style lang="scss" scoped>
div::v-deep .red {
color: red;
}
</style>
๐ ์ฐธ๊ณ ์๋ฃ
์์ ์ปดํฌ๋ํธ์ CSS(SCSS)๋ฅผ ์ ์ํ ์ ์๋ ๋ฅ์ ๋ ํฐ(v-deep) ์ค์ ํ๋ ๋ฐฉ๋ฒ
'๐ archive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] Error Boundary ๋ก ์๋ฌ ํธ๋ค๋งํ๊ธฐ (0) | 2022.02.20 |
---|---|
[Vue.js] ํจ์ํ ์ปดํฌ๋ํธ ์ด๋ชจ์ ๋ชจ (0) | 2022.02.20 |
[Vue.js] mixin ์ฝ๋ ์คํ์ผ ๊ฐ์ด๋ (0) | 2022.02.20 |
[Vue.js] v-model ์์ฑ๊ณผ @Model ๋ฐ์ฝ๋ ์ดํฐ์ ๊ดํด์ (0) | 2022.02.20 |
[Vue.js] Vue ์์ ๋น๋๊ธฐ ์์ฒญ์ ์ธ์ ํ๋ ๊ฒ์ด ์ข์๊น? (0) | 2022.02.20 |
๐ฌ ๋๊ธ