专业编程基础技术教程

网站首页 > 基础教程 正文

第6天 | 14天搞定Vue3.0,样式绑定,漂亮就是好

ccvgpt 2024-08-02 11:56:18 基础教程 14 ℃

在这个看颜值的时代,美,真的太重要了。为了方便CSS美好HTML的美,Vue3.0特意提供了操作元素的class和内联样式的指令。因为它们都是元素,所以我们可以用v-bind进行处理。

由于字符串拼接麻烦且易错,所有Vue3.0在v-bind用于class和 style时,做了专门的增强,表达式结果的类型除了字符串之外,还可以是对象或数组。

第6天 | 14天搞定Vue3.0,样式绑定,漂亮就是好

6.1 Class指令

Vue用v-bind:class(简写为:class)指令,用于解决动态切换class的需求。如果你不清楚用在什么哪方面的需求,就想一下提示信息的应用,在错误发生时,用红色字体,否则用绿色。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Vue3.0 class指令</title>
    <script src="vue.global.js"></script>
    <style>
        .b {
            font-weight: bold;
        }

        .error {
            color: red;
        }
    </style>
</head>
<body>
<span id="app">
<h1 class="b" :class="{ 'error': hasError }">老陈帅不?
    如果你说不帅,我就用红色字体,亮瞎你的眼。</h1>
</span>
<script>
    Vue.createApp({
        data() {
            return {
                hasError: true
            }
        }
    }).mount("#app")
</script>
</body>
</html>

渲染结果(生成的代码)

<h1 class="b error">老陈帅不? 如果你说不帅,我就用红色字体,亮瞎你的眼。</h1>

输出结果

如果你想同时满足多个class,你可以用class的数组语法。这个语法,可读性更强一些。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Vue3.0 class指令</title>
    <script src="vue.global.js"></script>
    <style>
        .b {
            font-weight: bold;
        }

        .big-text {
            font-size: 60px;
        }

        .error {
            color: red;
        }
    </style>
</head>
<body>
<span id="app">
<p class="b" :class="[fontSize, errorInfo]">
    程序员<br/>
    除了会编程之外,还会什么?<br/>
    当然是敲代码了。
</p>
</span>
<script>
    Vue.createApp({
        data() {
            return {
                fontSize: 'big-text',
                errorInfo: 'error'
            }
        }
    }).mount("#app")
</script>
</body>
</html>

渲染结果(生成的代码)

<span id="app"><p class="b big-text error"> 程序员<br> 
  除了会编程之外,还会什么?<br> 当然是敲代码了。 </p></span>

输出结果

如果你纠结该用红色字体表明不帅,还是用蓝色字体表明帅的话,那你可以用三元表达式,根据条件切换列表中的class。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Vue3.0 class指令</title>
    <script src="vue.global.js"></script>
    <style>
        .b {
            font-weight: bold;
            font-size: 50px;
        }

        .yes {
            color: #008CBA;
        }

        .no {
            color: red;
        }
    </style>
</head>
<body>
<span id="app">
<p class="b" :class="[isCool ? 'yes' :'no']">
    老陈帅不?帅的,蓝色字体代表我的心。
</p>
</span>
<script>
    Vue.createApp({
        data() {
            return {
                isCool: true
            }
        }
    }).mount("#app")
</script>
</body>
</html>

输出结果

6.2 内联样式

在HTML中,在元素上用style的话,结果是不可改变的,为此Vue3.0加上了:style指令。注意,你别看这个指令看起来十分直观,看着非常像CSS,但其实是一个 JavaScript 对象来的。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Vue3.0 style指令</title>
    <script src="vue.global.js"></script>
</head>
<body>
<span id="app">
<p :style="{ color: textColor, fontSize: fontSize + 'px' }">
    程序员,除了你之外,都是美的,哈哈~
</p>
</span>
<script>
    Vue.createApp({
        data() {
            return {
                textColor: '#008CBA',
                fontSize: 50
            }
        }
    }).mount("#app")
</script>
</body>
</html>

输出结果


如果你觉得这种方式不好,伤了你的心,那你可以用样式对象的方式。这样的写法,是不是更舒服了一些,输出结果和上面是一模一样的。

<span id="app">
<p :style="styleOj">
    程序员,除了你之外,都是美的,哈哈~
</p>
</span>
<script>
    Vue.createApp({
        data() {
            return {
                styleOj: {
                    color: '#008CBA',
                    fontSize: '50px'
                }
            }
        }
    }).mount("#app")
</script>

既然class可以用数组语法,:style当然也可以。:style的数组语法可以将多个样式对象应用到同一个元素上。输出结果和上面的还是一样的,我就不重复粘贴了。

<span id="app">
<p :style="[textColor, fontSize]">
    程序员,除了你之外,都是美的,哈哈~
</p>
</span>
<script>
    Vue.createApp({
        data() {
            return {
                textColor: {
                    color: '#008CBA',
                },
                fontSize: {
                    'font-size': '50px'
                }
            }
        }
    }).mount("#app")
</script>

好了,有关Vue3.0样式绑定的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我在分享Python,前端、Java和App方面的干货。关注我,没错的。

#前端##Vue.js##程序员##Web##JavaScript#

Tags:

最近发表
标签列表