클래스 및 스타일 바인딩
Directory
HTML 클래스 바인딩
객체 구문
객체를 v-bind:class
에 전달하여 클래스를 동적으로 전환할 수 있습니다. v-bind:class
一个对象,以动态地切换 class:
<div v-bind:class="{ active: isActive }"></div>
上面的语法表示 active
这个 class 存在与否将取决于数据属性 isActive
的 truthiness。
你可以在对象中传入更多属性来动态切换多个 class。此外,v-bind:class
指令也可以与普通的 class 属性共存。当有如下模板:
<div class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }" ></div>
和如下 data:
data: { isActive: true, hasError: false }
结果渲染为:
<div class="static active"></div>
当 isActive
或者 hasError
变化时,class 列表将相应地更新。例如,如果 hasError
的值为 true
,class 列表将变为 "static active text-danger"
。
绑定的数据对象不必内联定义在模板里:
<div v-bind:class="classObject"></div>
data: { classObject: { active: true, 'text-danger': false } }
渲染的结果和上面一样。我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式:
<div v-bind:class="classObject"></div>
data: { isActive: true, error: null }, computed: { classObject: function () { return { active: this.isActive && !this.error, 'text-danger': this.error && this.error.type === 'fatal' } } }
数组语法
我们可以把一个数组传给 v-bind:class
,以应用一个 class 列表:
<div v-bind:class="[activeClass, errorClass]"></div>
data: { activeClass: 'active', errorClass: 'text-danger' }
渲染为:
<div class="active text-danger"></div>
如果你也想根据条件切换列表中的 class,可以用三元表达式:
<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
这样写将始终添加 errorClass
,但是只有在 isActive
是 truthy[1] 时才添加 activeClass
<div v-bind:class="[{ active: isActive }, errorClass]"></div>위 구문은
active
이 클래스는 isActive에 따라 달라집니다. target="_blank">진실.
객체에 더 많은 속성을 전달하여 여러 클래스를 동적으로 전환할 수 있습니다. 또한 v-bind:class
지시어는 일반 클래스 속성과 공존할 수 있습니다. 다음 템플릿이 있는 경우:
Vue.component('my-component', { template: '<p class="foo bar">Hi</p>' })및 다음 데이터: 🎜
<my-component class="baz boo"></my-component>🎜결과는 다음과 같이 렌더링됩니다. 🎜
<p class="foo bar baz boo">Hi</p>🎜
isActive
또는 hasError
가 변경되면 클래스 목록 그에 따라 업데이트됩니다. 예를 들어 hasError
가 true
로 평가되면 클래스 목록은 "static active text-danger"
가 됩니다. 🎜🎜바운드 데이터 개체는 템플릿에서 인라인으로 정의될 필요가 없습니다. 🎜<my-component v-bind:class="{ active: isActive }"></my-component>
<p class="foo bar active">Hi</p>🎜렌더링 결과는 위와 동일합니다. 반환된 객체의 계산 속성 🎜을 여기에 바인딩할 수도 있습니다. 이는 일반적이고 강력한 패턴입니다. 🎜
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: { activeColor: 'red', fontSize: 30 }🎜🎜🎜
🎜🎜array 구문🎜🎜🎜🎜배열을 v-bind:class
에 전달할 수 있습니다. 클래스 목록을 적용하려면: 🎜
<div v-bind:style="styleObject"></div>
data: { styleObject: { color: 'red', fontSize: '13px' } }🎜는 다음과 같이 렌더링됩니다: 🎜
<div v-bind:style="[baseStyles, overridingStyles]"></div>🎜 조건에 따라 목록의 클래스를 전환하려는 경우 삼항 표현식을 사용할 수 있습니다. 🎜
<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>🎜 이와 같이 작성하면 항상
가 추가됩니다. errorClass code>, 그러나 isActive
가 진실인 경우에만 activeClass를 추가하세요[1] 🎜코드>. 🎜🎜그러나 조건부 클래스가 여러 개인 경우 이렇게 작성하는 것은 약간 번거롭습니다. 따라서 객체 구문은 배열 구문에도 사용할 수 있습니다: 🎜rrreee🎜🎜🎜구성 요소에 사용됨
이 장에서는 사용자가 이미 Vue 구성 요소에 대해 어느 정도 이해하고 있다고 가정합니다. 물론 여기를 건너뛰고 나중에 다시 돌아올 수도 있습니다.
사용자 정의 구성 요소에서 class
속성을 사용하면 이러한 클래스가 구성 요소의 루트 요소에 추가됩니다. 이 요소에 이미 존재하는 클래스는 덮어쓰지 않습니다. class
属性时,这些 class 将被添加到该组件的根元素上面。这个元素上已经存在的 class 不会被覆盖。
例如,如果你声明了这个组件:
rrreee然后在使用它的时候添加一些 class:
rrreeeHTML 将被渲染为:
rrreee对于带数据绑定 class 也同样适用:
rrreee当 isActive
为 truthy[1] 时,HTML 将被渲染成为:
rrreee
绑定内联样式
对象语法
v-bind:style
的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名:
rrreeerrreee直接绑定到一个样式对象通常更好,这会让模板更清晰:
rrreeerrreee同样的,对象语法常常结合返回对象的计算属性使用。
数组语法
v-bind:style
的数组语法可以将多个样式对象应用到同一个元素上:
rrreee
自动添加前缀
当 v-bind:style
使用需要添加浏览器引擎前缀的 CSS 属性时,如 transform
,Vue.js 会自动侦测并添加相应的前缀。
多重值
2.3.0+
从 2.3.0 起你可以为 style
绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:
rrreee这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex
。
译者注
[1] truthy 不是 true
예를 들어, 이 구성 요소를 rrreee
로 선언하고 이를 사용할 때 일부 클래스를 추가하면 rrreee
HTML은 다음과 같이 렌더링됩니다.
rrreee데이터 바인딩이 있는 클래스에도 동일하게 적용됩니다.
rrreee🎜When < code>isActive
가 진실[1]🎜이면 HTML은 다음과 같이 렌더링됩니다: 🎜rrreee🎜🎜🎜🎜인라인 스타일 바인딩🎜🎜
객체 구문 🎜🎜🎜🎜v-bind:style
의 객체 구문은 매우 직관적입니다. CSS와 매우 유사해 보이지만 실제로는 JavaScript 객체입니다. . CSS 속성 이름은 camelCase 또는 kebab-case로 명명할 수 있습니다(따옴표로 묶어야 함): 🎜rrreeerrreee🎜 일반적으로 템플릿을 더 명확하게 만드는 스타일 객체에 직접 바인딩하는 것이 더 좋습니다: 🎜rrreeerrreee🎜마찬가지로 객체 구문은 다음과 같습니다. 객체를 반환하는 계산된 속성과 함께 사용되는 경우가 많습니다. 🎜🎜🎜🎜🎜🎜Array Grammar🎜🎜🎜🎜v-bind:style
의 배열 구문은 동일한 요소에 여러 스타일 개체를 적용할 수 있습니다. : 🎜rrreee🎜🎜🎜