반응형
Vue 컴포넌트 내의 HTML에 적용되지 않는 CSS 스타일
다음을 사용하여 회전 텍스트 애니메이션을 작성하려고 합니다.Vue.js이 코드펜을 영감으로 삼았어요
나는 모든 것을 얻었다.
HMTL(즉, CodePen에서 언급한 바와 같이) 요소를 적절히 배치해야 합니다.요컨대:문제는 어떤 일이 있어도
CSS사용하고 있는 셀렉터, 타겟을 설정할 수 없습니다..in그리고..out수업할 때, 내가 하지 않는 한Developer Tools에Chrome:
여기 제 최소 코드가 있습니다.Vue Component:
<template>
<div id="app-loading">
<div class="words">
<span v-for="setting in settings" v-html="setting.lettersHTML" :id="setting.id" class="word"></span>
</div>
</div>
</template>
<script>
export default {
data() {
return {
settings: [
{ word: 'WordOne', id: 1, lettersArray: null, lettersHTML: null },
{ word: 'WordTwo', id: 2, lettersArray: null, lettersHTML: null }
],
currentWord: 1
}
},
created() {
this.splitLetters();
},
mounted() {
setInterval(this.changeWord, 1500);
},
methods: {
splitLetters() {
this.settings.forEach((setting) => {
let letters = [];
for (let i = 0; i < setting.word.length; i++) {
let letter = `<span class="letter">${ setting.word.charAt(i) }</span>`;
letters.push(letter);
}
setting.lettersArray = letters;
setting.lettersHTML = letters.join('');
});
},
changeWord() {
let current = document.getElementById(this.currentWord).getElementsByTagName('span');
let next = (this.currentWord == this.settings.length) ? document.getElementById(1).getElementsByTagName('span') : document.getElementById(this.currentWord + 1).getElementsByTagName('span');
// Animate the letters in the current word.
for (let i = 0; i < current.length; i++) {
this.animateLetterOut(current, i);
}
// Animate the letters in the next word.
for (let i = 0; i < next.length; i++) {
this.animateLetterIn(next, i);
}
this.currentWord = (this.currentWord == this.settings.length) ? 1 : this.currentWord + 1;
},
animateLetterOut(current, index) {
setTimeout(() => {
current[index].className = 'letter out';
}, index * 300);
},
animateLetterIn(next, index) {
setTimeout(() => {
next[index].className = 'letter in';
}, 340 + (index * 300));
}
}
}
</script>
<style lang="scss" scoped>
#app-loading {
font-size: 4rem;
}
.words, .word {
border: 1px solid rosybrown;
}
.letter {
text-decoration: underline; // Not working.
}
.letter.in {
color: red; // Not working.
}
.letter.out {
color: blue; // Not working.
}
</style>
무엇이 잘못되어 이러한 수업을 적용할 수 없게 되었습니까?
사용하고 있다v-html단, 스코프 스타일에서는 사용할 수 없습니다.
작성한 DOM 콘텐츠
v-html는 스코프 스타일의 영향을 받지 않지만 딥 셀렉터를 사용하여 스타일을 지정할 수 있습니다.
이 방법은 효과가 있었습니다.
<template>
<div class="a" v-html="content"></div>
</template>
<script>
export default {
data() {
return {
content: 'this is a <a class="b">Test</a>',
}
},
}
</script>
<style scoped>
.a ::v-deep .b {
color: red;
}
</style>
네.
v-module
스코프 스타일에서는 동작하지 않습니다.
Brock Rece가 v-html을 사용한 Scoped Styles 기사에서 설명한 바와 같이 다음과 같이 해결되어야 합니다.
<template>
<div class="a" v-html="content"></div>
</template>
<script>
export default {
data() {
return {
content: 'this is a <a class="b">Test</a>',
}
},
}
</script>
<style scoped>
.a >>> .b {
color: red;
}
</style>
언급URL : https://stackoverflow.com/questions/48331383/css-styles-not-being-applied-to-html-within-a-vue-component
반응형
'programing' 카테고리의 다른 글
| vue에서 inheritAttrs: false 및 $attrs는 무엇에 사용됩니까? (0) | 2022.07.28 |
|---|---|
| C에서 오류 관리를 위해 goto를 사용할 수 있습니까? (0) | 2022.07.28 |
| (방법) Vue.js 컴포넌트(TypeScript)에서 액세스 수식자(퍼블릭, 프라이빗 등)를 사용해야 합니까? (0) | 2022.07.28 |
| 멀티 스레드 환경에서 malloc은 어떻게 작동합니까? (0) | 2022.07.27 |
| 사용자가 로그인할 때 로그인 양식이 잠깐 나타납니다. 원인은 무엇입니까? (0) | 2022.07.27 |


