介绍

一张背景图, 一行写字, 一层黑影 (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. 基于EF Core存储的Serilog持久化服务

    前言 Serilog是 .NET 上的一个原生结构化高性能日志库,这个库能实现一些比内置库更高度的定制.日志持久化是其中一个非常重要的功能,生产环境通常很难挂接调试器或者某些bug的触发条件很奇怪.为 ...

  2. 修改 /etc/resolv.conf

    修改 /etc/resolv.conf /etc/resolv.conf 是 Linux 系统中用于配置 DNS 解析器的文件.确认 systemd-resolved 或 NetworkManager ...

  3. MiniAuth 一个轻量 ASP.NET Core Identity Web 后台管理中间插件

    MiniAuth 一个轻量 ASP.NET Core Identity Web 后台管理中间插件 「一行代码」为「新.旧项目」 添加 Identity 系统跟用户.权限管理网页后台系统 开箱即用,避免 ...

  4. Jenkins 配合Pipeline使用Docker

    配合Pipeline使用Docker 许多组织使用Docker跨机器统一构建和测试环境,并为部署应用程序提供高效机制.从Pipeline 2.5及更高版本开始,Pipeline内置了从Jenkinsf ...

  5. 张高兴的 MicroPython 入门指南:(三)使用串口通信

    目录 什么是串口 使用方法 使用板载串口相互通信 硬件需求 电路 代码 使用板载的 USB 串口 参考 什么是串口 串口是串行接口的简称,这是一个非常大的概念,在嵌入式中串口通常指 UART(Univ ...

  6. UDP协议测试

    UDP协议测试 我们一般想到测试连通性时第一考虑到的就是使用ping命令. 但是我们知道ping命令使用的是icmp协议,属于tcp/ip协议中的一个子协议,所以我们可以用ping或tcping命令来 ...

  7. Tomcat日志信息有乱码的处理方法

    1.问题描述 1.1.Idea中的tomcat日志有乱码 1.2.直接启动tomcat的日志有乱码 1.3.原因分析 问题是由于tomcat使用的编码和操作系统使用的编码不一致导致: Windows1 ...

  8. 【微信小程序】 列表查询功能

    对应本地生活案例: https://www.bilibili.com/video/BV1834y1676P?p=52 HTML代码部分: 就是普通的wx-for指令遍历 <!--pages/cl ...

  9. 【H5】01 入门 & 概述

    前言 看了很多教程资料,很难受,东西讲不全,一些属性就是简单的解释就没了,不能追根问底的了解这个东西,所以在后面, 越是学习就越是费解,出现的问题也越来越多.什么快速学完都是不存在的,培训机构的东西也 ...

  10. 《Python数据可视化之matplotlib实践》 源码 第四篇 扩展 第十章

    图 10.1 import matplotlib.pyplot as plt import numpy as np plt.axes([0.1, 0.7, 0.3, 0.3], frameon=Tru ...