• Vue中的样式绑定


    我们将样式绑定分为两种:一种是通过style绑定,一种是通过class绑定

    样式绑定适用于 切换效果的实现,小规模用style,大规模用class

    style绑定样式

    这里需要用到v-bind指令,绑定style属性。在绑定的:style=" "引号中有三种写法。

    第一种:直接写对象字面量,对象的属性值取data中的数据。

    代码展示:

    1. <div id="box">
    2. <button @click="changecolor">点击切换文字颜色button>
    3. <div :style="{color:color}">测试文字div>
    4. div>
    5. <script>
    6. new Vue({
    7. el:"#box",
    8. data:{
    9. color:"red",
    10. flag:false
    11. },
    12. methods: {
    13. changecolor(){
    14. this.flag=!this.flag
    15. if (this.flag) {
    16. this.color="yellow"
    17. }else{
    18. this.color="red"
    19. }
    20. }
    21. },
    22. })
    23. script>

    第一个color是要改变的属性,第二个是我们data中设置的属性名,对应取数据。如果我们将style中第二个参数加上引号那么就会变成字符串,直接就把作为属性值,就如我们直接改为"blue",标签能得内容就变为蓝色。

    第二种在data中声明对象:

    1. "box">
    2. <button @click="changecolor">点击切换文字颜色button>
    3. <div :style="obj">测试文字div>
  • <script>
  • new Vue({
  • el:"#box",
  • data:{
  • color:"red",
  • flag:false,
  • obj:{
  • color:"red"
  • }
  • },
  • methods: {
  • changecolor(){
  • this.flag=!this.flag
  • if (this.flag) {
  • this.obj.color="yellow"
  • }else{
  • this.obj.color="red"
  • }
  • }
  • },
  • })
  • script>
  • 第三种:在:style=""中写数组,这种方法综合前面了两种,可以两种形式都写在数组中,我们来给这个元素多加点样式:

    1. <div id="box">
    2. <button @click="changecolor">点击切换文字颜色button>
    3. <div :style="[size,bc,color,{width:width}]">测试文字div>
    4. div>
    5. <script>
    6. new Vue({
    7. el:"#box",
    8. data:{
    9. color:"red",
    10. flag:false,
    11. size:{
    12. fontSize:"50px"
    13. },
    14. bc:{
    15. backgroundColor:"gray"
    16. },
    17. color:{
    18. color:"red"
    19. },
    20. width:"100px"
    21. },
    22. methods: {
    23. changecolor(){
    24. this.flag=!this.flag
    25. if (this.flag) {
    26. this.color.color="yellow"
    27. }else{
    28. this.color.color="red"
    29. }
    30. }
    31. },
    32. })
    33. script>

    最终效果:点击就能使文字变色

     

     class绑定样式

    通过改变类名来实现页面变换效果,:class=""中,引号内也是有三种写法

    第一种:直接写表达式,为data中的属性

    代码:

    1. <style>
    2. .box1{
    3. width: 100px;
    4. height: 100px;
    5. background-color: blueviolet;
    6. }
    7. .box2{
    8. width: 50px;
    9. height:50px;
    10. background-color: green;
    11. }
    12. style>
    13. <div id="box">
    14. <button @click="change">点击改变模块button>
    15. <div :class="mode">测试文字div>
    16. div>
    17. <script>
    18. new Vue({
    19. el:"#box",
    20. data:{
    21. mode:"box1",
    22. flag:false
    23. },
    24. methods: {
    25. change(){
    26. this.flag=!this.flag
    27. if (this.flag) {
    28. this.mode="box2"
    29. }else{
    30. this.mode="box1"
    31. }
    32. }
    33. },
    34. })
    35. script>

    效果:

    初始状态:                                                                     

    点击后:

     

    第二种写成对象,与style中写的对象有一点区别。在这种class属性绑定中对象的属性值为布尔值,当为true时,该属性值的属性为类名成立,反之不成立。

    代码展示:

    1. <style>
    2. .box1{
    3. width: 100px;
    4. height: 100px;
    5. background-color: blueviolet;
    6. }
    7. .box2{
    8. width: 50px;
    9. height:50px;
    10. background-color: green;
    11. }
    12. .box3{
    13. font-size: 20px;
    14. color: red;
    15. line-height: 50px;
    16. }
    17. style>
    18. <div id="box">
    19. <div :class="{box1:isb,box3:isbo}">测试文字div>
    20. div>
    21. <script>
    22. new Vue({
    23. el:"#box",
    24. data:{
    25. isb:true,
    26. isbo:true
    27. },
    28. })
    29. script>

    效果:

     这种方式对象的属性值会在data数据中去匹配,如果我们不需要改变当前类名时我们可以在行内直接将其写成true或者false,也是同样成立的。如:

    测试文字
    这时box3类名就不存在div

    第三种方式:class=""中写数组,数组内每一项可以写不同的形式,是前面的综合,这种形式我们平时都不会用,用的最多的就是写表达式。

    代码展示:

    1. <style>
    2. .box1{
    3. width: 100px;
    4. height: 100px;
    5. background-color: blueviolet;
    6. }
    7. .box2{
    8. width: 50px;
    9. height:50px;
    10. background-color: green;
    11. }
    12. .box3{
    13. font-size: 20px;
    14. color: crimson;
    15. }
    16. .box4{
    17. margin: 0 auto;
    18. }
    19. style>
    20. <div id="box">
    21. <button @click="change">点击改变模块button>
    22. <div :class="mode">测试文字div>
    23. <div :class="['box3',{box2:isb},model]">arrdiv>
    24. div>
    25. <script>
    26. new Vue({
    27. el:"#box",
    28. data:{
    29. mode:"box1",
    30. flag:false,
    31. isb:true,
    32. isbo:true,
    33. model:"box4"
    34. },
    35. methods: {
    36. change(){
    37. this.flag=!this.flag
    38. if (this.flag) {
    39. this.mode="box2"
    40. }else{
    41. this.mode="box1"
    42. }
    43. }
    44. },
    45. })
    46. script>

    效果:

     

  • 相关阅读:
    Flutter TextField示例
    LeetCode_前缀和_滑动窗口_中等_930.和相同的二元子数组
    企业AAA信用等级办理好处,认证流程
    Windows10中安装 docker desktop 报错:【WSL 2 installation is incomplete.】
    黄菊华老师,Java Servlet毕业设计毕设辅导课(5):Servlet配置虚拟路径映射
    Glide源码分析
    Windows11 安装配置 JDK 和 Maven
    [附源码]计算机毕业设计微录播室预约管理系统Springboot程序
    Bomb Lab!!!
    TCP拥塞控制,拥塞窗口,携带应答,捎带应答,面向字节流,异常情况处理,最终完结弹
  • 原文地址:https://blog.csdn.net/m0_59345890/article/details/126599840