JavaScript编写css自定义属性

一、自定义属性

是在 CSS 中定义的变量,以 --开头。它们可以存储颜色、尺寸、字体等任何 CSS 值,并且可以在整个文档中重复使用。

:root {
  --primary-color: #3498db;
  --font-size: 16px;
}

body {
  color: var(--primary-color);
  font-size: var(--font-size);
}

二、定义自定义属性

自定义属性通常在 :root 选择器中定义,这样它们就可以在整个文档全局使用。不过,你也可以在任何选择器中定义自定义属性,使其作用域仅限于该选择器及其子元素局部

/* 全局定义 */
:root {
  --main-bg-color: #f0f0f0;
}

/* 局部定义 */
.header {
  --header-height: 60px;
  height: var(--header-height);
}

三、使用自定义属性

使用 var() 函数来引用自定义属性

.button {
  background-color: var(--primary-color);
  padding: var(--padding, 10px); /* 提供默认值 */
}

四、JS动态修改自定义属性

const element = document.querySelector('.container');
element.style.setProperty('--local-color', '#0000ff'); // 修改局部变量
document.documentElement.style.setProperty('--global-color', '#00ffff'); // 修改全局变量

五、应用

<template>
  <div ref="leftBg" class="left-bg"></div>
  <button @click="updateTitleImageClass">切换伪类图片</button>
</template>

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

const leftBg = ref(null);
const systemTitles = ['cat1', 'cat2', 'cat3'];
let currentTitleIndex = 0;

const getBackgroundSize = (title) => {
  // 根据标题返回不同的背景大小
  switch (title) {
    case 'cat1':
      return 'contain';
    case 'cat2':
      return 'cover';
    case 'cat3':
      return 'auto';
    default:
      return 'cover';
  }
};

const images = {};

const loadImages = async () => {
  for (const title of systemTitles) {
    try {
      const response = await fetch(`/${title}/title.jpg`);
      if (!response.ok) {
        throw new Error(`Failed to fetch image for ${title}`);
      }
      const blob = await response.blob();
      images[`/${title}/title.jpg`] = URL.createObjectURL(blob);
    } catch (error) {
      console.error(`Error loading image for ${title}:`, error);
    }
  }
};
onMounted(
  async () => {
    await loadImages();
    updateTitleImageClass();
  }
);
const updateTitleImageClass = async () => {
  if (!leftBg.value) {
    console.error('没有找到leftBg节点');
    return;
  }

  const systemTitle = systemTitles[currentTitleIndex];
  const imagePath = `/${systemTitle}/title.jpg`; // 根据系统标题获取图片路径
  if (!images[imagePath]) {
    console.log(`没有找到对应的图片路径: ${imagePath}`);
    return;
  }
  const imageUrl = images[imagePath]; // 获取图片路径
  // 设置自定义属性
  leftBg.value.style.setProperty('--background-image', `url(${imageUrl})`);

  const backgroundSize = getBackgroundSize(systemTitle);
  leftBg.value.style.setProperty('--background-image-size', backgroundSize);

  // 切换到下一个标题
  currentTitleIndex = (currentTitleIndex + 1) % systemTitles.length;
};
</script>

<style lang="scss" scoped>
.left-bg {
  width: 100%;
  height: 100px;
  position: relative;

  &::before {
    content: '';
    display: block;
    background-image: var(--background-image);
    background-size: var(--background-image-size, cover);
    background-position: center;
    background-repeat: no-repeat;
    width: 100px;
    height: 100%;
    position: absolute;
    top: 0rem;
    left: 0rem;
  }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/932059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目开发之Jenkins

文章目录 思考基础概述JenkinsMavenGit集成开发部署GitLab服务安装 实战1 新建任务需要的配置pipeline最后 思考 jenkis怎么连接github仓库&#xff1f; jenkis的作用是什么&#xff1f;基础 概述 定义&#xff1a;Jenkins是一款开源的持续集成(Continuous Integration&…

core Webapi jwt 认证

core cookie 验证 Web API Jwt 》》》》用户信息 namespace WebAPI001.Coms {public class Account{public string UserName { get; set; }public string UserPassword { get; set; }public string UserRole { get; set; }} }》》》获取jwt类 using Microsoft.AspNetCore.Mvc…

TCP/IP协议详解(小白)

TCP/IP协议详解 TCP/IP协议包含了一系列的协议&#xff0c;也叫TCP/IP协议族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;简称TCP/IP。TCP/IP协议族提供了点对点的连结机制&#xff0c;并且将传输数据帧的封装、寻址、传输、路由…

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展&#xff0c;旅游已经成为人…

jmeter配置

单接口运行没问题&#xff0c;但是批量执行100个线程数发现总是提示请求不合法 最后发现 需要将配置改成 正好回归一下这个配置&#xff1a; Ramp-Up时间&#xff08;秒&#xff09;的定义&#xff1a; Ramp-Up时间是指在JMeter测试中&#xff0c;所有指定的线程&#xff08…

SpringBoot 项目如何集成 JWT

SpringBoot 项目如何集成 JWT JWT JSON Web Token (JWT) 是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于作为 JSON 对象在各方之间安全地传输信息。 在 Oauth2 中&#xff0c;其实就是返回访问令牌 &#xff08;access_token&#…

【innodb阅读笔记】之 Innodb行记录格式 (Compact 行格式)

一、Innodb行记录格式 innodb 存储引擎同大多数数据库一样&#xff0c;记录是以行的形式存储的。这意味着页中保存的一行行的数据。在 mysql 5.7 版本中&#xff0c;默认格式为 Dynamic&#xff0c;可以通过命令查看当前表的行格式&#xff0c;其中 row_format 表示当前表行记录…

交易所 Level-2 历史行情数据自动化导入攻略

用户部署完 DolphinDB 后&#xff0c;需要将历史股票数据批量导入数据库&#xff0c;再进行数据查询、计算和分析等操作。DolphinDB 开发了 ExchData 模块&#xff0c;主要用于沪深交易所 Level-2 行情原始数据的自动化导入&#xff0c;目前已支持的数据源包括&#xff1a; 沪…

加载内核映像文件

将kernel转换成elf文件格式&#xff0c;不能直接从loader直接跳转到0x100000&#xff0c;需要解析&#xff0c;提取出代码和数据出来&#xff0c;放到0x10000&#xff08;64kb&#xff09;的位置&#xff0c;1M的位置只是存放elf文件的位置。 4.10加载内核映像文件2 common/el…

【数字电路与逻辑设计】实验一 序列检测器

文章总览&#xff1a;YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验一 序列检测器 一、实验内容二、设计过程&#xff08;一&#xff09;作出状态图或状态表&#xff08;二&#xff09;状态化简&#xff08;三&#xff09;状态编码 三、源代码&#xff08;一&#xff…

怎么实现邮件营销自动化?

邮件营销能够出色地帮助我们与客户建立良好关系。无论是新客户还是老客户&#xff0c;都可以通过邮件来达成较为良好的客户关系。然而&#xff0c;从消费者的角度来看&#xff0c;每个人都有自己独特的习惯和特点&#xff0c;没有人希望收到千篇一律、营销意味过重的邮件。因此…

【LeetCode: 203. 移除链表元素 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【opencv入门教程】12. 矩阵初始化

文章选自&#xff1a; 一、 数据类型 建立矩阵必须要指定矩阵存储的数据类型&#xff0c;图像处理中常用的几种数据类型如下&#xff1a;包括数据位深度8位、32位&#xff0c;数据类型U:uchar、F:float型以及通道数C1&#xff1a;单通道、C3&#xff1a;三通道、C4&#xff…

Jupyter Notebook认识、安装和启动以及使用

Jupyter Notebook认识、安装和启动以及使用 Jupyter Notebook认识、安装和启动以及使用 Jupyter Notebook认识、安装和启动以及使用一、认识Jupyter Notebook1.1 Jupyter Notebook概述1.2 Jupyter Notebook 重要特性(1)交互式代码执行(2)支持多种编程语言(3)富文本编辑(4)代码高…

SQL语句中AND与OR操作符的优先级问题

在SQL中&#xff0c;当AND和OR操作符同时出现时&#xff0c;优先级的处理可能会导致查询结果与预期不符。为了说明这一问题&#xff0c;我们可以看一个实际的例子。 假设需要查询价格在10美元及以上&#xff0c;且由DLL01或BRS01制造的所有产品。可以使用如下SQL语句&#xff…

FreeRTOS实现UART通信

串口通信 速战速决形式&#xff0c;大家走一遍就通&#xff1b; 本次实验验证&#xff1a; 配置文件 4、打开CubeMX 5、选择芯片型号&#xff0c;然后点击开始项目 6、配置时钟 配置烧录引脚&#xff0c;与FreeRTOS系统时钟 选择FreeRTOS 这里已经默认有一个任务&…

FaRM译文

No compromises: distributed transactions with consistency, availability, and performance Aleksandar Dragojevic, Dushyanth Narayanan, Edmund B. Nightingale, Matthew Renzelmann, Alex Shamis, Anirudh Badam, Miguel Castro Microsoft Research 目录 摘要 1. 引…

Ubuntu22.04深度学习环境安装【Anaconda+Pycharm】

anaconda可以提供多个独立的虚拟环境&#xff0c;方便我们学习深度学习&#xff08;比如复现论文&#xff09;&#xff1b; Pycharm编辑器可以高效的编写python代码&#xff0c;也是一个很不错的工具。 下面就记录下Ubuntu22.04的安装流程&#xff1a; 1.Anaconda安装 下载Ana…

Angular由一个bug说起之十一:排序之后无法展开 Row

问题现象 在使用 Material Table 时&#xff0c;排序功能触发了一个奇怪的 Bug&#xff1a;表格的 Row 无法展开。最终排查发现&#xff0c;问题的根源在于 trackBy 的错误使用。trackBy 方法接受两个参数&#xff1a;index&#xff08;数据索引&#xff09;和 row&#xff08;…