如何在 CSS 中获取背景图像上的扫描线
How to get scanlines over background image in CSS
我有一张整页背景图片,我想在上面叠加扫描线。我想复制我从小在 20 世纪数字艺术中看到的更传统的对角扫描线效果,例如在 Bootstrap 的图案掩码 5:
中实现的 here
我看过一些关于对角线扫描线的教程,但没能找到类似的教程。我将如何在 CSS 中完成它?
试试这个代码:
.view {
position: relative;
overflow: hidden;
cursor: default;
}
img{
position: relative;
display: block;
}
.view .mask{
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-attachment: fixed;
background: url(https://i.ibb.co/C0MjrsJ/05.png);
background-attachment: fixed;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
height: 100%;
}
<div class="view" bis_skin_checked="1">
<img src="https://mdbootstrap.com/img/Photos/Others/nature-sm.jpg" class="img-fluid" alt="Image of ballons flying over canyons with mask pattern one.">
<div class="mask pattern-5 flex-center" bis_skin_checked="1">
<p class="white-text">.pattern-5</p>
</div>
</div>
这是一个非常简单的css水平扫描线解决方案,使用伪元素:
.scanlines::after {
content:'';
position: absolute;
width:100%;
height: 100%;
background-image: linear-gradient(rgba(39, 43, 46, 0.6) 1px, transparent 1px);
background-size: 2px 2px;
background-attachment: fixed;
}
这将创建一个与根图像元素的大小相匹配的叠加层。然后我们创建扫描线 - 实际上是两条线(一条深色半透明线,一条透明线) - 并重复它。您可以在这里调整线条的颜色和高度:
background-image: linear-gradient(rgba(39, 43, 46, 0.6) 1px
和此处的行之间的 space:
background-size: 2px 2px;
在我的例子中,根元素看起来像这样:
/* The background/header image */
.scanlines {
background-image: url('https://www.telegraph.co.uk/content/dam/Travel/2018/January/sydney-best-GETTY.jpg?imwidth=1400');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
width:100vw;
height:100vh;
position: relative;
}
Codepen here:
我确实尝试将伪元素旋转 45 度,但结果并不令人满意,所以我决定 post 仅针对水平线的答案。
https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient
Temani 提供了以下所有实现方法,我只是将它们收集在一个地方,以便您根据需要更容易地选择它们。
解决方案 1
此解决方案完全复制了 Firefox 的效果,但只能近似 Chrome 和 Edge 的效果,因为它们不支持子像素值:
html {
height:100%;
/* fallback for Firefox */
background:
radial-gradient(#000 0.5px,transparent 0.5px) 0 0 /3px 3px,
radial-gradient(#000 0.5px,transparent 0.5px) 1px 1px /3px 3px,
radial-gradient(#000 0.5px,transparent 0.5px) 2px 2px /3px 3px,
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
/*Chrome and the latest version of Edge*/
background:
conic-gradient(from -90deg at 1px 1px,#000 0 90deg,transparent 0) 0 0 /3px 3px,
conic-gradient(from -90deg at 1px 1px,#000 0 90deg,transparent 0) 1px 1px/3px 3px,
conic-gradient(from -90deg at 1px 1px,#000 0 90deg,transparent 0) 2px 2px/3px 3px,
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
}
它适用于所有现代版本的 Firefox 和 Chrome,但仅适用于 最新的 版本的 Edge。
请注意,最新版本的 Edge(基于 Chromium 的版本,Microsoft 称之为 "New Microsoft Edge")是 currently only available 作为 Microsoft 尚未积极推动的独立安装程序.因此,您网站的用户目前极不可能使用此版本的 Edge,即使他们使用的是 Windows 10 和最新版本。
解决方案 2
这与 Bootstrap 在 pattern-mask-5
中使用的方法完全相同,尽管它适用于所有现代浏览器,但除了添加容器外还需要使用图像 <div>
到标记:
HTML:
<div class="bg-container">
</div>
CSS:
.bg-container {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: url(local/img.png); /* download the image here: https://i.ibb.co/C0MjrsJ/05.png and link to it */
}
解决方案 3
Temani 发布的解决方案是迄今为止针对此问题的最简洁、最跨浏览器的解决方案。
html {
height:100%;
background:
url('data:image/svg+xml;utf8,<svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" /></svg>') 0 0 /3px 3px,
url('data:image/svg+xml;utf8,<svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" /></svg>') 1px 1px/3px 3px,
url('data:image/svg+xml;utf8,<svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" /></svg>') 2px 2px/3px 3px,
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
}
它使用 SVG,因此不需要任何外部图像,并且适用于所有现代浏览器。
这里是使用多重背景的近似值:
html {
height:100%;
background:
radial-gradient(#000 0.5px,transparent 0.5px) 0 0 /3px 3px,
radial-gradient(#000 0.5px,transparent 0.5px) 1px 1px /3px 3px,
radial-gradient(#000 0.5px,transparent 0.5px) 2px 2px /3px 3px,
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
}
你可以和下面使用图像模式的比较
html {
height:100%;
background:
url(https://i.ibb.co/C0MjrsJ/05.png),
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
}
我有一张整页背景图片,我想在上面叠加扫描线。我想复制我从小在 20 世纪数字艺术中看到的更传统的对角扫描线效果,例如在 Bootstrap 的图案掩码 5:
中实现的 here我看过一些关于对角线扫描线的教程,但没能找到类似的教程。我将如何在 CSS 中完成它?
试试这个代码:
.view {
position: relative;
overflow: hidden;
cursor: default;
}
img{
position: relative;
display: block;
}
.view .mask{
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-attachment: fixed;
background: url(https://i.ibb.co/C0MjrsJ/05.png);
background-attachment: fixed;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
height: 100%;
}
<div class="view" bis_skin_checked="1">
<img src="https://mdbootstrap.com/img/Photos/Others/nature-sm.jpg" class="img-fluid" alt="Image of ballons flying over canyons with mask pattern one.">
<div class="mask pattern-5 flex-center" bis_skin_checked="1">
<p class="white-text">.pattern-5</p>
</div>
</div>
这是一个非常简单的css水平扫描线解决方案,使用伪元素:
.scanlines::after {
content:'';
position: absolute;
width:100%;
height: 100%;
background-image: linear-gradient(rgba(39, 43, 46, 0.6) 1px, transparent 1px);
background-size: 2px 2px;
background-attachment: fixed;
}
这将创建一个与根图像元素的大小相匹配的叠加层。然后我们创建扫描线 - 实际上是两条线(一条深色半透明线,一条透明线) - 并重复它。您可以在这里调整线条的颜色和高度:
background-image: linear-gradient(rgba(39, 43, 46, 0.6) 1px
和此处的行之间的 space:
background-size: 2px 2px;
在我的例子中,根元素看起来像这样:
/* The background/header image */
.scanlines {
background-image: url('https://www.telegraph.co.uk/content/dam/Travel/2018/January/sydney-best-GETTY.jpg?imwidth=1400');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
width:100vw;
height:100vh;
position: relative;
}
Codepen here:
我确实尝试将伪元素旋转 45 度,但结果并不令人满意,所以我决定 post 仅针对水平线的答案。
https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient
Temani 提供了以下所有实现方法,我只是将它们收集在一个地方,以便您根据需要更容易地选择它们。
解决方案 1
此解决方案完全复制了 Firefox 的效果,但只能近似 Chrome 和 Edge 的效果,因为它们不支持子像素值:
html {
height:100%;
/* fallback for Firefox */
background:
radial-gradient(#000 0.5px,transparent 0.5px) 0 0 /3px 3px,
radial-gradient(#000 0.5px,transparent 0.5px) 1px 1px /3px 3px,
radial-gradient(#000 0.5px,transparent 0.5px) 2px 2px /3px 3px,
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
/*Chrome and the latest version of Edge*/
background:
conic-gradient(from -90deg at 1px 1px,#000 0 90deg,transparent 0) 0 0 /3px 3px,
conic-gradient(from -90deg at 1px 1px,#000 0 90deg,transparent 0) 1px 1px/3px 3px,
conic-gradient(from -90deg at 1px 1px,#000 0 90deg,transparent 0) 2px 2px/3px 3px,
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
}
它适用于所有现代版本的 Firefox 和 Chrome,但仅适用于 最新的 版本的 Edge。
请注意,最新版本的 Edge(基于 Chromium 的版本,Microsoft 称之为 "New Microsoft Edge")是 currently only available 作为 Microsoft 尚未积极推动的独立安装程序.因此,您网站的用户目前极不可能使用此版本的 Edge,即使他们使用的是 Windows 10 和最新版本。
解决方案 2
这与 Bootstrap 在 pattern-mask-5
中使用的方法完全相同,尽管它适用于所有现代浏览器,但除了添加容器外还需要使用图像 <div>
到标记:
HTML:
<div class="bg-container">
</div>
CSS:
.bg-container {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: url(local/img.png); /* download the image here: https://i.ibb.co/C0MjrsJ/05.png and link to it */
}
解决方案 3
Temani
html {
height:100%;
background:
url('data:image/svg+xml;utf8,<svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" /></svg>') 0 0 /3px 3px,
url('data:image/svg+xml;utf8,<svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" /></svg>') 1px 1px/3px 3px,
url('data:image/svg+xml;utf8,<svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" /></svg>') 2px 2px/3px 3px,
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
}
它使用 SVG,因此不需要任何外部图像,并且适用于所有现代浏览器。
这里是使用多重背景的近似值:
html {
height:100%;
background:
radial-gradient(#000 0.5px,transparent 0.5px) 0 0 /3px 3px,
radial-gradient(#000 0.5px,transparent 0.5px) 1px 1px /3px 3px,
radial-gradient(#000 0.5px,transparent 0.5px) 2px 2px /3px 3px,
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
}
你可以和下面使用图像模式的比较
html {
height:100%;
background:
url(https://i.ibb.co/C0MjrsJ/05.png),
url(https://i.picsum.photos/id/102/800/800.jpg) center/cover;
}