介绍

一张背景图, 一行写字, 一层黑影 (Image Overlay), 如果没有做黑影, 字的颜色容易和图片撞, contrast 就会很烂.

HTML 结构

<div class="container">
<h1>Hello World</h1>
</div>

很简单, 因为图片用 background-image 完成, 黑影用 ::after content: '' 完成. 所以不需要什么 element.

CSS style

.container {
height: 400px; /* 给个高度 */ /* 插入背景图片 */
background-image: url("./images/tifa2.PNG");
background-size: cover;
background-position: center; /* 给 h1 一些 style */
h1 {
color: white;
font-size: 4rem;
} /* 让 h1 居中 */
display: flex;
justify-content: center;
align-items: center;
}

效果

CSS style for image overlay

.container {
position: relative; /* 让 overlay 定位 */
z-index: 0; /* 阻止 overlay 的 z-index -1 去到更高层 */
&::after {
/* 黑色空 div, 填满整个 container */
content: "";
width: 100%;
height: 100%;
background-color: rgba($color: black, $alpha: 0.5); /* 和 container 重叠 */
position: absolute;
top: 0;
left: 0; z-index: -1; /* 必须小于 container 内其它元素 */
}
}

通过 ::after 做出 overlay 然后定位让它和 container 重贴, 再加上 z-index 确保 container 原先内容没有被挡住.

Tips: top, left, width, height

top: 0;
left: 0;
width: 100%;
height: 100%;

可以写成 top, left, bottom, right (但要小心坑)

top: 0;
left: 0;
bottom: 0;
right: 0;

也相等于 shorthand inset: 0

inset: 0;

冷知识: 但这招对 iframe 无效哦, iframe 只接受 width, height 100%, left rigth:0 无法等价于 width 100% 效果, 原理没去查.

效果

当遇上 rounded corners

如果 container 有圆角.

border-radius: 2rem;

效果

overlay 超出圆角了. 解决方法是在 container 加上 overflow: hidden

Final CSS Style

.container {
height: 400px; /* 给个高度 */ /* 插入背景图片 */
background-image: url("./images/tifa2.PNG");
background-size: cover;
background-position: center; /* 给 h1 一些 style */
h1 {
color: white;
font-size: 4rem;
} /* 让 h1 居中 */
display: flex;
justify-content: center;
align-items: center; border-radius: 2rem;
overflow: hidden; /* 防止 overlay 超出圆角*/ position: relative; /* 让 overlay 定位 */
z-index: 0; /* 阻止 overlay 的 z-index -1 去到更高层 */
&::after {
/* 黑色空 div, 填满整个 container */
content: "";
width: 100%;
height: 100%;
background-color: rgba($color: black, $alpha: 0.5); /* 和 container 重叠 */
position: absolute;
top: 0;
left: 0; z-index: -1; /* 必须小于 container 内其它元素 */
}
}

效果

搭配 Gradients

上面的 overlay 用的是 background-color, 这会让整张图都黑. 有时候我们字可能只是出现在左边.

这种情况就可以用 background-image: linear-gradient 替代

background-image: linear-gradient(to right, rgb(255 0 0 / 0.5), rgb(255 255 0 / 1));

Tips: background-image 支持 multiple, 所以我们甚至可以完全不用搞 ::after 定位那一套. 直接 background-image: gradient, url(...) 就可以了.

Overlay 居中

顺便教一个居中技巧.

<div class="container">
<div class="box"></div>
</div>

CSS Style

.container {
width: 500px;
height: 500px;
background-color: pink;
position: relative; .box {
position: absolute;
inset: 0;
width: 100px;
height: 100px;
background-color: cyan;
margin: auto;
}
}

只要 box 有 dimension, 配上 inset 0 和 margin auto, box 就居中了

它和 top, left, transform 的效果是一样的

.box {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

效果

第 2 种做法

参考: webflow 的一个模板

HTML 结构

<div class="container">
<h1>Hello World</h1>
<div class="overlay">
<img src="./images/tifa2.PNG" />
</div>
</div>

它不是用 container background-image 来做背景图, 而是用 <img>.

语义上来讲, 如果是要被 SEO 收入的, 那么用 <img> 是对的, 但如果它更倾向于背景图, 那么应该用 background-image.

img 和 background-image 还有个区别是 img 可以被 drag, 也可以被 save as, 而 background-image 是不可以的 (可以用 pointer-event:none 来阻止这项功能).

CSS Style

.container {
height: 100vh;
display: flex; /* 居中 h1 */
align-items: center;
justify-content: center;
h1 {
color: white;
font-size: 4rem;
} position: relative;
.overlay {
background-color: black; /* 黑影是这样做出来的 */ img {
opacity: 0.7; /* 黑影是这样做出来的 */
width: 100%;
height: 100%;
object-fit: cover;
} position: absolute;
inset: 0;
z-index: -1;
}
}

有两个点值得关注.

第一它实现黑影的方式是给 overlay background-color 黑色. 然后让 img opacity 0.7.

和第一个方案往图片盖一层黑影是颠倒的实现手法.

第二是它的 z-index

第一方案中, z-index: -1 让黑影下沉, 但是在 container 需要 z-index:0, 阻止 z-index 冒泡, 不然黑影就比 container 还底层而无法盖到 container 的 background-image 了.

第二方案中, container 不需要 z-index:0 去阻止 overlay 冒泡. 原因是 container 不负责 background-image. 所以即便 overlay 更底层也无所谓. 反正 container 是空心的.

它的层次是 h1 > container (空心) >  overlay, 此时 mouse hover 接触的是 container 而不是 overlay.

但如果让 container 有一个 background-color, overlay 就被挡住了.

假设让 container z-index:0 阻止冒泡, 那么 <img> 就会在上层, h1 > overlay > container, 此时 mouse hover 接触的是 overlay 而不是 container.

也就是说, <img> 会被 drag 和 save as. 这时就需要用 pointer-event: none 来阻止了.

整体来看, 我不觉得方案二会比方案一好. 感觉它比较混乱. 没有那么直观.

CSS & JS Effect – Image Overlay的更多相关文章

  1. CSS & JS 制作滚动幻灯片

    ==================纯CSS方式==================== <!DOCTYPE html> <html> <head> <met ...

  2. 【转】Maven Jetty 插件的问题(css/js等目录死锁)的解决

    Maven Jetty 插件的问题(css/js等目录死锁,不能自动刷新)的解决:   1. 打开下面的目录:C:\Users\用户名\.m2\repository\org\eclipse\jetty ...

  3. Css Js Loader For Zencart

    Css Js Loader 描述:这个插件很早就出来了,可能知道人非常少 这个插件的功能是整合所有的网站的CSS和JS内容到一个文件里边. 因为CSS和JS文件到了一个文件,加快了程序的运行 在配合其 ...

  4. 购物车数字加减按钮HTML+CSS+JS(有需要嫌麻烦的小伙伴拿走不谢)

    之前在写详情页的时候,如下图 因为自己嫌麻烦,就去看其他网站是怎么写的,想直接拿来用,后来看来看去觉得写得很麻烦,于是最后还是决定自己写,附上HTML+CSS+JS代码,一条龙一站式贴心服务2333 ...

  5. vs合并压缩css,js插件——Bundler & Minifier

    之前做了一个大转盘的抽奖活动,因为比较火,部分用户反馈看不到页面的情况,我怀疑js加载请求过慢导致,所以今天针对之前的一个页面进行调试优化. 首先想到的是对页面的js和css进行压缩优化,百度了下vs ...

  6. nginx资源定向 css js路径问题

    今天玩玩项目,学学nginx发现还不错,速度还可以,但是CSS JS确无法使用,原来Iginx配置时需要对不同类型的文件配置规则,真是很郁闷,不过想想也还是很有道理.闲暇之际,把配置贴上来.#user ...

  7. IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求

    今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html ...

  8. 网站加载css/js/img等静态文件失败

    网站加载css/js/img等静态文件失败,报网站http服务器内部500错误.而服务器中静态文件存在且权限正常. 从浏览器中直接访问文件,出来乱码.这种问题原因在于iis中该网站mime配置报错,不 ...

  9. 【前端】Sublime text3 插件HTML/CSS/JS prettify 格式化代码

    1.首先安装插件 菜单的preference->packages control,然后输入install .. 回车,再输入HTML/CSS/JS prettify 再回车,重启后就可以了. 2 ...

  10. CSS+JS实现兼容性很好的无限级下拉菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...

随机推荐

  1. Top monitor[2.1.11] 开源

    说明 本项目将转为开源项目. \(\text{GitHub}\) 仓库下载链接 \(|\) 项目初始化下载 \(|\) 项目编辑文件下载. 项目说明 声明:此项目由 \(\text{So_noSlac ...

  2. AT_agc022_a 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定字符串 \(S\) , 仅包含互不相同的小写字母, 你需要找到仅包含互不相同的小写 ...

  3. 硬件开发笔记(二十八):TPS54331电源设计(一):5V电源供电原理图设计

    前言   电源供电电路设计很重要,为了更好的给对硬件设计有需求的人,特意将电源设计的基础过程描述出来.  本篇描述设计常用的12V转5V电路3A.   TPS54331(DC-DC稳压器) 概述    ...

  4. python none类型

    一.python中的数据类型:数值类型.序列类型.散列类型. 1.数值类型:整数型(int).浮点数(float).布尔值(bool) 2.序列类型(有序的):序列类型数据的内部元素是有顺序的,可以通 ...

  5. Jmeter函数助手6-time

    time函数用于获取不同格式的当前时间(年月日时分秒). Format string for SimpleDateFormat (optional):时间格式,填入如yyyyMMdd-HHmmss.d ...

  6. 测试工程师-年终总结PPT

    2022年年终总结-xxx 一.首页 2022年年终总结暨2023年工作计划 汇报人:测试组-xxx 日期: 2023.1.13 二.目录 1.年度工作概述 2.工作亮点展示 3.持续精进点 4.明年 ...

  7. 【Java】Enumeration Class 枚举类

    枚举类 enum 对象是有限的确定的.属于类的(静态的) 适合定义一组常量 例如固定的一些事物: - 季节 - 性别 - 状态 自定义枚举类的使用 public class EnumerationTe ...

  8. VSCode 如何将已编辑好的python文件中的 tab 键缩进转换成4个空格键缩进

    事情起源: 使用vscode维护一个7年前的python项目,发现编辑后运行报错,提示缩进错误,原因是当时的项目使用tab做缩进,而我正在用的vscode是使用4空格做缩进,因此造成了缩进不匹配的问题 ...

  9. 实现一个终端文本编辑器来学习golang语言:第三章文本查看器part1

    本章我们来完成文本编辑器的文件打开和查看功能,最后成品如上图.我们将分4步,逐渐完成本章所需功能.内容比较多,会分为两个部分,第一部分主要关注于"View视图"和"buf ...

  10. LVGL line组件

    目录 一.Line(线条)的概念 二.线条组件的使用 1.创建线条对象 2.设置点数组 3.确定y轴的方向(可选) 4.设置线条风格(可选) 4.1创建风格 4.2设置风格 5.将创建好的线段组件添加 ...