javascript - 在 CSS 值中使用类名

标签 javascript html css

我目前正在做一些造型,并想出了一种有趣的方式来做某事。我想创建一段文本,在页面上的所有其他文本中脱颖而出。您可以在下面看到我完成此操作的方式。

var el = document.querySelectorAll('span[class^=impact]')[0],
  col = el.className.split('-')[1];

el.style.textShadow = '2px 2px 0 #' + col;
html, body {
  width: 100%;
  height: 100%;
  margin: 0;
  background-image: url('http://i.imgur.com/UxB7TDq.jpg');
}
[class^=impact] {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  
  font-family: Impact, sans-serif;
  font-size: 72pt;
  font-weight: 800;
  text-transform: uppercase;
}
<span class="impact-008080">impact</span>

如您所见,我基本上是获取类的前半部分并对其应用样式,然后在 JavaScript 中获取类的后半部分并应用阴影。我想做的是完全省略 JavaScript 并将其全部保留在 CSS 中。

我没有颜色列表。显然支持任何和所有十六进制颜色。我宁愿保留这种格式。

最佳答案

CSS 属性

理论上,当存在浏览器支持时,CSS attr 属性可以用于此类事情。请注意,这现在不起作用,但是当浏览器支持存在时,它可能看起来像这样:

HTML

<span class="impact" data-shadow="#008080">Impact</span>

CSS

.impact {
    /* you text and positioning styles here */

    text-shadow: 2px 2px attr(data-shadow);
}

您可以在此处阅读有关 attr 属性的更多信息: https://developer.mozilla.org/en-US/docs/Web/CSS/attr


但是现在...

最好的办法可能是继续使用 JavaScript,但不是将十六进制代码附加到类名,而是将十六进制值存储在元素的数据属性中,从而使类名在所有实例中保持一致那个元素。

HTML

<span class="impact" data-shadow="#fff">Impact</span>

CSS

.impact {
    /* your text and position styles here */
}

JS

var el = document.querySelector(".impact"),
    shadow = el.dataset.shadow;

el.style.textShadow = '2px 2px ' + shadow;

这里有一个 JSFiddle 供引用:http://jsfiddle.net/galengidman/xx6r1n2o/

关于javascript - 在 CSS 值中使用类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26030509/

相关文章:

css - 什么是 CSS3 模块?

javascript - 如何在 ES6 中将一个 JS 文件导入另一个 JS 文件?

javascript - 刷新页面而不重新加载它?

javascript - 我的 React CSSTransition 动画不起作用

javascript - 如何在没有抗锯齿的情况下调整 Canvas 大小?

html - 边框后的额外行

javascript - 在 php 中得到倍数

html - 如何从特定元素中删除 css

javascript - 移动设备上的 HTML/CSS 列表框

JavaScript 显示/隐藏 Div 无法打开