찾다
웹 프론트엔드HTML 튜토리얼CSS秘密花园: 通过亮度调节去强调(De-emphasize)_html/css_WEB-ITnose

《 CSS Secrets 》是 @Lea Verou 最新著作,这本书讲解了有关于CSS中一些小秘密。是一本CSSer值得一读的一本书,经过一段时间的阅读,我、@南北和@彦子一起将在W3cplus发布一系列相关的读后感,与大家一起分享。

很多时候,我们需要通过在元素背后添加一个半透明的深色叠加来让内容变暗,强调并提醒用户关注某个UI元素。例如,lightboxes和“quick tours”接口经常需要这种效果。

来完成这个效果的最常见的技术是添加一个额外的HTML元素来调节亮度,并应用一些如下的CSS:

.overlay { /* For dimming */    position: fixed;    top: 0;    right: 0;    bottom: 0;    left: 0;    background: rgba(0,0,0,.8);}.lightbox { /* The element to draw attention to */    position: absolute;    z-index: 1;    /* [rest of styling] */}

深色叠加的目的是把用户的注意力放到我们希望用户注意的元素上边,然后元素后边的内容都变暗。 .lightbox 有一个更高的 z-index ,可以让它放置在深色叠加之上。所有这些都是非常OK没有问题的,但是它需要一个额外的HTML元素,也就是说效果不能只通过CSS应用。这不是什么大问题,但是这是一个我们希望可以避免的不便之处,如果可以的话。幸运的是,大多数的情况下我们都可以搞定。

基于伪元素的解决方案

我们可以使用伪元素来消除对额外HTML元素的需求,如下:

body.dimmed::before {    position: fixed;    top: 0;    right: 0;    bottom: 0;    left: 0;    z-index: 1;    background: rgba(0,0,0,.8);}

这是一个稍微好点的解决方案,这也意味着我们现在可以直接通过CSS应用这种效果。但是,问题来了,这不是非常方便,因为

元素可能已经应用了一些其它的东西在它的 ::before 伪元素之上了。所以,也就是说如果想要应用这个效果,我们通常需要一些JavaScript来应用到 dimmed 类上。

我们可以通过给元素本身的 ::before 伪元素应用深色叠加、并给它一个 z-index:-1 来解决这个问题,这样它就位于我们的元素之下了。尽管它解决了可移植性的问题,它并不能给我们控制Z轴的位置提供很精确的控制。它可能最终会被放在我们的元素下边(这是可取的)或放在我们的元素以及它的几个父元素下边。

它的另一个问题是,伪元素没有自己的JavaScript事件。当使用一个单独的元素来进行叠加的时候,我们可以给它添加事件句柄——例如:当用户点击叠加层的时候,关闭高亮窗口。如果我们在同一个想要强调的元素上使用伪元素,想要检测用户是否点击了覆盖层或者元素是很棘手的。

box-shadow的解决方案

伪元素的解决方案非常灵活,而且符合大多数人对叠加的期望。但是,对于简单的用例或原型设计,我们可以采用 box-shadow 的spread半径,把它增大到你在每一边希望指定的大小。也就是说我们可以创建一个非常大的零偏移零模糊的shadow,用一种迅速又随性的方式来模拟覆盖层。

box-shadow: 0 0 0 999px rgba(0,0,0,.8);

第一个通过的解决方案有一个明显的问题是,在非常大分辨率( > 2000px )的地方它就会有问题。我们可以通过使用一个再大一点的数字来缓解这种情况,或者通过使用viewport单位来完全地解决这个问题,这样我们可以确保“overlay”总会比我们的viewport大。因为我们不能使用不同的水平和垂直spread半径值,viewport单位应该是 vmax 。如果你对于 vmax 这个单位不熟悉, 1vmax 等于 1vw 或 1vh ,取较大值。 100vw 等于viewport的width,同样, 100vh 等于viewport的height值。因此,能够满足我们需求的最小值是 50vmax ,因为它在每一边都会添加,所以我们的覆盖层的最终尺寸是 100vmax +我们的元素的尺寸:

box-shadow: 0 0 0 50vmax rgba(0,0,0,.8);

这种技术非常快速而且容易应用,但是它有两个相当严重的问题,限制了它的实用性。你发现了吗?

首先,因为我们的元素的尺寸是和viewport相关的,和页面没有关系,当我们滚动页面的时候,会看到覆盖层的边界,除非元素是 position: fixed; 定位的,或者是页面本身不够长,不能滚动。此外,因为页面可以是很长很长的,它不会机智地尝试去通过增加spread半径来克服这一点。相反,我建议你只对 fixed 定位的元素,或页面很小没有滚动的情况下使用这种技术。

第二,使用一个单独的元素(或伪元素)作为覆盖层并不仅仅会将用户的注意力引导到我们想要的元素上。它还会阻止鼠标和页面的其余部分交互,因为它捕获了指针事件。 box-shadow 没有这个属性。因此,它只会在视觉上帮助用户将注意力引导到特定的元素上,而不会自己捕获任何鼠标交互事件。至于这是否可以接受,要看你具体的使用情况。

backdrop解决方案

如果你想要变成焦点的元素是一个模式对话框

元素通过它的 showModal() 方法显示),它已经有一个覆盖层了,通过用户代理样式表。这种原生的覆盖还可以通过 ::backdrop 伪元素来添加样式,例如,让它变暗一点:

dialog::backdrop {    background: rgba(0, 0, 0, .8);}

这种方法唯一需要注意的地方是,在编写的时候,浏览器的支持是非常有限的,所以一定要在使用前检查其当前状态。记住,即使它不被支持,如果对话框没有覆盖层的话,也不会影响到什么东西,因为它只是一个用户体验的改善。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
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는 스크립트를 통해 웹 페이지 동작을 제어하여 동적 및 대화식 기능을 달성합니다.

HTML : 프로그래밍 언어입니까 아니면 다른 것입니까?HTML : 프로그래밍 언어입니까 아니면 다른 것입니까?Apr 15, 2025 am 12:13 AM

Htmlisnotaprogramminglanguage; itisamarkuplanguage.1) htmlstructuresandformatswebcontentusingtags.2) itworksporstylingandjavaScriptOfforIncincivity, WebDevelopment 향상.

HTML : 웹 페이지 구조 구축HTML : 웹 페이지 구조 구축Apr 14, 2025 am 12:14 AM

HTML은 웹 페이지 구조를 구축하는 초석입니다. 1. HTML은 컨텐츠 구조와 의미론 및 사용 등을 정의합니다. 태그. 2. SEO 효과를 향상시키기 위해 시맨틱 마커 등을 제공합니다. 3. 태그를 통한 사용자 상호 작용을 실현하려면 형식 검증에주의를 기울이십시오. 4. 자바 스크립트와 결합하여 동적 효과를 달성하기 위해 고급 요소를 사용하십시오. 5. 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함되며 검증 도구가 필요합니다. 6. 최적화 전략에는 HTTP 요청 감소, HTML 압축, 시맨틱 태그 사용 등이 포함됩니다.

텍스트에서 웹 사이트로 : HTML의 힘텍스트에서 웹 사이트로 : HTML의 힘Apr 13, 2025 am 12:07 AM

HTML은 웹 페이지를 작성하는 데 사용되는 언어로, 태그 및 속성을 통해 웹 페이지 구조 및 컨텐츠를 정의합니다. 1) HTML과 같은 태그를 통해 문서 구조를 구성합니다. 2) 브라우저는 HTML을 구문 분석하여 DOM을 빌드하고 웹 페이지를 렌더링합니다. 3) 멀티미디어 기능을 향상시키는 HTML5의 새로운 기능. 4) 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함됩니다. 5) 최적화 제안에는 시맨틱 태그 사용 및 파일 크기 감소가 포함됩니다.

HTML, CSS 및 JavaScript 이해 : 초보자 안내서HTML, CSS 및 JavaScript 이해 : 초보자 안내서Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

HTML의 역할 : 웹 컨텐츠 구조HTML의 역할 : 웹 컨텐츠 구조Apr 11, 2025 am 12:12 AM

HTML의 역할은 태그 및 속성을 통해 웹 페이지의 구조와 내용을 정의하는 것입니다. 1. HTML은 읽기 쉽고 이해하기 쉽게하는 태그를 통해 컨텐츠를 구성합니다. 2. 접근성 및 SEO와 같은 시맨틱 태그 등을 사용하십시오. 3. HTML 코드를 최적화하면 웹 페이지로드 속도 및 사용자 경험이 향상 될 수 있습니다.

HTML 및 코드 : 용어를 자세히 살펴 봅니다HTML 및 코드 : 용어를 자세히 살펴 봅니다Apr 10, 2025 am 09:28 AM

"Code"는 "Code"BroadlyIncludeLugageslikeJavaScriptandPyThonforFunctureS (htMlisAspecificTypeofCodeFocudecturecturingWebContent)

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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)