105

Hey i am searching in google but i can't fine any perfect answer

I want to Opacity in parent DIV but not Child DIV

Example

HTML

<div class="parent">
<div class="child">
Hello I am child 
</div>
</div>

Css

.parent{
background:url('../images/madu.jpg') no-repeat 0 0;
}
.child{
Color:black;
}

Note: -- I want to background-image in Parent Div not Color

Community
  • 1
  • 1
Rohit Azad Malik
  • 30,330
  • 17
  • 61
  • 93
  • hey @DavidThomas How can u say this question is Duplicate if you have any answer related in this questions wiout used Position and used to Background-images in parent div in pure css ............. – Rohit Azad Malik Jun 04 '12 at 09:53
  • Pre-edit it seemed to be; I read the question in mobile and then, to find duplicates, I switched to desktop. I didn't re-read your question between times. My close-vote will fade away, though, so don't worry about it. – David Thomas Jun 04 '12 at 10:46

7 Answers7

106

I know this is old, but just in case it will help someone else.

<div style="background-color: rgba(255, 0, 0, 0.5)">child</div> 

Where rgba is: red, green, blue, and a is for transparency.

Tom
  • 25,110
  • 20
  • 96
  • 106
PaulSatcom
  • 1,069
  • 2
  • 7
  • 2
51

May be it's good if you define your background-image in the :after pseudo class. Write like this:

.parent{
    width:300px;
    height:300px;
    position:relative;
    border:1px solid red;
}
.parent:after{
    content:'';
    background:url('http://www.dummyimage.com/300x300/000/fff&text=parent+image');
    width:300px;
    height:300px;
    position:absolute;
    top:0;
    left:0;
    opacity:0.5;
}
.child{
    background:yellow;
    position:relative;
    z-index:1;
}

Check this fiddle

Venugopal
  • 1,880
  • 1
  • 17
  • 29
sandeep
  • 88,914
  • 23
  • 135
  • 154
19

You can do it with pseudo-elements: (demo on dabblet.com) enter image description here

your markup:

<div class="parent">
    <div class="child"> Hello I am child </div>
</div>

css:

.parent{
    position: relative;
}

.parent:before {
    z-index: -1;
    content: '';
    position: absolute;

    opacity: 0.2;
    width: 400px;
    height: 200px;
    background: url('http://img42.imageshack.us/img42/1893/96c75664f7e94f9198ad113.png') no-repeat 0 0; 
}

.child{
    Color:black;
}
Vladimir Starkov
  • 18,444
  • 6
  • 59
  • 113
12

As mentioned by Tom, background-color: rgba(229,229,229, 0.85) can do the trick. Place that on the style of the parent element and child wont be affected.

Aleksandr M
  • 23,988
  • 12
  • 67
  • 136
Rik
  • 121
  • 1
  • 3
6

You can't. Css today simply doesn't allow that.

The logical rendering model is this one :

If the object is a container element, then the effect is as if the contents of the container element were blended against the current background using a mask where the value of each pixel of the mask is .

Reference : css transparency

The solution is to use a different element composition, usually using fixed or computed positions for what is today defined as a child : it may appear logically and visualy for the user as a child but the element doesn't need to be really a child in your code.

A solution using css : fiddle

.parent {
    width:500px;
    height:200px;    
    background-image:url('http://canop.org/blog/wp-content/uploads/2011/11/cropped-bandeau-cr%C3%AAte-011.jpg');
    opacity: 0.2;
}
.child {
    position: fixed;
    top:0;
}

Another solution with javascript : fiddle

Venugopal
  • 1,880
  • 1
  • 17
  • 29
Denys Séguret
  • 355,860
  • 83
  • 755
  • 726
  • Thanks but this is only background color related not background images ............. – Rohit Azad Malik Jun 04 '12 at 09:35
  • can u give me some example on jsfiddle.net – Rohit Azad Malik Jun 04 '12 at 09:36
  • hi Thank for make a jsfiddle but i don't used position ....... – Rohit Azad Malik Jun 04 '12 at 09:42
  • You'll have to define the position of the "child" (that isn't really a child). Either with javascript or with css. There may be a lot of solutions, each one adapted to a specific web composition. – Denys Séguret Jun 04 '12 at 09:43
  • I added another fiddle : in this one you don't have to know the position of the false child when making the css file. – Denys Séguret Jun 04 '12 at 09:47
  • 1
    I'm upvoting this because I've returned to this question several times, and each time I abandon the highest ranking solutions. Sure, they work, but every time, I end up using a 1px PNG background. I've done it like 5 times now. So, yes, as this answer says, it looks like CSS isn't too good at this. Hopefully I'll find this comment next time I'm considering this. – Ben Apr 03 '14 at 16:08
  • This is wrong. The child has to be inside the parent, which is not in the Fiddle example – Luiz Wynne Jan 05 '22 at 17:40
1

I had the same problem and I fixed by setting transparent png image as background for the parent tag.

This is the 1px x 1px PNG Image that I have created with 60% Opacity of black background !

0

You can't do that, unless you take the child out of the parent and place it via positioning.

The only way I know and it actually works, is to use a translucid image (.png with transparency) for the parent's background. The only disavantage is that you can't control the opacity via CSS, other than that it works!

jackJoe
  • 10,908
  • 8
  • 47
  • 63