html - without - transparent background image css

How do I give text or an image a transparent background using CSS? (18)

Is it possible, using CSS only, to make the background of an element semi-transparent but have the content (text & images) of the element opaque?

I'd like to accomplish this without having the text and the background as two separate elements.

When trying:

p {
  position: absolute;
  background-color: green;
  filter: alpha(opacity=60);
  opacity: 0.6;

span {
  color: white;
  filter: alpha(opacity=100);
  opacity: 1;
  <span>Hello world</span>

It looks like child elements are subjected to the opacity of their parents, so opacity:1 is relative to the opacity:0.6 of the parent.

You can do with rgba color code using css like this example given bellow.

.imgbox img{
  background:rgba(74, 19, 61, 0.4);
  text-shadow:0px 2px 5px #000079;
<div class"imgbox">
<img src="">
  <div class="overlay">
    <p>This is Simple Text.</p>

background-color:rgba(255,0,0,0.5); as mentioned above is the best answer simply put. To say use CSS3, even in 2013, is not simple because the level of support from various browsers changes with every iteration.

While background-color is supported by all major browsers (not new to CSS3) [1] the alpha transparence can be tricky, especially with Internet Explorer prior to version 9 and with border color on Safari prior to version 5.1. [2]

Using something like Compass or SASS can really help production and cross platform compatibility.

[1] W3Schools: CSS background-color Property

[2] Norman's Blog: Browser Support Checklist CSS3 (October 2012)

A while back, I wrote about this in Cross Browser Background Transparency With CSS.

Bizarrely Internet Explorer 6 will allow you to make the background transparent and keep the text on top fully opaque. For the other browsers I then suggest using a transparent PNG file.

CSS3 has an easy solution of your problem. Use:


Here, rgba stands for red, green, blue and alpha value. Green value is obtained because of 255 and half transparency is obtained by 0.5 alpha value.

Either use a semi-transparent PNG image or use CSS3:


Here's an article from, Opacity, RGBA and compromise (2007-06-03).

Here's how I do this (it might not be optimal, but it works):

Create the div that you want to be semi-transparent. Give it a class/id. Leave it EMPTY, and close it. Give it a set height and width (say, 300 pixels by 300 pixels). Give it an opacity of 0.5 or whatever you like, and a background color.

Then, DIRECTLY BELOW that div, create another div with a different class/id. Create a paragraph inside it, where you'll place your text. Give the div position: relative, and top: -295px (that's NEGATIVE 295 pixels). Give it a z-index of 2 for good measure, and make sure its opacity is 1. Style your paragraph as you like, but make sure the dimensions are less than that of the first div so it doesn't overflow.

That's it. Here's the code:

.trans {
  opacity: 0.5;
  height: 300px;
  width: 300px;
  background-color: orange;
.trans2 {
  opacity: 1;
  position: relative;
  top: -295px;
.trans2 p {
  width: 295px;
  color: black;
  font-weight: bold;
  <div class="trans">
  <div class="trans2">
      text text text

This works in Safari 2.x, I don't know about Internet Explorer.

If you are a Photoshop guy, you can also use:

 #some-element {
  background-color: hsla(170, 50%, 45%, 0.9); // **0.9 is the opacity range from 0 - 1**


#some-element {
  background-color: rgba(170, 190, 45, 0.9); // **0.9 is the opacity range from 0 - 1**

If you're using Less, you can use fade(color, 30%).

In order to make the background of an element semi-transparent but have the content (text & images) of the element opaque. You need to write css code for that image and you have to add one attribute called opacity with minimum value. e.g.

   position: relative;
   background-color: cyan;
  opacity: 0.7;

// lesser the value more will be transparency, ore the value less will be transparency.

The easiest method would be to use a semi-transparent background PNG image.

You can use JavaScript to make it work in Internet Explorer 6 if you need to.

I use the method outlined in Transparent PNGs in Internet Explorer 6.

Other than that,

you could fake it using two side-by-side sibling elements - make one semi-transparent, then absolutely position the other over the top?

There is a trick to minimize the markup: Use a pseudo element as the background and you can set the opacity to it without affecting the main element and its children:



Relevant code:

p {
  position: relative;
p:after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #fff;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
  opacity: .6;
  z-index: -1;
/*** The following is just for demo styles  ***/

body {
  background: url('') no-repeat;
  background-size: cover;
p {
  width: 50%;
  padding: 1em;
  margin: 10% auto;
  font-family: arial, serif;
  color: #000;
img {
  display: block;
  max-width: 90%;
  margin: .6em auto;
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ligula ut nunc dignissim molestie.
  <img src="" alt="" />

Browser support is Internet Explorer 8 and later.

There's an easier solution to put an overlay over an image on the same div. It's not the right use of this tool. But works like a charm to make that overlay using CSS.

Use an inset shadow like this:

box-shadow: inset 0 0 0 1000px rgba(255, 255, 255, 0.9);

That's all :)

This method allows you to have an image in the background and not only a solid color, and can be used to have transparency on other attributes such as borders. No transparent PNG images are required.

Use :before (or :after) in CSS and give them the opacity value to leave the element at its original opacity. Thus you can use :before to make a faux element and give it the transparent background (or borders) you want and move it behind the content you want to keep opaque with z-index.

An example (fiddle) (note that the DIV with class dad is just to provide some context and contrast to the colors, this extra element is actually not needed, and the red rectangle is moved a bit down and to the right to leave visible the background behind the fancyBg element):

<div class="dad">
    <div class="fancyBg">
        Test text that should have solid text color lets see if we can manage it without extra elements

with this CSS:

.dad {
    background: lime; border: 1px double black; margin: 1ex 2ex;
    padding: 0.5ex; position: relative; -k-z-index: 5;
.fancyBg {
    border: 1px dashed black; position: relative; color: white; font-weight: bold;
    z-index: 0; /*background: black;*/
.fancyBg:before {content:'-'; display: block;
    position: absolute; background: red; opacity: .5;
    top: 2ex; right: -2ex; bottom: -2ex; left: 2ex;
    /*top: 0; right: 0; bottom: 0; left: 0;*/
    z-index: -1;

In this case .fancyBg:before has the CSS properties you want to have with transparency (red background in this example, but can be an image or borders). It's positioned as absolute to move it behind .fancyBg (use values of zero or whatever is more appropriate for your needs).

You can solve this for Internet Explorer 8 by (ab)using the gradient syntax. The color format is ARGB. If you are using the Sass preprocessor you can convert colors using the built-in function "ie-hex-str()".

background: rgba(0,0,0, 0.5);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#80000000')";

You can use RGB color with opacity like this color code in RGB (63,245,0) and add opacity like (63,245,0,0.5) and also add RGBA replace RGB. A use for opacity


You can use pure CSS 3: rgba(red, green, blue, alpha), where alpha is the level of transparency you want. There is no need for JavaScript or jQuery.

Here is an example:

    background:rgba(192.233, 33, 0.5)