阿里云主机折上折
  • 微信号
Current Site:Index > Blender (blend-mode)

Blender (blend-mode)

Author:Chuan Chen 阅读数:53643人阅读 分类: CSS

Blend modes in CSS3 are a powerful visual compositing feature that allows developers to control the color blending between elements using different algorithms, enabling complex layer overlay effects. From simple text masking to intricate image compositing, blend modes open up new creative possibilities for web design.

Fundamentals of Blend Modes

The core of blend modes lies in mathematical formula calculations. When two elements overlap, the system performs calculations on each pixel's RGB channel values according to specific algorithms. CSS3 supports 15 standard blend modes, which can be categorized as follows:

  1. Normal Modes: normal (default)
  2. Darkening Modes: multiply, darken, color-burn
  3. Lightening Modes: screen, lighten, color-dodge
  4. Contrast Modes: overlay, hard-light, soft-light
  5. Difference Modes: difference, exclusion
  6. Color Modes: hue, saturation, color, luminosity
/* Basic Syntax */
.element {
  mix-blend-mode: multiply;
  background-blend-mode: screen;
}

Detailed Explanation of Common Blend Modes

Multiply

Simulates the effect of overlapping printing inks. The formula is: (A * B) / 255. Ideal for creating shadow effects or darkening images:

<div class="container">
  <img src="texture.jpg" style="mix-blend-mode: multiply;">
  <div class="overlay" style="background-color: #ff6b6b;"></div>
</div>

Screen

The opposite of multiply, producing a lightening effect: 255 - [(255 - A) * (255 - B)] / 255. Often used for glow effects:

.glow-effect {
  background: url('stars.png'), 
              radial-gradient(circle, #f8f9fa 0%, transparent 70%);
  background-blend-mode: screen;
}

Overlay

Combines multiply and screen, preserving highlights and shadows: A < 128 ? (2 * A * B / 255) : (255 - 2 * (255 - A) * (255 - B) / 255). Suitable for enhancing contrast:

// Dynamically create overlay effects
document.querySelector('.hero').addEventListener('mousemove', (e) => {
  const x = e.clientX / window.innerWidth * 100;
  const y = e.clientY / window.innerHeight * 100;
  e.target.style.backgroundBlendMode = `overlay`;
  e.target.style.backgroundPosition = `${x}% ${y}%`;
});

Practical Applications

Text Effects

Create dynamic text effects using blend modes:

<style>
  .text-blend {
    font-size: 5rem;
    color: white;
    mix-blend-mode: difference;
    position: relative;
    background: url('noise.png');
  }
</style>

<h1 class="text-blend">Blend Modes</h1>

Image Processing

Achieve professional-level image effects:

.photo-editor {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}
.editor-layer {
  background: 
    url('photo.jpg'),
    linear-gradient(45deg, #ff3366, #ba265d);
  background-blend-mode: luminosity;
  filter: contrast(1.2);
}

Interactive UI Components

Create dynamic button effects:

.btn-blend {
  position: relative;
  background: #4a6fa5;
}
.btn-blend::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: radial-gradient(circle, white 0%, transparent 70%);
  mix-blend-mode: overlay;
  opacity: 0;
  transition: opacity 0.3s;
}
.btn-blend:hover::after {
  opacity: 1;
}

Performance Optimization and Considerations

  1. Hardware Acceleration: Blend modes trigger GPU rendering. It's recommended to use with the will-change property:

    .optimized {
      mix-blend-mode: color-dodge;
      will-change: mix-blend-mode;
    }
    
  2. Stacking Context: Blend modes create a new stacking context, which may affect z-index layering.

  3. Fallback Solutions: Provide fallbacks for browsers that don't support blend modes:

    @supports not (mix-blend-mode: screen) {
      .fallback {
        opacity: 0.8;
      }
    }
    
  4. Mobile Adaptation: Some Android devices have incomplete support for difference mode, requiring real-device testing.

Advanced Techniques and Creative Implementations

Nested Blend Modes

<div class="parent" style="mix-blend-mode: hard-light;">
  <div class="child" style="mix-blend-mode: exclusion;">
    <img src="layer1.png" style="mix-blend-mode: color-burn;">
  </div>
</div>

SVG Blend Applications

<svg width="400" height="400">
  <defs>
    <filter id="blend-filter">
      <feBlend mode="multiply" in2="SourceGraphic"/>
    </filter>
  </defs>
  <rect width="100%" height="100%" fill="#ff5722" filter="url(#blend-filter)"/>
  <circle cx="200" cy="200" r="150" fill="#2196f3"/>
</svg>

Dynamic Video Blending

const video = document.querySelector('video');
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');

function drawFrame() {
  ctx.globalCompositeOperation = 'multiply';
  ctx.drawImage(video, 0, 0);
  requestAnimationFrame(drawFrame);
}
video.addEventListener('play', drawFrame);

Browser Rendering Differences

Different browsers have subtle variations in blend mode implementations:

  • Chrome: More precise gamma correction for soft-light.
  • Firefox: Smoother performance for color-dodge at high contrast.
  • Safari: Sharper blending edges on Retina displays.

Test case:

.test-case {
  width: 100px;
  height: 100px;
  background: 
    linear-gradient(45deg, black 25%, transparent 25%) 0 0/20px 20px,
    repeating-linear-gradient(45deg, red 0 10px, blue 10px 20px);
  background-blend-mode: exclusion;
}

本站部分内容来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn

上一篇:形状与路径

下一篇:遮罩与剪切

Front End Chuan

Front End Chuan, Chen Chuan's Code Teahouse 🍵, specializing in exorcising all kinds of stubborn bugs 💻. Daily serving baldness-warning-level development insights 🛠️, with a bonus of one-liners that'll make you laugh for ten years 🐟. Occasionally drops pixel-perfect romance brewed in a coffee cup ☕.