Javascript d_css=原始css;常量regexp=/(?:var\(-)[a-zA-z\-]*(?:\)/g;设cssVars=orig_css.matchAll(regexp);cssVars=Array.from(cssVars.flat();对于(cssVa

Javascript d_css=原始css;常量regexp=/(?:var\(-)[a-zA-z\-]*(?:\)/g;设cssVars=orig_css.matchAll(regexp);cssVars=Array.from(cssVars.flat();对于(cssVa,javascript,css,Javascript,Css,d_css=原始css;常量regexp=/(?:var\(-)[a-zA-z\-]*(?:\)/g;设cssVars=orig_css.matchAll(regexp);cssVars=Array.from(cssVars.flat();对于(cssVars的常数v)更新的_css=更新的_css.replace(v,colors[v.slice(6,-1)]);console.log(更新的_css);…}如何使用原始的prims.css和更新的prims.css取决于您。是的,您可以完全按


d_css=原始css;常量regexp=/(?:var\(-)[a-zA-z\-]*(?:\)/g;设cssVars=orig_css.matchAll(regexp);cssVars=Array.from(cssVars.flat();对于(cssVars的常数v)更新的_css=更新的_css.replace(v,colors[v.slice(6,-1)]);console.log(更新的_css);…}如何使用原始的prims.css和更新的prims.css取决于您。是的,您可以完全按照您所说的做。我正在使用Parcel捆绑所有内容,它给了我一个错误,因为我提供的
href
没有找到,因为我是通过JavaScript创建样式标记的
const createStyleSheet=()=>{const css=document.createElement('style');css.type='text/css'css.href='prism.css'css.innerHTML=get_css_和_replace_vars()const script=document.querySelector('script')')script.parentNode.insertBefore(css,script)}
。我的下载按钮看起来像这样
@Dave.Q,对不起,我没有真正理解你的意思。您是否对用户下载已更新的css有意见,还是对创建样式标记有意见。但正如我现在看到的,您可能有两个:)…如果您使用innerHTML,为什么需要设置href呢。也许这会有帮助:如果没有,你能把它作为另一个问题发布,并提供更多细节吗?
NOT WANTED

pre[class*="language-"] {
  background: var(--block-background);
}
WANTED OUTPUT

pre[class*="language-"] {
  background: #0D2831;
}
const styles = getComputedStyle(document.documentElement)
const value = String(styles.getPropertyValue('--block-background')).trim()
import { colors } from './colorHelper'

const inputs = [].slice.call(document.querySelectorAll('input[type="color"]'));

const handleThemeUpdate = (colors) => {
  const root = document.querySelector(':root');
  const keys = Object.keys(colors);
  keys.forEach(key => {
    root.style.setProperty(key, colors[key]);
  });
}

inputs.forEach((input) => {
  input.addEventListener('change', (e) => {
    e.preventDefault()
    const cssPropName = `--${e.target.id}`;
    document.styleSheets[2].cssRules[3].style.setProperty(cssPropName, e.target.value)
    handleThemeUpdate({
      [cssPropName]: e.target.value
    });
    console.log(`${cssPropName} is now ${e.target.value}`)
  });
});


const cssRules = document.styleSheets[2].cssRules;
for (var i = 0; i < cssRules.length; i++) {
  // Finds css variable names
  const regexp = /(?:var\(--)[a-zA-z\-]*(?:\))/

  let cssVariables = cssRules[i].cssText.matchAll(regexp)
  cssVariables = Array.from(cssVariables).join()

  console.log(cssVariables)
}
const colorSelect = {
  'Line Highlights': {
    'highlight-background': '#F7EBC6',
    'highlight-accent': '#F7D87C'
  },
  'Inline Code': {
    'inline-code-color': '#DB4C69',
    'inline-code-background': '#F9F2F4'
  },
  'Code Blocks': {
    'block-background': '#0D2831',
    'base-color': '#5C6E74',
    'selected-color': '#b3d4fc'
  },
  'Tokens': {
    'comment-color': '#93A1A1',
    'punctuation-color': '#999999',
    'property-color': '#990055',
    'selector-color': '#669900',
    'operator-color': '#a67f59',
    'operator-background': '#FFFFFF',
    'variable-color': '#ee9900',
    'function-color': '#DD4A68',
    'keyword-color': '#0077aa'
  }
}

const colorNames = []
const colors = {}

Object.keys(colorSelect).map(key => {
  const group = colorSelect[key]
  Object.keys(group).map(color => {
    colorNames.push(color)
    colors[color] = group[color]
  })
})

export { colorSelect, colorNames, colors }
pre[class*="language-"],
code[class*="language-"] {
  color: var(--base-color);
  font-size: 13px;
  text-shadow: none;
  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
  direction: ltr;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  line-height: 1.5;
  -moz-tab-size: 4;
  -o-tab-size: 4;
  tab-size: 4;
  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}
pre[class*="language-"]::selection,
code[class*="language-"]::selection,
pre[class*="language-"]::mozselection,
code[class*="language-"]::mozselection {
  text-shadow: none;
  background: var(--selected-color);
}

@media print {
  pre[class*="language-"],
  code[class*="language-"] {
    text-shadow: none;
  }
}

pre[class*="language-"] {
  padding: 1em;
  margin: .5em 0;
  overflow: auto;
  background: var(--block-background);
}
:not(pre) > code[class*="language-"] {
  padding: .1em .3em;
  border-radius: .3em;
  color: var(--inline-code-color);
  background: var(--inline-code-background);
}

/* Tokens */

.namespace {
  opacity: .7;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
  color: var(--comment-color);
}
.token.punctuation {
  color: var(--punctuation-color);
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
  color: var(--property-color);
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
  color: var(--selector-color);
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
  color: var(--operator-color);
  background: var(--operator-background);
}
.token.atrule,
.token.attr-value,
.token.keyword {
  color: var(--keyword-color);
}
.token.function {
  color: var(--function-color);
}
.token.regex,
.token.important,
.token.variable {
  color: var(--variable-color);
}
.token.important,
.token.bold {
  font-weight: bold;
}
.token.italic {
  font-style: italic;
}
.token.entity {
  cursor: help;
}

/* Line highlighting */

pre[data-line] {
  position: relative;
}
pre[class*="language-"] > code[class*="language-"] {
  position: relative;
  z-index: 1;
}
.line-highlight {
  position: absolute;
  left: 0;
  right: 0;
  padding: inherit 0;
  margin-top: 1em;
  background: var(--highlight-background);
  box-shadow: inset 5px 0 0 var(--highlight-accent);
  z-index: 0;
  pointer-events: none;
  line-height: inherit;
  white-space: pre;
}
 <link rel="stylesheet" type="text/css" href="./style.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.css"
    integrity="sha256-WAgYcAck1C1/zEl5sBl5cfyhxtLgKGdpI3oKyJffVRI=" crossorigin="anonymous" />
  <link href="./themes/prism.css" rel="stylesheet" />
const cssRules = document.styleSheets[2].cssRules;
for (var i = 0; i < cssRules.length; i++) {
  const regexp = /(?:var\(--)[a-zA-z\-]*(?:\))/

  let cssVariables = cssRules[i].cssText.matchAll(regexp)
  cssVariables = Array.from(cssVariables)

  console.log(cssVariables)
} 
var(--base-color) 
var(--selected-color) 
<empty string>
var(--block-background)
var(--inline-code-color)
<empty string>
var(--comment-color)
var(--punctuation-color)
var(--property-color) 
var(--selector-color)
var(--operator-color)
var(--keyword-color) 
var(--function-color)
var(--variable-color) 
<empty string> 
var(--highlight-background)
@media print {
  pre[class*="language-"],
  code[class*="language-"] {
    text-shadow: none;
  }
}
 const updated_rules = [];
 for (var i = 0; i < cssRules.length; i++) {
    const regexp = /(?:var\(--)[a-zA-z\-]*(?:\))/g;
    let updated_rule = cssRules[i].cssText;
    let cssVariables = updated_rule.matchAll(regexp);
    cssVariables = Array.from(cssVariables).flat();
    for (const v of cssVariables) {
      updated_rule = updated_rule.replace(v, colors[v.slice(6, -1)]);
    }
    updated_rules.push(updated_rule);
  }
  console.log(updated_rules);