You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript获取vue-cli编译项目中指定class对应的CSS属性

解决方案

要获取单个类对应的独立样式,不能用getComputedStyle,它返回的是元素所有样式叠加后的最终计算值,不符合你的需求。正确的实现思路是直接遍历浏览器加载的所有样式表,匹配每个类选择器对应的独立样式规则。

完整实现代码

// 提取页面中所有出现的唯一class名称
function getAllUniqueClasses() {
  const allElements = document.querySelectorAll('*');
  const classSet = new Set();
  allElements.forEach(el => {
    el.classList.forEach(cls => classSet.add(cls));
  });
  return Array.from(classSet);
}

// 遍历样式表,获取每个class对应的独立CSS属性
function getClassStyles(classes) {
  const result = {};
  classes.forEach(cls => result[cls] = {});

  for (const sheet of document.styleSheets) {
    try {
      const rules = sheet.cssRules || sheet.rules;
      if (!rules) continue;
      for (const rule of rules) {
        if (rule.type !== CSSRule.STYLE_RULE) continue;
        const selector = rule.selectorText;
        classes.forEach(cls => {
          const escapedCls = cls.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
          const classSelector = `.${escapedCls}`;
          // 仅匹配完全等于当前类的选择器,排除组合选择器
          if (selector === classSelector) {
            for (let i = 0; i < rule.style.length; i++) {
              const prop = rule.style[i];
              result[cls][prop] = rule.style.getPropertyValue(prop);
            }
          }
        });
      }
    } catch (e) {
      // 跨域样式表无法访问时自动跳过
    }
  }
  return result;
}

// 生成CSS文件并自动下载
function generateCssFile(classStyles) {
  let cssContent = '';
  Object.entries(classStyles).forEach(([cls, props]) => {
    if (Object.keys(props).length === 0) return;
    cssContent += `.${cls} {\n`;
    Object.entries(props).forEach(([prop, value]) => {
      cssContent += `  ${prop}: ${value};\n`;
    });
    cssContent += '}\n\n';
  });
  const blob = new Blob([cssContent], { type: 'text/css' });
  const url = URL.createObjectURL(blob);
  const downloadLink = document.createElement('a');
  downloadLink.href = url;
  downloadLink.download = 'extracted-class-styles.css';
  downloadLink.click();
  URL.revokeObjectURL(url);
}

使用说明

打开你要提取样式的页面,在浏览器控制台依次执行以下代码即可:

const allClasses = getAllUniqueClasses();
const classStyleMap = getClassStyles(allClasses);
generateCssFile(classStyleMap);

注意事项

  • 如果你的Vuetify样式是通过CDN引入的,会触发跨域限制导致无法读取样式规则,建议在vue-cli本地开发环境下运行提取,或者将Vuetify的CSS文件部署到同域名下再操作。
  • 上述代码默认仅匹配完全独立的类选择器,如果需要提取.theme--light .red--text这类组合选择器中的样式,可以修改匹配规则,将selector === classSelector改为selector.includes(classSelector)即可。
  • 没有匹配到独立样式的类会自动被忽略,不会出现在最终生成的CSS文件中。

内容的提问来源于stack exchange,提问作者Xaime Pardal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 13:54:03