93

我从http://www.ilikepixels.co.uk/drop/bubbler/生成了一个泡泡聊天的东西

在我的页面中,我在其中放了一个数字

.bubble {
  position: relative;
  width: 20px;
  height: 15px;
  padding: 0;
  background: #FFF;
  border: 1px solid #000;
  border-radius: 5px;
}

.bubble:after {
  content: "";
  position: absolute;
  top: 4px;
  left: -4px;
  border-style: solid;
  border-width: 3px 4px 3px 0;
  border-color: transparent #FFF;
   display: block;
  width: 0;
  z-index: 1;
}

.bubble:before {
  content: "";
  position: absolute;
  top: 4px;
  left: -5px;
  border-style: solid;
  border-width: 3px 4px 3px 0;
  border-color: transparent #000;
  display: block;
  width: 0;
  z-index: 0;
}

我希望background-color气泡的值根据其中的数字通过rgb

所以如果我的 div 是

<div class="bubble" style="background-color: rgb(100,255,255);"> 100 </div>

我想要的颜色是rgb(100,255,255)

问题是这不会影响三角形。

如何编写内联 css,使其包含 :before 和 :after?

4

5 回答 5

98

您可以使用CSS 变量(更准确地说,称为 CSS 自定义属性)。

  • 在 style 属性中设置变量:
    style="--my-color-var: orange;"
  • 在样式表中使用变量:
    background-color: var(--my-color-var);

浏览器兼容性

最小的例子:

div {
  width: 100px;
  height: 100px;
  position: relative;
  border: 1px solid black;
}

div:after {
  background-color: var(--my-color-var);
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
}
<div style="--my-color-var: orange;"></div>

你的例子:

.bubble {
  position: relative;
  width: 30px;
  height: 15px;
  padding: 0;
  background: #FFF;
  border: 1px solid #000;
  border-radius: 5px;
  text-align: center;
  background-color: var(--bubble-color);
}

.bubble:after {
  content: "";
  position: absolute;
  top: 4px;
  left: -4px;
  border-style: solid;
  border-width: 3px 4px 3px 0;
  border-color: transparent var(--bubble-color);
  display: block;
  width: 0;
  z-index: 1;
  
}

.bubble:before {
  content: "";
  position: absolute;
  top: 4px;
  left: -5px;
  border-style: solid;
  border-width: 3px 4px 3px 0;
  border-color: transparent #000;
  display: block;
  width: 0;
  z-index: 0;
}
<div class='bubble' style="--bubble-color: rgb(100,255,255);"> 100 </div>

于 2017-10-04T19:46:09.730 回答
70

你不能。使用内联样式,您可以直接定位元素。你不能在那里使用其他选择器。

但是,您可以做的是在样式表中定义不同的类来定义不同的颜色,然后将类添加到元素中。

于 2013-01-21T10:34:27.127 回答
54

关键是background-color: inherit;在伪元素上使用。
见:http: //jsfiddle.net/EdUmc/

于 2013-04-15T03:16:40.830 回答
17

如果你真的需要它内联,例如因为你正在动态加载一些用户定义的颜色,你总是可以<style>在你的内容之前添加一个元素。

<style>#project-slide-1:before { color: #ff0000; }</style>
<div id="project-slide-1" class="project-slide"> ... </div>

使用 PHP 和一些(受 wordpress 启发的)虚拟函数的示例用例:

<style>#project-slide-<?php the_ID() ?>:before { color: <?php the_field('color') ?>; }</style>
<div id="project-slide-<?php the_ID() ?>" class="project-slide"> ... </div>

从 HTML 5.2 开始,将样式元素放在正文中是有效的,尽管仍然建议将样式元素放在头部。

参考:https ://www.w3.org/TR/html52/document-metadata.html#the-style-element

于 2017-10-09T15:33:57.553 回答
2

我通过边框颜色解决了类似的问题:继承

, 看:

<li style="border-color: <?php echo $hex ?>;">...</li>

li {
    border-width: 0;
}

li:before {
    content: '';
    display: inline-block;
    float: none;
    margin-right: 10px;
    border-width: 4px;
    border-style: solid;
    border-color: inherit;
}
于 2020-02-18T11:58:09.037 回答