一、Vue3 Class 绑定
1.Vue3 Class 绑定基础
数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。我们可以使用
v-bind
将它们和动态的字符串绑定。除了字符串外,表达式的值也可以是对象或数组。
绑定对象:
如下:
<scriptsetuplang="ts">import { ref } from'vue'const isClassOne = ref(true)
</script><template><div><div:class="{ classOne: isClassOne }"></div></div></template><stylescoped></style>
页面最终渲染结果为:
<divclass="classOne"></div>
上面的语法表示 classOne 是否存在取决于数据属性 isClassOne 的真假值。
我们可以在对象中写一个或多个字段来操作一个或多个 class。此外,
:class
指令也可以和一般的
class
属性共存。
如下:
<scriptsetuplang="ts">import { ref } from"vue";
const isClassOne = ref(true);
const isClassTwo = ref(false);
</script><template><div><div:class="{ classOne: isClassOne, classTwo: isClassTwo }"class="static"></div></div></template><stylescoped></style>
页面最终渲染结果为:
<divclass="classOne static"></div>
注:当isClassOne和isClassTwo值改变时,class 列表会随之更新
绑定的对象并非一定写成内联字面量的形式,亦可以直接绑定一个对象或者绑定一个返回对象的计算属性
如下:
<scriptsetuplang="ts">import { ref, reactive, computed } from"vue";
const isClassOne = ref<boolean>(true);
const isClassTwo = ref<boolean>(false);
const oneClassObj = reactive({
objOne: true,
objTwo: true,
});
const classObject = computed(() => ({
classOne: isClassOne.value == true,
classTwo: isClassTwo.value == true,
}));
</script><template><div><div:class="{ classOne: isClassOne, classTwo: isClassTwo }"class="static"></div><div:class="oneClassObj"></div><div:class="classObject"></div></div></template><stylescoped></style>
页面最终渲染结果为:
<divclass="classOne static"></div><divclass="objOne objTwo"></div><divclass="classOne"></div>
绑定数组
可以给
:class
绑定一个数组来渲染多个 CSS class
绑定的数组并非一定写成内联字面量的形式,亦可以直接绑定一个数组或者绑定一个返回数组的计算属性
如下:
<scriptsetuplang="ts">import { ref, reactive, computed } from"vue";
const isClassOne = ref<string>("classOne");
const isClassTwo = ref<string>("classTwo");
const oneClassArr = reactive<Array<string>>(["classOneArr", "classTwoArr"]);
const classArr = computed<Array<string>>(() => {
let oneArr = ["classOneArr", "classTwoArr"];
return oneArr;
});
</script><template><div><div:class="[isClassOne, isClassTwo]"></div><div:class="oneClassArr"></div><div:class="classArr"></div></div></template><stylescoped></style>
页面最终渲染结果为:
<divclass="classOne classTwo"></div><divclass="classOneArr classTwoArr"></div><divclass="classOneArr classTwoArr"></div>
如果数组中有条件地渲染某个 class,可以使用三元表达式或者在数组中嵌套对象。
如下:
<scriptsetuplang="ts">import { ref } from"vue";
const isClassOne = ref<boolean>(false);
</script><template><div><div:class="[isClassOne ? 'classOne' : '', 'classTwo']"></div><div:class="[{ classOne: isClassOne }, 'classTwo']"></div></div></template><stylescoped></style>
页面最终渲染结果为:
<divclass="classTwo"></div><divclass="classTwo"></div>
classTwo 会一直存在,但 classOne 只会在 isClassOne 为真时才存在。
二、Vue3 Style 绑定
1.Vue3 Style 绑定基础
绑定对象:
:style
支持绑定 JavaScript 对象值,对应的是HTML 元素的 style 属性
推荐使用 camelCase,但
:style
也支持 kebab-cased 形式的 CSS 属性 key (对应其 CSS 中的实际名称)
如下:
<scriptsetuplang="ts">import { ref } from"vue";
const oneColor = ref<string>("red");
const oneFontSize = ref<number>(30);
const oneBgc = ref<string>("yellow");
</script><template><div><div:style="{
color: oneColor,
fontSize: oneFontSize + 'px',
'background-color': oneBgc,
}"
>
123
</div></div></template><stylescoped></style>
页面最终渲染结果为:
<divstyle="color: red; font-size: 30px; background-color: yellow;"> 123 </div>
除此外,亦可以直接绑定一个样式对象或返回样式对象的计算属性
绑定数组:
可以给
:style
绑定一个包含多个样式对象的数组。这些对象会被合并后渲染到同一元素上。
如下:
<scriptsetuplang="ts">import { reactive } from"vue";
const oneStyleObj = reactive({
color: "red",
fontSize: "30px",
});
const twoStyleObj = reactive({
"background-color": "yellow",
});
</script><template><div><div:style="[oneStyleObj, twoStyleObj]">123</div></div></template><stylescoped></style>
页面最终渲染结果为:
<divstyle="color: red; font-size: 30px; background-color: yellow;"> 123 </div>
自动前缀 :
当在
:style
中使用了需要浏览器特殊前缀的 CSS 属性时,Vue 会自动为他们加上相应的前缀。Vue 是在运行时检查该属性是否支持在当前浏览器中使用。如果浏览器不支持某个属性,那么将尝试加上各个浏览器特殊前缀,以找到哪一个是被支持的。
样式多值:
可以对一个样式属性提供多个 (不同前缀的) 值
如下:
<div:style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>
数组仅会渲染浏览器支持的最后一个值。在这个示例中,在支持不需要特别前缀的浏览器中都会渲染为
display: flex
。
有问题可以在下面评论,我会为大家解答,如果此文对大家有帮助,欢迎大家点点关注啊,博主在此感谢
版权归原作者 samxiaoguai 所有, 如有侵权,请联系我们删除。