首页 > 其他分享 >vue中如何使用定义好的变量设置css样式

vue中如何使用定义好的变量设置css样式

时间:2022-10-10 14:00:58浏览次数:57  
标签:vue 王小虎 样式 普陀区 table border css

前言

在做项目的时候,通常会遇到需要在 HTML 标签上绑定变量来设置样式,对于这种需求,共有两种情况。

实现

第一种情况

如果是对于代码中实实在在存在的 HTML 标签,我们可以直接绑定变量来设置样式,比如改变表格的边框。

  • 先设置一个表格边框样式的 JS 变量(table_border)。

  • 再在 HTML 标签的 style 属性上绑定该 JS 变量。

    <template>
      <div class="app-container">
        <template>
          <el-table
            :data="tableData"
            :
          >
            <el-table-column
              prop="date"
              label="日期"
              width="180"
            />
            <el-table-column
              prop="name"
              label="姓名"
              width="180"
            />
            <el-table-column
              prop="address"
              label="地址"
            />
          </el-table>
        </template>
      </div>
    </template>
    <script>
    export default {
      data() {
        return {
          // 表格数据
          tableData: [{
            date: '2016-05-02',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            date: '2016-05-04',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1517 弄'
          }, {
            date: '2016-05-01',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1519 弄'
          }, {
            date: '2016-05-03',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1516 弄'
          }],
          table_border: 'border: 1px solid red'// 设置表格边框样式
        }
      }
    }
    </script>

效果如下:

vue中如何使用定义好的变量设置css样式

第二种情况

如果我想手动改变表格表头的边框颜色,有时候由于一些 UI 框架的组件是封装好的,实际的 HTML 标签代码中并不能直接设置,这时候就需要在 css 中进行设置,那么怎么在 css 中使用变量呢。

 语法

首先,我们要搞明白在 css 中如何声明一个 css 变量,如下:

--color: red

如何使用该 css 变量,如下:

.className{
    color: var(--color)
}
方法一

基于以上语法,我们来实现设置表格表头的边框,如下:

  • 先设置样式,一个表格边框样式的 JS 变量(table_border)及一个表头边框样式的 JS 变量(table_header_border)。

  • 再在 computed 中定义一个参数(setStyles),其返回值为 css 样式集。其中键为 css 变量名,值为 css 样式属性值。

  • 将该参数(setStyles)绑定到 HTML 标签的 Style 属性上。

  • 最后在 style 中使用,找到需要改变或者设置样式的 HTML 标签的 className,将 css 变量进行绑定即可。

 

<template>
  <div class="app-container">
    <template>
      <el-table
        :data="tableData"
        :
      >
        <el-table-column
          prop="date"
          label="日期"
          width="180"
        />
        <el-table-column
          prop="name"
          label="姓名"
          width="180"
        />
        <el-table-column
          prop="address"
          label="地址"
        />
      </el-table>
    </template>
  </div>
</template>
<script>
export default {
  data() {
    return {
      // 表格数据
      tableData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1517 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1519 弄'
      }, {
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1516 弄'
      }],

      table_border: '1px solid red', // 设置表格边框样式
      table_header_border: '3px solid green'// 设置表头边框样式
    }
  },
  computed: {
    setStyles() {
      return {
        '--tableBorder': this.table_border,
        '--tableHeaderBorder': this.table_header_border
      }
    }
  }
}
</script>
<style lang="scss">
  .el-table--fit{
    border: var(--tableBorder);
  }
  .el-table__header-wrapper{
    border: var(--tableHeaderBorder);
  }
</style>

 

 

效果如下:

vue中如何使用定义好的变量设置css样式

方法二

对于第二种情况,除了以上方法以外,我们还可以在 HTML 标签上使用 ref 属性来实现,如下:

  • 先设置样式,一个表格边框样式的 JS 变量(table_border)及一个表头边框样式的 JS 变量(table_header_border)。

  • 在 HTML 标签上设置属性 ref 为 tableStyle。

  • 再在 methods 中定义一个方法 setStyles,该方法通过 this.refs.tableStyle.refs.tableStyle.refs.tableStyle.el.style.setProperty 来手动将定义好的 JS 变量值绑定到对应的 css 变量上。

  • 在 mounted 中调用 setStyles 方法。

  • 最后在 style 使用,找到需要改变或者设置样式的 HTML 标签的 className,将 css 变量进行绑定即可。

<template>
  <div class="app-container">
    <template>
      <el-table
        ref="tableStyle"
        :data="tableData"
      >
        <el-table-column
          prop="date"
          label="日期"
          width="180"
        />
        <el-table-column
          prop="name"
          label="姓名"
          width="180"
        />
        <el-table-column
          prop="address"
          label="地址"
        />
      </el-table>
    </template>
  </div>
</template>
<script>
export default {
  data() {
    return {
      // 表格数据
      tableData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1517 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1519 弄'
      }, {
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1516 弄'
      }],

      table_border: '1px solid red', // 设置表格边框样式
      table_header_border: '3px solid green'// 设置表头边框样式
    }
  },
  mounted() {
    this.setStyles()
  },
  methods: {
    setStyles() {
      this.$nextTick(() => {
        this.$refs.tableStyle.$el.style.setProperty('--tableBorder', this.table_border) // 给变量赋值
        this.$refs.tableStyle.$el.style.setProperty('--tableHeaderBorder', this.table_header_border) // 给变量赋值
      })
    }
  }
}
</script>
<style lang="scss">
  .el-table--fit{
    border: var(--tableBorder);
  }
  .el-table__header-wrapper{
    border: var(--tableHeaderBorder);
  }
</style>

效果如下:

vue中如何使用定义好的变量设置css样式

 

 

from:https://www.yisu.com/zixun/689863.html

标签:vue,王小虎,样式,普陀区,table,border,css
From: https://www.cnblogs.com/youmingkuang/p/16775475.html

相关文章

  • 30、css介绍
    30.1、css概述:css是CascadingStyleSheet的简称,中文称为层叠样式表,是用来控制网页数据表现的,可以使网页的表现与数据内容分离;30.2、css的四种引入方式:1、行内式:(1)在标记的st......
  • 深入理解css 笔记(3)
    过去经常将网页的根元素字号设置为0.625em或者62.5%。这样是为了将全局的font-size改成10px。这样设计师希望字号14px时,只需要写成1.4rem就好了。还使用了相对单......
  • 富文本插件quill生成内容后,字体样式未生效
    后台返回的富文本显示的时候字体大小无变化或不居中使用uniapp或者vue都可以使用一下方式解决场景描述:1、在富文本编辑器内,对文字进行了排版,以下为文字居中样式2、在页面......
  • Vue系列---【at Socket.writeAfterFIN [as write] (net.js:441:14) at PoolWorker
    1.问题描述:前端是vue项目,打包和打镜像的时候,本地没问题,jenkins物理机打流水线也没问题,但是到容器云平台使用自带的流水线打包打镜像的时候,就报错了。上次成功上线的代......
  • Vue3 Echarts 3D柱状图搭建
    最近学习大数据,需要数据可视化,所以特地去学习了一下echarts,通过springboot+vue整合了echarts三维柱状图。先看效果。  因为我是初学vue脚手架,对一些vue内置方法不是......
  • vue前端
       代码//在body标签中<divid="app">{{message}}</div>varapp=newVue({el:'#app',data:{message:'HelloVue!'}}) ......
  • css3的flex布局使用
    flex-direction:容器主轴的方向;值:row(默认:x轴由左到右)、column(y轴由上到下)、row-reverse(x轴由右到左)、column-reverse(y轴由下到上)flex-wrap:项目是否换行;值:nowrap(默认:不换行......
  • CSS——background(背景)
    background-color(背景颜色)在块级标签中,显示一整行背景颜色,在行内块中,显示设置的长宽背景颜色在行内中,显示文字内的背景颜色body{background-color:lightblu......
  • vue项目打包assets资源找不到
    问题描述:assets资源打包多了路径ststic/css解决方式:修改build文件夹下面的util.js文件if(options.extract){returnExtractTextPlugin.extract({use:......
  • vue css 背景图 路径 记得加波浪号 background-image: url("~@/assets/images/d.jpg")
    vuecss背景图路径记得加波浪号background-image:url("~@/assets/images/d.jpg");为什么不加波浪号,图片显示不出来哟......