how to create inline style with :before and :after

前端 未结 5 1004
时光说笑
时光说笑 2021-01-31 01:19

I generated a bubble chat thingy from http://www.ilikepixels.co.uk/drop/bubbler/

In my page I put a number inside of it

.bubble {
  position: relative;
          


        
相关标签:
5条回答
  • 2021-01-31 01:34

    The key is to use background-color: inherit; on the pseudo element.
    See: http://jsfiddle.net/EdUmc/

    0 讨论(0)
  • 2021-01-31 01:37

    If you really need it inline, for example because you are loading some user-defined colors dynamically, you can always add a <style> element right before your content.

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

    Example use case with PHP and some (wordpress inspired) dummy functions:

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

    Since HTML 5.2 it is valid to place style elements inside the body, although it is still recommend to place style elements in the head.

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

    0 讨论(0)
  • 2021-01-31 01:47

    You can, using CSS variables (more precisely called CSS custom properties).

    • Set your variable in your style attribute: style="--my-color-var: orange;"
    • Use the variable in your stylesheet: background-color: var(--my-color-var);

    Browser compatibility

    Minimal example:

    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>

    Your example:

    .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>

    0 讨论(0)
  • 2021-01-31 01:48

    I resolved a similar problem by border-color: inherit

    , see:

    <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;
    }
    
    0 讨论(0)
  • 2021-01-31 01:49

    You can't. With inline styles you are targeting the element directly. You can't use other selectors there.

    What you can do however is define different classes in your stylesheet that define different colours and then add the class to the element.

    0 讨论(0)
提交回复
热议问题