首页 > 其他分享 >如何在vue的style标签中使用js?

如何在vue的style标签中使用js?

时间:2024-03-16 11:33:24浏览次数:13  
标签:style vue 自定义 color js -- var CSS 属性

这是面试的时候遇到的一个面试题,当时没回答上来。。。
var() - CSS:层叠样式表 | MDN
自定义属性(--*):CSS 变量 - CSS:层叠样式表 | MDN
我们先了解一下 css var()函数以及 css 自定义属性
通过 var 函数和自定义属性可以复用某些 css 样式,例如:

:root {
  --main-bg-color: pink;
}

body {
  background-color: var(--main-bg-color);
}

.text {
  background-color: var(--main-bg-color)
}

当然 var()函数是有作用域的,读取顺序 内联自定义属性 => class 自定义属性 => root 自定义属性

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      :root {
        --color: pink;
      }

      .text {
        --color: red;
        color: var(--color);
      }
    </style>
  </head>
  <body>
    <!-- 优先读取内联自定义属性 -->
    <div class="text" style="--color: blue">hello</div>
  </body>
</html>

那如何在 vue style 标签中使用响应式变量呢?

方法一:v-bind:style + var()

<template>
  <div class="text" :style="{ '--color': color }">hello</div>
</template>

<script setup>
import { ref, onMounted } from 'vue'

const color = ref('red')

onMounted(() => {
  setTimeout(() => {
    color.value = 'pink'
  }, 1000)
})
</script>

<style>
.text {
  color: var(--color);
}
</style>

原理:通过绑定元素的 style 创建自定义属性,使用 var()函数访问创建的自定义属性

方法二:通过 v-bind CSS 函数将 CSS 的值链接到变量上,且支持 JavaScript 表达式(需要用引号包裹起来,支持模板字符串)

<template>
  <p>hello</p>
</template>

<script setup>
  const theme = {
    color: 'red'
  }
</script>

<style scoped>
  p {
    color: v-bind('theme.color'); /* 绑定某个变量 */
  }
</style>
<template>
  <p>hello</p>
</template>

<script setup>
  const colorNum = 1
</script>

<style scoped>
  p {
    color: v-bind('colorNum > 1 ? ' blue': ' pink''); /* 支持JavaScript表达式 */
  }
</style>

原理:vue 会将 v-bind 的值编译成哈希化的 CSS 自定义属性,并通过内联的方式应用到组件的根结点上,内部再通过 var() 函数使用(方法二其实就是方法一的语法糖,简化了内部操作)

标签:style,vue,自定义,color,js,--,var,CSS,属性
From: https://www.cnblogs.com/ccboom/p/18076871

相关文章

  • 基于Spring Boot+Vue的校园二手交易平台
    目录一、绪论1.1开发背景1.2系统开发平台1.3系统开发环境二、需求分析2.1问题分析2.2系统可行性分析2.2.1技术可行性2.2.2操作可行性2.3系统需求分析2.3.1学生功能需求2.3.2管理员功能需求2.3.3游客功能需求三、系统设计3.1功能结构图3.2E-R模型3.3数......
  • vue3+ts 上传组件
    本来是用的jeecg-vue3中的上传组件,如下图: 功能上还是蛮全的,就是上图中这个链接的代码死活找不到,查了下,是基于antv的a-upload实现的。但是antv中也没找到,上图这个只有移入删除的功能但是我这边的需求是点击链接可以直接在网页预览,而不是下载,移入后有个删除和下载的功能按钮。......
  • Node.js配置(需要修改默认缓存路径的可看)
    Node.js配置针对想要移除默认node位置的配置设置安装node进入node中文网下载|Node.js中文网(nodejs.cn)一般选择左边的版本,为稳定版本这里也给出官网,中文网只是国内镜像官网的不是官方的源安装过程可以无脑下一步,注意修改存储位置就行在cmd面板分别输入以下内容,可......
  • 前端开发时,应该如何考虑开发的主次先后,比如数据结构、数据流转、UI绘制,js逻辑等等,请给
    前端开发时,应该如何考虑开发的主次先后,比如数据结构、数据流转、UI绘制,js逻辑等等,请给出你的最佳实践在前端开发中,正确规划和安排各项任务的主次先后对于项目的顺利进行至关重要。以下是一个针对数据结构、数据流转、UI绘制以及JavaScript逻辑等方面的开发优先级与最佳实践建议:......
  • 智慧医养大数据公共服务系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着老龄化社会的到来和大数据技术的发展,智慧医养结合的公共服务系统成为社会关注的热点。这一系统能够集成医疗、养老、健康管理等数据,通过智能分析和处理,......
  • Mac air node.js重新安装版本,删除node文件后报错,报错信息和解决办法
    1、在终端执行:node-v  dyld[13110]:Librarynotloaded:/usr/local/opt/icu4c/lib/libicui18n.73.dylib   Referencedfrom:/usr/local/Cellar/node@16/16.20.2/bin/node   Reason:tried:'/usr/local/opt/icu4c/lib/libicui18n.73.dylib'(nosuchfil......
  • 专利管理系统的设计与实现-年费管理(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍在知识产权高度重视的今天,专利申请成为企业和个人保护创新成果的重要手段。随之而来的是专利年费管理的复杂性,如何高效、准确地处理这些费用成为专利管理中......
  • 药品销售管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着医药行业的快速发展,药品销售的管理日益复杂化,对于系统化、自动化的药品销售管理系统需求不断增加。此系统可以实现对药品库存、销售情况、顾客信息及销......
  • vite中配置less,vue3中配置less
    前言如果赶时间请直接使用目录跳到解决问题的部分。使用的项目使用vue脚手架生成。npminitvue@latest版本如下"@vitejs/plugin-vue":"^5.0.4","vue":"^3.4.21"由于近期在学less,心想如果不能将其应用到vue项目中,无异于纸上谈兵。于是立即用vue脚手架......
  • 在YAPI中使用mock.js语法编写接口
    1.问题编写完json数据后,尝试过导入json和json-schema,YAPI总是无法将mock语法转化相应数据1.1导入json的方式不支持mock语法1.2导入json-schema的方式识别不了我写的mock语法json2.解决先在设置中开启json5,再关闭如图所示的按钮显示如下图所示即成功......