我们看到,图片的近处是模糊的,而远处是清晰的,我们把这种效果称为景深。
CSS 中有一个属性可以支持元素的平移、旋转、缩放或倾斜。同时,CSS 中还有一个属性可以将模糊或颜色偏移等图形效果应用于元素。大家可以试着通过 MDN 或者其他方式查找哪些 CSS 属性可以满足上述需求。
通常,我们会在 CSS 中对需要应用上述效果的元素直接书写相应的属性值。但是,如何根据场景动态修改上述属性值也是日常业务中常见的需求。
本节挑战,我们为大家提供这样的场景,希望大家能通过 JS 的方式为图片动态添加景深效果。
在 CSS 中,可以支持元素的平移、旋转、缩放或倾斜的属性是 transform
。而可以将模糊或颜色偏移等图形效果应用于元素的属性是 filter
。
transform
属性
transform
属性可以对元素进行二维或三维变换。常见的值包括:
translate(x, y)
: 平移rotate(angle)
: 旋转scale(x, y)
: 缩放skew(x-angle, y-angle)
: 倾斜
示例:
/* 平移 */
transform: translate(50px, 100px);
/* 旋转 */
transform: rotate(45deg);
/* 缩放 */
transform: scale(1.5, 1.5);
/* 倾斜 */
transform: skew(30deg, 20deg);
filter
属性
filter
属性可以对元素应用图形效果,如模糊、亮度、对比度等。常见的值包括:
blur(px)
: 模糊brightness(percentage)
: 亮度contrast(percentage)
: 对比度grayscale(percentage)
: 灰度hue-rotate(angle)
: 色相旋转invert(percentage)
: 反转颜色sepia(percentage)
: 深褐色
示例:
/* 模糊 */
filter: blur(5px);
/* 亮度 */
filter: brightness(150%);
/* 对比度 */
filter: contrast(200%);
/* 色相旋转 */
filter: hue-rotate(90deg);
动态修改属性值
在日常业务中,可能需要根据场景动态修改这些属性值。这通常可以通过 JavaScript 来实现。示例如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic CSS Transformation</title>
<style>
#myElement {
width: 100px;
height: 100px;
background-color: red;
transition: transform 0.5s, filter 0.5s;
}
</style>
</head>
<body>
<div id="myElement"></div>
<button onclick="applyTransform()">Transform</button>
<button onclick="applyFilter()">Filter</button>
<script>
function applyTransform() {
var element = document.getElementById('myElement');
element.style.transform = 'translate(50px, 100px) rotate(45deg) scale(1.5)';
}
function applyFilter() {
var element = document.getElementById('myElement');
element.style.filter = 'blur(5px) brightness(150%)';
}
</script>
</body>
</html>
在这个示例中,当点击按钮时,JavaScript 函数会动态修改 #myElement
元素的 transform
和 filter
属性,从而实现相应的效果。
<html>
<head>
<META charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>为图片添加景深效果</title>
<link rel="stylesheet" href="https://labfile.oss.aliyuncs.com/courses/9203/style06.css">
</head>
<body>
<header>
<div><img class="img1" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-1.png" title="枫叶林"></div>
<div><img class="img2" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-2.png" title="人物"></div>
<div><img class="img3" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-3.png"></div>
<div><img class="img4" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-4.png"></div>
<div><img class="img5" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-5.png"></div>
<div><img class="img6" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-6.png"></div>
</header>
<script>
document.querySelector(`img[title="枫叶林"]`).style.filter="blur(0px)"
document.querySelector(`img[title="人物"]`).style.filter="blur(0px)"
// 请在这里编写代码,根据需求,使得图片达到景深效果
</script>
</body>
</html>
这段代码是使用 JavaScript 中的 querySelector
方法选择文档中的两个图片元素,并分别为它们设置了 filter
样式属性。
具体解释如下:
document.querySelector(
img[title=”枫叶林”]’): 这一部分是使用 CSS 选择器语法选取了一个具有
title属性值为
“枫叶林”` 的图片元素。.style.filter="blur(0px)"
: 这一部分将选中的图片元素的filter
样式属性设置为"blur(0px)"
,即取消了模糊效果,将图片恢复为原来的清晰状态。
同样的操作也针对另一个图片元素:img[title="人物"]
,将其模糊效果也取消,使其恢复清晰。
暂无评论内容