찾다
웹 프론트엔드HTML 튜토리얼更丰富的网页多图层效果:css混合模式_html/css_WEB-ITnose

图层

在Photoshop等图像编辑软件里,图层是最基础的概念之一。我们平时看一张照片,就可能想到“远处的背景”、“近处的人物”这样的描述,这其实就是在划分图层。多个图层从下到上(从远到近)依次拼合,就得到完整的图像。

分图层很有用。一方面,图层是独立的,修改时不会相互影响,另一方面,图层可以保留原始图像,便于还原或做其他调整。

网页里的图层

在网页里,并没有明确的图层的概念,但却很适合当做图层去理解。网页内的每个元素,都可以看做有一个自己的图层。css里的z-index,也很像是调整图层顺序的工具。

准确地说,决定网页内元素覆盖关系的是绘制顺序,绘制顺序靠后的元素,将覆盖绘制顺序靠前的元素。

与绘制顺序密切相关的概念是层叠上下文stacking context)。在一个层叠上下文内,浏览器总是遵循特定的顺序去绘制该上下文内的所有元素。

重叠与合成

我们有时候会很仔细地去调整z-index,这是因为网页内的元素会有重叠:

像这样重叠时,一个元素就挡住另一个元素的一部分。我们可能想改变一下覆盖关系:

在这里,它们的差异只有元素的重叠部分。如果重叠部分和其中一个元素一致,那么看起来就是这个元素更靠上,覆盖了另一个元素。

实际上,网页里的重叠远不只有这样一小部分。上面的示例里的两个元素除了相互重叠外,各自也与本文的背景元素存在重叠。如果在

元素上设置一个背景,那么可以说页面内的所有可见元素的最终显示效果,都和这个背景关联了起来。

网页是如何决定在这样多的重叠关系下,最终呈现的效果的?这也是一个有一定章法的过程,叫做合成compositing)。

简单透明度合成

简单透明度合成simple alpha compositing)是我们很容易理解的一种合成方式。它是在本文接下来要介绍的混合模式出现之前,唯一在网页里应用的合成方式。它在当前各类浏览器内都可用。

之所以说容易理解,是因为它和我们平时的视觉感受很一致。比如前文的例子里改变一下其中一个元素的透明度:

当一个元素是半透明的,那么即便它遮挡了在它后面的元素的一部分,那一部分也是可见的。透明度越高(opacity越接近0),则重叠区域越偏向于被遮挡的元素。完全透明(opacity为0)时,则看起来没有元素被遮挡。

新的合成:混合模式

混合模式一直是Photoshop等图像编辑软件内的图层面板的重要功能,现在它也存在于w3c的推荐规范。

网页中可用的混合模式如下:

上图是对照Photoshop里的混合模式来标注的,其中紫红色部分是网页里可用的混合模式,最右边则是混合模式的群组分类。默认的“正常”,实际就是前面说的简单透明度合成,因此可以认为是新增了15种混合模式。把“正常”也算上的话,现在网页里可用的混合模式一共16种。

虽然混合模式种类不少,但最为常用的并不多,它们分别是正片叠底(Multiply)、滤色(Screen)、叠加(Overlay)和柔光(Soft Light)。

混合模式的简要原理

混合模式本质是分别取前景和背景(参与混合的两个图层)的像素点,然后用它们的颜色值进行数学运算,从而得到一个新的颜色值。每一个重叠区域的像素点都会经过这个计算过程。

下面以正片叠底为例,说明一下这个过程。

颜色值归一化

混合模式既然拿颜色值来做数学计算,那么颜色值一定是数字的形式。不过,颜色值会对应怎样的数字呢?在混合模式计算里,所有的颜色值都是从0到1的小数(区间[0, 1])。因此,颜色值在参与计算前,都会转换为这样的小数。

颜色都可以用RGB来表示,如纯白色在css里可以表示为rgb(255, 255, 255)。注意RGB三通道的最大值为255,最小值为0,因此可以用通道色值÷255的计算式转换为0到1的数字。比如纯白色将是rgb(1, 1, 1)。

分通道进行计算

正片叠底(Multiply,日语版写作“乗算”)的计算式是:

x = a × b

可以看到,这就是一个简单的乘法。由于都是0到1之间的小数,因此乘法运算会使结果值更接近0(比如0.8 x 0.5 = 0.4)。因此,正片叠底是一个变暗的混合模式。

每一种混合模式,都会对应这样一个计算式,其中a表示前景图层(Active Layer),b表示背景图层(Background Layer)。RGB三通道分别进行一次运算后,就可以得到混合后的颜色值。整个过程如下:

在图层设置了透明度的情况下,混合的计算式中的数字仍然取图层原本的像素颜色(也就是opacity: 1;时看到的颜色)。

css用法说明

与混合模式有关的一共3个属性,background-blend-mode、mix-blend-mode和isolation。

background-blend-mode

这个属性一般和多重背景的background-image搭配使用,它和background-image一样可以指定多个值。这将在某一个元素的多个背景之间形成混合,比如:

.blending-element-0 {    background-image: url(1.jpg), url(2.jpg), url(3.jpg);    background-blend-mode: multiply, screen;}

可以看到,这个元素指定了多个背景,从上到下依次是1.jpg、2.jpg、3.jpg。下面的background-blend-mode则是与它对应的,它表示1.jpg的混合模式是multiply,2.jpg的混合模式是screen,3.jpg的混合模式是multiply(当background-blend-mode的数目比background-image少时,会按照值列表进行重复)。

需要注意的是,其中3.jpg这个位于最下层的背景(该元素无背景色),它的混合模式multiply其实是没有作用的,可以认为就是默认值normal。你可以试试在Photoshop里只留一个图层,然后切换各种混合模式,会发现图像不会有任何变化。

如果元素指定了背景色(background-color),那么背景色将成为最下层的背景。

如果有使用background这个简写属性,那么background-blend-mode的值将会被重置为默认。

mix-blend-mode与isolation

这2个属性是搭配使用的。相比前面的background-blend-mode是应用在单个元素的多背景之间,mix-blend-mode则是应用于多个元素,而且除背景外,元素内的文字等其他内容也会被混合。

mix-blend-mode比较类似opacity,作用于一个元素的同时也会作用于这个元素的全部子元素。因此,如果不想要子元素内容也受到影响(就像设置半透明时可能希望里面的文字仍是不透明的),改用background-blend-mode会更合适。

使用mix-blend-mode的代码大致这样:

<div class="container">    <div class="blending-element-1"></div>    <div class="blending-element-2"></div></div>
.blending-element-1,.blending-element-2{    mix-blend-mode: soft-light;}

在这个例子中,只要div.blending-element-1和div.blending-element-2存在重叠,就可以有混合效果。那么,只是这2个元素之间混合吗?父元素div.container有背景,甚至前面还有其他的位于下方的元素的话,它们也参与混合吗?

这就是如何界定哪些元素参与混合的问题。网页里是这样做的:以层叠上下文(stacking context)为依据,为元素进行分组,位于同一个层叠上下文内的元素算作同一组,同一组内才能发生混合

请再看这样一个例子(只列出了相关的css):

<div class="container">    <div class="inner-wrapper">        <img class="blending-image lazy"  src="/static/imghwm/default1.png"  data-src="1.jpg"  alt="Rorona">    </div></div>
.container {    background: gray;}.blending-image {    mix-blend-mode: multiply;}

效果是:

可以看到div.container的灰色背景和img.blending-image的图片内容已经有了混合效果。这时候,再给中间的元素div.inner-wrapper稍作改变:

.inner-wrapper{    isolation: isolate;}

会看到混合模式失效了:

可以看到,在有了isolation: isolate这个属性后,好像就有了字面上“隔离”的效果。

事实上,并没有“隔离”这种特殊效果,它的本质是创建新的层叠上下文。在元素合成这一点上,你可以理解为是新开一个分组。分组有什么用呢?请看下图:

这种层级关系非常像html的DOM树,只不过,每一个节点(分组)的生成,都需要有对应元素创建新的层叠上下文。如果没有元素创建新层叠上下文,那么无论DOM树多么复杂,它们都属于同一个层叠上下文内(也就是上图没有任何group,layer1~6平铺)。

分组会改变元素参与混合的先后顺序。在复杂的DOM树中,可能有多个元素都设置了混合模式,这时候,总是组内的图层先相互混合,然后把整个组看作一个整体,再和组外的其他元素混合。由于DOM元素默认的混合方式都是normal,也就是上层遮挡下层的风格,因此看起来就好像组内和组外隔离了开来,这就是isolation的意思。

前面说isolation可以和mix-blend-mode搭配使用,就是因为它可以为元素之间的混合增加一层控制。对于background-blend-mode而言,isolation并没有用,因为background-blend-mode作用的多个背景都位于同一个元素内部,相当于一定在一个独立的分组内,和外部的其他元素无关。

关于更多的创建新的层叠上下文的条件,推荐查看MDN的文档。你可以看到isolation: isolate;只是其中的一种情况。

附带的一点补充

浏览器兼容性

  • background-blend-mode

  • mix-blend-mode

就本文的时间点而言,浏览器的支持范围还是有些不足。不过,混合模式只是一个视觉效果,要做兼容的话,先看看那些不支持的浏览器里的效果吧。如果差得不多,你也许可以接受。如果情况并不能接受,那就做一些调整,比如图片素材等,直到它看起来不是太难看。

合成的另一个步骤

w3c文档里提到合成(compositing)实际上分为两步,第一步是混合(blending),紧接着还有第二步叫Porter-Duff compositing。如果你有兴趣,可以自行查看。

这个Porter-Duff compositing虽然包含了很多种类,但就css而言,其实只有source-over可用(也就是说,固定的)。这也正是和我们视觉感受最一致的前景覆盖后景的效果。

前文有提到混合模式的计算式所取的颜色值是不考虑透明度的,但实际我们知道在应用混合模式的同时设置透明度是可以改变效果的。这就是因为透明度会在这第二步合成里参与计算。

更多混合模式的计算原理

推荐阅读Photoshop Blend Modes Explained。

结语

一个有趣的事情是,我们在用混合模式的时候,几乎都是会去一个一个试,直到找到看起来还不错的效果。而不是说,我能一眼知道应该用哪个混合模式。不过即便如此,了解一点混合模式的原理,也还是应该有助于我们更快地找到那个不错的混合模式的,大概。

在我看来,网页的混合模式可以减少某些图像素材的编辑工作。另外,因为原图被保留了下来,所以可以在任何需要的时候还原,或者重新参与合成。

(重新编辑自我的博客,原文地址:http://acgtofe.com/posts/2016/01/blending-modes-adventure/)

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
HTML의 부울 속성은 무엇입니까? 몇 가지 예를 들어주십시오.HTML의 부울 속성은 무엇입니까? 몇 가지 예를 들어주십시오.Apr 25, 2025 am 12:01 AM

부울 속성은 값없이 활성화되는 HTML의 특수 속성입니다. 1. 부울 속성은 입력 상자를 비활성화하는 등의 존재 여부에 따라 요소의 동작을 제어합니다. 2. 작업 원칙은 브라우저가 구문 분석 할 때 속성의 존재에 따라 요소 동작을 변경하는 것입니다. 3. 기본 사용법은 속성을 직접 추가하는 것이며, 고급 사용량은 JavaScript를 통해 동적으로 제어 될 수 있습니다. 4. 일반적인 실수는 값을 설정해야한다고 잘못 생각하고 올바른 글쓰기 방법은 간결해야합니다. 5. 모범 사례는 코드를 간결하게 유지하고 부울 속성을 합리적으로 사용하여 웹 페이지 성능 및 사용자 경험을 최적화하는 것입니다.

HTML 코드를 어떻게 검증 할 수 있습니까?HTML 코드를 어떻게 검증 할 수 있습니까?Apr 24, 2025 am 12:04 AM

HTML 코드는 온라인 유효성 검사기, 통합 도구 및 자동화 된 프로세스를 통해 깨끗할 수 있습니다. 1) w3cmarkupvalidationservice를 사용하여 온라인으로 HTML 코드를 확인하십시오. 2) 실시간 확인을 위해 VisualStudioCode에 HTMLHINT 확장을 설치하고 구성하십시오. 3) htmltidy를 사용하여 시공 프로세스에서 HTML 파일을 자동으로 확인하고 청소하십시오.

HTML vs. CSS 및 JavaScript : 웹 기술 비교HTML vs. CSS 및 JavaScript : 웹 기술 비교Apr 23, 2025 am 12:05 AM

HTML, CSS 및 JavaScript는 최신 웹 페이지를 구축하기위한 핵심 기술입니다. 1. HTML 웹 페이지 구조를 정의합니다. 2. CSS는 웹 페이지의 모양을 담당합니다.

마크 업 언어로서의 HTML : 기능과 목적마크 업 언어로서의 HTML : 기능과 목적Apr 22, 2025 am 12:02 AM

HTML의 기능은 웹 페이지의 구조와 내용을 정의하는 것이며, 그 목적은 정보를 표시하는 표준화 된 방법을 제공하는 것입니다. 1) HTML은 타이틀 및 단락과 같은 태그 및 속성을 통해 웹 페이지의 다양한 부분을 구성합니다. 2) 콘텐츠 및 성능 분리를 지원하고 유지 보수 효율성을 향상시킵니다. 3) HTML은 확장 가능하므로 사용자 정의 태그가 SEO를 향상시킬 수 있습니다.

HTML, CSS 및 JavaScript의 미래 : 웹 개발 동향HTML, CSS 및 JavaScript의 미래 : 웹 개발 동향Apr 19, 2025 am 12:02 AM

HTML의 미래 트렌드는 의미론 및 웹 구성 요소이며 CSS의 미래 트렌드는 CSS-In-JS 및 CSShoudini이며, JavaScript의 미래 트렌드는 WebAssembly 및 서버리스입니다. 1. HTML 시맨틱은 접근성과 SEO 효과를 향상시키고 웹 구성 요소는 개발 효율성을 향상 시키지만 브라우저 호환성에주의를 기울여야합니다. 2. CSS-in-JS는 스타일 관리 유연성을 향상 시키지만 파일 크기를 증가시킬 수 있습니다. CSShoudini는 CSS 렌더링의 직접 작동을 허용합니다. 3. Webosembly는 브라우저 애플리케이션 성능을 최적화하지만 가파른 학습 곡선을 가지고 있으며 서버리스는 개발을 단순화하지만 콜드 스타트 ​​문제의 최적화가 필요합니다.

HTML : 구조, CSS : 스타일, 자바 스크립트 : 동작HTML : 구조, CSS : 스타일, 자바 스크립트 : 동작Apr 18, 2025 am 12:09 AM

웹 개발에서 HTML, CSS 및 JavaScript의 역할은 다음과 같습니다. 1. HTML은 웹 페이지 구조를 정의하고, 2. CSS는 웹 페이지 스타일을 제어하고 3. JavaScript는 동적 동작을 추가합니다. 그들은 함께 현대 웹 사이트의 프레임 워크, 미학 및 상호 작용을 구축합니다.

HTML의 미래 : 웹 디자인의 진화 및 트렌드HTML의 미래 : 웹 디자인의 진화 및 트렌드Apr 17, 2025 am 12:12 AM

HTML의 미래는 무한한 가능성으로 가득합니다. 1) 새로운 기능과 표준에는 더 많은 의미 론적 태그와 WebComponents의 인기가 포함됩니다. 2) 웹 디자인 트렌드는 반응적이고 접근 가능한 디자인을 향해 계속 발전 할 것입니다. 3) 성능 최적화는 반응 형 이미지 로딩 및 게으른로드 기술을 통해 사용자 경험을 향상시킬 것입니다.

HTML vs. CSS vs. JavaScript : 비교 개요HTML vs. CSS vs. JavaScript : 비교 개요Apr 16, 2025 am 12:04 AM

웹 개발에서 HTML, CSS 및 JavaScript의 역할은 다음과 같습니다. HTML은 컨텐츠 구조를 담당하고 CSS는 스타일을 담당하며 JavaScript는 동적 동작을 담당합니다. 1. HTML은 태그를 통해 웹 페이지 구조와 컨텐츠를 정의하여 의미를 보장합니다. 2. CSS는 선택기와 속성을 통해 웹 페이지 스타일을 제어하여 아름답고 읽기 쉽게 만듭니다. 3. JavaScript는 스크립트를 통해 웹 페이지 동작을 제어하여 동적 및 대화식 기능을 달성합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기