CSS

CSS Opacity: Syntax, Usage, and Examples

The CSS opacity property lets you control the transparency level of an element, from fully visible to completely invisible. Whether you're creating hover effects, softening backgrounds, or layering images, CSS opacity gives you a simple way to control visual emphasis and create depth. It works on text, images, backgrounds, and entire containers—making it a versatile tool in your styling toolkit.

How to Use CSS Opacity

The syntax for opacity CSS is straightforward. The property accepts a value between 0 (completely transparent) and 1 (fully opaque), with decimal values for anything in between.

selector {
  opacity: 0.5;
}

For example, this makes the element 50% transparent:

img {
  opacity: 0.5;
}

The lower the value, the more transparent the element becomes.

When to Use CSS Opacity

Use opacity when you want to:

  • Dim an element to draw attention elsewhere
  • Create hover or fade-in effects
  • Overlay text on top of an image with a soft background
  • Blend layers of content visually

It’s a popular tool for subtle effects that enhance readability and improve user experience.

Highlight Elements on Hover

Make buttons or cards fade in or out when hovered:

.button:hover {
  opacity: 0.7;
}

This gently shifts the appearance without being distracting.

Soften Background Images

Lowering the opacity of a background image makes it feel less intrusive:

.bg-image {
  opacity: 0.3;
}

However, this will also affect everything inside the element—text, icons, etc. (More on that below.)

Create Layered Designs

You can layer semi-transparent images or backgrounds over other content for stylish depth effects.

.overlay {
  background-color: rgba(0, 0, 0, 0.5);
}

This creates the appearance of lowered background opacity CSS without affecting child elements.

Examples of Opacity CSS in Action

Image Fade Effect

img:hover {
  opacity: 0.6;
}

Hovering over the image softens its appearance and signals interactivity.

Transparent Button Background

.transparent-button {
  background-color: rgba(255, 255, 255, 0.5);
}

This uses rgba instead of opacity to avoid affecting the button text.

Dim Entire Container

.card.inactive {
  opacity: 0.3;
}

This can visually signal that an item is disabled or inactive.

Background Opacity CSS Using Layer

<div class="background-container">
  <div class="background-overlay"></div>
  <h1>Text on Top</h1>
</div>

.background-container {
  position: relative;
}

.background-overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: black;
  opacity: 0.4;
  z-index: 1;
}

.background-container h1 {
  position: relative;
  z-index: 2;
}

This setup darkens the background image without affecting the headline.

Learn More About CSS for Opacity

Difference Between opacity and RGBA/HSLA

Using the opacity CSS property affects the entire element, including any child content:

div {
  opacity: 0.5;
}

This will make both the background and the text inside the div semi-transparent.

To avoid this, use an RGBA background color for transparency:

div {
  background-color: rgba(0, 0, 0, 0.5);
}

This creates a CSS background color opacity effect while leaving the text at full opacity.

CSS Background Opacity Without Affecting Children

If you want to reduce the opacity of a background image or color but keep the content fully visible, use layering:

<div class="wrapper">
  <div class="bg-layer"></div>
  <p>This text stays fully visible.</p>
</div>

.wrapper {
  position: relative;
}

.bg-layer {
  background-image: url("image.jpg");
  opacity: 0.4;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

.wrapper p {
  position: relative;
  z-index: 1;
}

This creates an image opacity CSS background effect that looks clean and professional.

Opacity in CSS Transitions

You can animate opacity for smooth effects on hover, focus, or scroll:

.fade-in {
  opacity: 0;
  transition: opacity 0.3s ease-in-out;
}

.fade-in.visible {
  opacity: 1;
}

This is great for popups, modals, tooltips, or animated entrances.

How to Change Opacity on Hover CSS

One of the most common use cases is adjusting opacity on hover:

.card {
  opacity: 1;
  transition: opacity 0.2s;
}

.card:hover {
  opacity: 0.6;
}

This tells users that the element is interactive. It's often used for:

  • Navigation menus
  • Image galleries
  • CTA buttons
  • Product listings

CSS No Opacity on Text Only

Sometimes you want to dim the background but keep the text at full visibility. Don’t use opacity on the parent element—instead, split the background into its own layer using rgba():

.text-box {
  background-color: rgba(0, 0, 0, 0.5); /* Only background is semi-transparent */
  color: #fff;
}

This technique maintains text clarity while achieving the desired background transparency.

CSS Opacity with Variables

If you're using CSS variables or preprocessors like Sass, you can store common opacity levels as variables:

:root {
  --dim-opacity: 0.6;
}

.dim {
  opacity: var(--dim-opacity);
}

This keeps your styling consistent across components.

Using Opacity with Z-Index and Position

If you're layering content, you’ll often combine opacity with z-index and position:

.modal {
  position: fixed;
  top: 0;
  left: 0;
  background-color: rgba(0, 0, 0, 0.7);
  z-index: 999;
  opacity: 0;
  transition: opacity 0.4s;
}

.modal.active {
  opacity: 1;
}

This creates smooth fade-in modals that overlay the entire screen.

Common Opacity Pitfalls

Don’t Apply Opacity to Containers When You Only Want to Dim the Background

Applying opacity: 0.5; to a container makes everything inside it half-visible. This can make text unreadable. Instead, create a separate layer using pseudo-elements or background overlays.

Don’t Use Opacity for Buttons Without Clear Feedback

If a user hovers over a button and it fades too much, they may think it's disabled. Make sure your hover opacity still reads as “active” and not “off-limits.”

Combine Opacity with Motion Carefully

Using opacity in animations is effective but can feel strange if you don’t pair it with scale or position changes. Combine it with transform: scale() or translateY() for better visual impact.

Using the CSS opacity property gives you detailed control over how visible your content appears—from fully solid to ghost-like transparent. Whether you’re layering backgrounds, creating smooth hover effects, or fading in modal windows, opacity CSS helps bring your designs to life.

Learn CSS for Free
Start learning now
button icon
To advance beyond this tutorial and learn CSS by doing, try the interactive experience of Mimo. Whether you're starting from scratch or brushing up your coding skills, Mimo helps you take your coding journey above and beyond.

Sign up or download Mimo from the App Store or Google Play to enhance your programming skills and prepare for a career in tech.

You can code, too.

© 2025 Mimo GmbH