I do not want to inherit the child opacity from the parent in CSS

前端 未结 14 909
猫巷女王i
猫巷女王i 2020-11-21 06:31

I do not want to inherit the child opacity from the parent in CSS.

I have one div which is the parent, and I have another div inside the first div which is the child

相关标签:
14条回答
  • 2020-11-21 06:53

    There is no one size fits-all approach, but one thing that I found particularly helpful is setting opacity for a div's direct children, except for the one that you want to keep fully visible. In code:

    <div class="parent">
        <div class="child1"></div>
        <div class="child2"></div>
        <div class="child3"></div>
        <div class="child4"></div>
    </div>
    

    and css:

    div.parent > div:not(.child1){
        opacity: 0.5;
    }
    

    In case you have background colors/images on the parent you fix color opacity with rgba and background-image by applying alpha filters

    0 讨论(0)
  • 2020-11-21 06:53

    If you have to use an image as the transparent background, you might be able to work around it using a pseudo element:

    html

    <div class="wrap"> 
       <p>I have 100% opacity</p>  
    </div>
    

    css

    .wrap, .wrap > * {
      position: relative;
    }
    .wrap:before {
      content: " ";
      opacity: 0.2;
      background: url("http://placehold.it/100x100/FF0000") repeat;     
      position: absolute;
      width: 100%;
      height: 100%;
    }
    
    0 讨论(0)
  • 2020-11-21 06:54

    Instead of using opacity, set a background-color with rgba, where 'a' is the level of transparency.

    So instead of:

    background-color: rgb(0,0,255); opacity: 0.5;
    

    use

    background-color: rgba(0,0,255,0.5);
    
    0 讨论(0)
  • 2020-11-21 06:58

    My answer is not about static parent-child layout, its about animations.

    I was doing an svg demo today, and i needed svg to be inside div (because svg is created with parent's div width and height, to animate the path around), and this parent div needed to be invisible during svg path animation (and then this div was supposed to animate opacity from 0 to 1, it's the most important part). And because parent div with opacity: 0 was hiding my svg, i came across this hack with visibility option (child with visibility: visible can be seen inside parent with visibility: hidden):

    .main.invisible .test {
      visibility: hidden;
    }
    .main.opacity-zero .test {
      opacity: 0;
      transition: opacity 0s !important;
    }
    .test { // parent div
      transition: opacity 1s;
    }
    .test-svg { // child svg
      visibility: visible;
    }
    

    And then, in js, you removing .invisible class with timeout function, adding .opacity-zero class, trigger layout with something like whatever.style.top; and removing .opacity-zero class.

    var $main = $(".main");
      setTimeout(function() {
        $main.addClass('opacity-zero').removeClass("invisible");
        $(".test-svg").hide();
        $main.css("top");
        $main.removeClass("opacity-zero");
      }, 3000);
    

    Better to check this demo http://codepen.io/suez/pen/54bbb2f09e8d7680da1af2faa29a0aef?editors=011

    0 讨论(0)
  • 2020-11-21 06:59

    For other people trying to make a table (or something) look focused on one row using opacity. Like @Blowski said use color not opacity. Check out this fiddle: http://jsfiddle.net/2en6o43d/

    .table:hover > .row:not(:hover)
    
    0 讨论(0)
  • 2020-11-21 07:00

    A little trick if your parent is transparent and you would like your child to be the same, but defined exclusively (e.g. to overwrite the user agent styles of a select dropdown):

    .parent {
         background-color: rgba(0,0,0,0.5);
    }
    
    .child {
         background-color: rgba(128,128,128,0);
    }
    
    0 讨论(0)
提交回复
热议问题