《 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解决方案
如果你想要变成焦点的元素是一个模式对话框
dialog::backdrop { background: rgba(0, 0, 0, .8);}
这种方法唯一需要注意的地方是,在编写的时候,浏览器的支持是非常有限的,所以一定要在使用前检查其当前状态。记住,即使它不被支持,如果对话框没有覆盖层的话,也不会影响到什么东西,因为它只是一个用户体验的改善。

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

HTML是一种用于构建网页的语言,通过标签和属性定义网页结构和内容。1)HTML通过标签组织文档结构,如、。2)浏览器解析HTML构建DOM并渲染网页。3)HTML5的新特性如、、增强了多媒体功能。4)常见错误包括标签未闭合和属性值未加引号。5)优化建议包括使用语义化标签和减少文件大小。

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML的作用是通过标签和属性定义网页的结构和内容。1.HTML通过到、等标签组织内容,使其易于阅读和理解。2.使用语义化标签如、等增强可访问性和SEO。3.优化HTML代码可以提高网页加载速度和用户体验。

htmlisaspecifictypefodyfocusedonstructuringwebcontent,而“代码” badlyLyCludEslanguagesLikeLikejavascriptandPytyPythonForFunctionality.1)htmldefineswebpagertuctureduseTags.2)“代码”代码“ code” code code code codeSpassSesseseseseseseseAwiderRangeLangeLangeforLageforLogageforLogicIctInterract

HTML、CSS和JavaScript是Web开发的三大支柱。1.HTML定义网页结构,使用标签如、等。2.CSS控制网页样式,使用选择器和属性如color、font-size等。3.JavaScript实现动态效果和交互,通过事件监听和DOM操作。

HTML定义网页结构,CSS负责样式和布局,JavaScript赋予动态交互。三者在网页开发中各司其职,共同构建丰富多彩的网站。

HTML适合初学者学习,因为它简单易学且能快速看到成果。1)HTML的学习曲线平缓,易于上手。2)只需掌握基本标签即可开始创建网页。3)灵活性高,可与CSS和JavaScript结合使用。4)丰富的学习资源和现代工具支持学习过程。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。