Jadual Kandungan
基于伪元素的解决方案
box-shadow的解决方案
backdrop解决方案
Rumah hujung hadapan web html tutorial CSS秘密花园: 通过亮度调节去强调(De-emphasize)_html/css_WEB-ITnose

CSS秘密花园: 通过亮度调节去强调(De-emphasize)_html/css_WEB-ITnose

Jun 24, 2016 am 11:21 AM

《 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] */}
Salin selepas log masuk

深色叠加的目的是把用户的注意力放到我们希望用户注意的元素上边,然后元素后边的内容都变暗。 .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);}
Salin selepas log masuk

这是一个稍微好点的解决方案,这也意味着我们现在可以直接通过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);
Salin selepas log masuk

第一个通过的解决方案有一个明显的问题是,在非常大分辨率( > 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);
Salin selepas log masuk

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

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

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

backdrop解决方案

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

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

dialog::backdrop {    background: rgba(0, 0, 0, .8);}
Salin selepas log masuk

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kesukaran mengemas kini caching laman web akaun rasmi: Bagaimana untuk mengelakkan cache lama yang mempengaruhi pengalaman pengguna selepas kemas kini versi? Kesukaran mengemas kini caching laman web akaun rasmi: Bagaimana untuk mengelakkan cache lama yang mempengaruhi pengalaman pengguna selepas kemas kini versi? Mar 04, 2025 pm 12:32 PM

Cache kemas kini laman web akaun rasmi, perkara ini mudah dan mudah, dan ia cukup rumit untuk minum periuknya. Anda bekerja keras untuk mengemas kini artikel akaun rasmi, tetapi pengguna masih membuka versi lama. Dalam artikel ini, mari kita lihat kelainan dan bertukar di belakang ini dan bagaimana menyelesaikan masalah ini dengan anggun. Selepas membacanya, anda boleh dengan mudah menangani pelbagai masalah caching, yang membolehkan pengguna anda sentiasa mengalami kandungan segar. Mari kita bincangkan asas -asas terlebih dahulu. Untuk meletakkannya secara terang -terangan, untuk meningkatkan kelajuan akses, penyemak imbas atau pelayan menyimpan beberapa sumber statik (seperti gambar, CSS, JS) atau kandungan halaman. Kali seterusnya anda mengaksesnya, anda boleh mengambilnya secara langsung dari cache tanpa perlu memuat turunnya lagi, dan ia secara semula jadi cepat. Tetapi perkara ini juga pedang bermata dua. Versi baru dalam talian,

Bagaimana saya menggunakan atribut pengesahan borang html5 untuk mengesahkan input pengguna? Bagaimana saya menggunakan atribut pengesahan borang html5 untuk mengesahkan input pengguna? Mar 17, 2025 pm 12:27 PM

Artikel ini membincangkan menggunakan atribut pengesahan bentuk HTML5 seperti had, corak, min, max, dan panjang untuk mengesahkan input pengguna secara langsung dalam penyemak imbas.

Apakah amalan terbaik untuk keserasian penyemak imbas dalam HTML5? Apakah amalan terbaik untuk keserasian penyemak imbas dalam HTML5? Mar 17, 2025 pm 12:20 PM

Artikel membincangkan amalan terbaik untuk memastikan keserasian silang pelayar HTML5, memberi tumpuan kepada pengesanan ciri, peningkatan progresif, dan kaedah ujian.

Bagaimana cara menambah kesan strok kepada imej PNG di laman web? Bagaimana cara menambah kesan strok kepada imej PNG di laman web? Mar 04, 2025 pm 02:39 PM

Artikel ini menunjukkan penambahan sempadan PNG yang cekap ke halaman web menggunakan CSS. Ia berpendapat bahawa CSS menawarkan prestasi unggul berbanding dengan JavaScript atau perpustakaan, memperincikan cara menyesuaikan lebar sempadan, gaya, dan warna untuk kesan halus atau menonjol

Apakah tujuan & lt; DATALIST & GT; unsur? Apakah tujuan & lt; DATALIST & GT; unsur? Mar 21, 2025 pm 12:33 PM

Artikel ini membincangkan html & lt; datalist & gt; elemen, yang meningkatkan bentuk dengan menyediakan cadangan autokomplete, meningkatkan pengalaman pengguna dan mengurangkan kesilapan. Kira -kira: 159

Apakah tujuan & lt; kemajuan & gt; unsur? Apakah tujuan & lt; kemajuan & gt; unsur? Mar 21, 2025 pm 12:34 PM

Artikel ini membincangkan html & lt; kemajuan & gt; elemen, tujuan, gaya, dan perbezaan dari & lt; meter & gt; elemen. Tumpuan utama adalah menggunakan & lt; kemajuan & gt; untuk menyelesaikan tugas dan & lt; meter & gt; untuk stati

Bagaimana saya menggunakan html5 & lt; masa & gt; elemen untuk mewakili tarikh dan masa secara semantik? Bagaimana saya menggunakan html5 & lt; masa & gt; elemen untuk mewakili tarikh dan masa secara semantik? Mar 12, 2025 pm 04:05 PM

Artikel ini menerangkan html5 & lt; time & gt; elemen untuk perwakilan tarikh/masa semantik. Ia menekankan pentingnya atribut DateTime untuk pembacaan mesin (format ISO 8601) bersama teks yang boleh dibaca manusia, meningkatkan aksesibilit

Apakah tujuan & lt; meter & gt; unsur? Apakah tujuan & lt; meter & gt; unsur? Mar 21, 2025 pm 12:35 PM

Artikel ini membincangkan html & lt; meter & gt; elemen, digunakan untuk memaparkan nilai skalar atau pecahan dalam julat, dan aplikasi umum dalam pembangunan web. Ia membezakan & lt; meter & gt; dari & lt; kemajuan & gt; dan Ex

See all articles