CSS3 视觉效果 - filter 属性
核心知识点讲解
什么是 filter 属性?
filter 属性是 CSS3 中的一个强大属性,用于对元素应用各种视觉效果,如模糊、亮度、对比度、灰度、色相旋转、反转、饱和度、sepia 等。它可以用于图片、文本、背景等元素,创建出各种独特的视觉效果。
语法
filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();取值
| 取值 | 描述 |
|---|---|
none |
默认值,不应用任何滤镜效果。 |
blur(px) |
对元素应用高斯模糊效果,值越大,模糊效果越明显。 |
brightness(%) |
调整元素的亮度,值为 100% 时保持原始亮度,值大于 100% 时变亮,值小于 100% 时变暗。 |
contrast(%) |
调整元素的对比度,值为 100% 时保持原始对比度,值大于 100% 时对比度增加,值小于 100% 时对比度降低。 |
drop-shadow(h-shadow v-shadow blur spread color) |
对元素应用阴影效果,参数与 box-shadow 类似。 |
grayscale(%) |
将元素转换为灰度图像,值为 100% 时完全灰度,值为 0% 时保持原始颜色。 |
hue-rotate(deg) |
对元素的色相进行旋转,值为 0deg 时保持原始色相,值越大,色相旋转角度越大。 |
invert(%) |
反转元素的颜色,值为 100% 时完全反转,值为 0% 时保持原始颜色。 |
opacity(%) |
调整元素的透明度,值为 100% 时完全不透明,值为 0% 时完全透明。 |
saturate(%) |
调整元素的饱和度,值为 100% 时保持原始饱和度,值大于 100% 时饱和度增加,值小于 100% 时饱和度降低。 |
sepia(%) |
将元素转换为棕褐色调,值为 100% 时完全棕褐色,值为 0% 时保持原始颜色。 |
url() |
引用 SVG 滤镜定义。 |
作用
filter 属性主要用于以下场景:
- 图片处理:对图片应用各种滤镜效果,如模糊、灰度、sepia 等。
- 视觉效果:创建阴影、发光、模糊等视觉效果。
- 交互反馈:在用户交互时(如悬停)应用滤镜效果,提供视觉反馈。
- 主题设计:通过调整亮度、对比度、色相等,创建特定的主题风格。
- 创意设计:组合使用多种滤镜效果,创建独特的视觉效果。
注意事项
filter属性可能会影响元素的性能,特别是当应用复杂的滤镜效果或在大量元素上使用时。- 对于某些浏览器,可能需要添加浏览器前缀(如
-webkit-filter)以确保兼容性。 filter属性可以应用于任何元素,包括图片、文本、背景等。- 多个滤镜效果可以组合使用,用空格分隔。
- 当
filter属性应用于容器元素时,它会影响容器内的所有子元素。 filter属性中的opacity与 CSS 中的opacity属性类似,但filter: opacity()可以与其他滤镜效果组合使用。
实用案例分析
案例 1:基本滤镜效果展示
HTML 结构:
<div class="filter-container">
<div class="filter-item">
<img src="https://via.placeholder.com/200x200/3498db/ffffff?text=Original" alt="Original">
<p>Original</p>
</div>
<div class="filter-item blur">
<img src="https://via.placeholder.com/200x200/3498db/ffffff?text=Blur" alt="Blur">
<p>Blur</p>
</div>
<div class="filter-item brightness">
<img src="https://via.placeholder.com/200x200/3498db/ffffff?text=Brightness" alt="Brightness">
<p>Brightness</p>
</div>
<div class="filter-item contrast">
<img src="https://via.placeholder.com/200x200/3498db/ffffff?text=Contrast" alt="Contrast">
<p>Contrast</p>
</div>
<div class="filter-item grayscale">
<img src="https://via.placeholder.com/200x200/3498db/ffffff?text=Grayscale" alt="Grayscale">
<p>Grayscale</p>
</div>
<div class="filter-item sepia">
<img src="https://via.placeholder.com/200x200/3498db/ffffff?text=Sepia" alt="Sepia">
<p>Sepia</p>
</div>
</div>CSS 样式:
.filter-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
padding: 20px;
justify-content: center;
}
.filter-item {
text-align: center;
width: 200px;
}
.filter-item img {
width: 100%;
height: 200px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.filter-item p {
margin-top: 10px;
font-size: 14px;
color: #333;
}
.filter-item.blur img {
filter: blur(5px);
}
.filter-item.brightness img {
filter: brightness(150%);
}
.filter-item.contrast img {
filter: contrast(200%);
}
.filter-item.grayscale img {
filter: grayscale(100%);
}
.filter-item.sepia img {
filter: sepia(100%);
}效果说明:
- 展示了原始图片和应用了不同滤镜效果的图片对比
- 包括模糊、亮度、对比度、灰度和 sepia 效果
- 每个图片下方都有对应的滤镜名称
案例 2:滤镜组合效果
HTML 结构:
<div class="filter-combination">
<div class="filter-item original">
<img src="https://via.placeholder.com/300x200/3498db/ffffff?text=Original" alt="Original">
<p>Original</p>
</div>
<div class="filter-item combination-1">
<img src="https://via.placeholder.com/300x200/3498db/ffffff?text=Combination+1" alt="Combination 1">
<p>Blur + Brightness + Contrast</p>
</div>
<div class="filter-item combination-2">
<img src="https://via.placeholder.com/300x200/3498db/ffffff?text=Combination+2" alt="Combination 2">
<p>Grayscale + Hue-rotate + Saturate</p>
</div>
<div class="filter-item combination-3">
<img src="https://via.placeholder.com/300x200/3498db/ffffff?text=Combination+3" alt="Combination 3">
<p>Invert + Sepia + Contrast</p>
</div>
</div>CSS 样式:
.filter-combination {
display: flex;
flex-wrap: wrap;
gap: 20px;
padding: 20px;
justify-content: center;
}
.filter-item {
text-align: center;
width: 300px;
}
.filter-item img {
width: 100%;
height: 200px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.filter-item p {
margin-top: 10px;
font-size: 14px;
color: #333;
text-align: center;
}
.filter-item.combination-1 img {
filter: blur(2px) brightness(120%) contrast(150%);
}
.filter-item.combination-2 img {
filter: grayscale(50%) hue-rotate(90deg) saturate(200%);
}
.filter-item.combination-3 img {
filter: invert(100%) sepia(100%) contrast(150%);
}效果说明:
- 展示了原始图片和应用了不同组合滤镜效果的图片对比
- 组合 1:模糊 + 亮度 + 对比度
- 组合 2:灰度 + 色相旋转 + 饱和度
- 组合 3:反转 + sepia + 对比度
- 每个图片下方都有对应的滤镜组合说明
案例 3:图片悬停效果
HTML 结构:
<div class="hover-effects">
<div class="hover-item">
<img src="https://via.placeholder.com/300x200/3498db/ffffff?text=Hover+Effect+1" alt="Hover Effect 1">
<div class="overlay">
<h3>Blur Effect</h3>
<p>Hover to see the effect</p>
</div>
</div>
<div class="hover-item">
<img src="https://via.placeholder.com/300x200/e74c3c/ffffff?text=Hover+Effect+2" alt="Hover Effect 2">
<div class="overlay">
<h3>Grayscale Effect</h3>
<p>Hover to see the effect</p>
</div>
</div>
<div class="hover-item">
<img src="https://via.placeholder.com/300x200/2ecc71/ffffff?text=Hover+Effect+3" alt="Hover Effect 3">
<div class="overlay">
<h3>Sepia Effect</h3>
<p>Hover to see the effect</p>
</div>
</div>
</div>CSS 样式:
.hover-effects {
display: flex;
flex-wrap: wrap;
gap: 20px;
padding: 20px;
justify-content: center;
}
.hover-item {
position: relative;
width: 300px;
height: 200px;
overflow: hidden;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
cursor: pointer;
}
.hover-item img {
width: 100%;
height: 100%;
transition: all 0.5s ease;
}
.hover-item .overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
color: white;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
opacity: 0;
transition: all 0.5s ease;
}
.hover-item .overlay h3 {
margin: 0 0 10px 0;
font-size: 18px;
}
.hover-item .overlay p {
margin: 0;
font-size: 14px;
}
.hover-item:hover img {
transform: scale(1.1);
}
.hover-item:hover .overlay {
opacity: 1;
}
.hover-item:nth-child(1):hover img {
filter: blur(5px);
}
.hover-item:nth-child(2):hover img {
filter: grayscale(100%);
}
.hover-item:nth-child(3):hover img {
filter: sepia(100%);
}效果说明:
- 展示了图片悬停效果,当鼠标悬停在图片上时,会应用不同的滤镜效果
- 第一个图片:悬停时应用模糊效果
- 第二个图片:悬停时应用灰度效果
- 第三个图片:悬停时应用 sepia 效果
- 同时,图片会有缩放效果,并且显示叠加层
代码示例
完整示例:图片滤镜效果展示
HTML 结构:
<div class="filter-gallery">
<h2>CSS Filter Effects Gallery</h2>
<div class="filter-grid">
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/3498db/ffffff?text=Blur" alt="Blur">
<div class="filter-info">
<h3>Blur</h3>
<p>filter: blur(5px)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/e74c3c/ffffff?text=Brightness" alt="Brightness">
<div class="filter-info">
<h3>Brightness</h3>
<p>filter: brightness(150%)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/2ecc71/ffffff?text=Contrast" alt="Contrast">
<div class="filter-info">
<h3>Contrast</h3>
<p>filter: contrast(200%)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/9b59b6/ffffff?text=Drop+Shadow" alt="Drop Shadow">
<div class="filter-info">
<h3>Drop Shadow</h3>
<p>filter: drop-shadow(5px 5px 5px rgba(0,0,0,0.5))</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/f1c40f/ffffff?text=Grayscale" alt="Grayscale">
<div class="filter-info">
<h3>Grayscale</h3>
<p>filter: grayscale(100%)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/e67e22/ffffff?text=Hue+Rotate" alt="Hue Rotate">
<div class="filter-info">
<h3>Hue Rotate</h3>
<p>filter: hue-rotate(90deg)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/1abc9c/ffffff?text=Invert" alt="Invert">
<div class="filter-info">
<h3>Invert</h3>
<p>filter: invert(100%)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/34495e/ffffff?text=Opacity" alt="Opacity">
<div class="filter-info">
<h3>Opacity</h3>
<p>filter: opacity(50%)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/95a5a6/ffffff?text=Saturate" alt="Saturate">
<div class="filter-info">
<h3>Saturate</h3>
<p>filter: saturate(200%)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/3498db/ffffff?text=Sepia" alt="Sepia">
<div class="filter-info">
<h3>Sepia</h3>
<p>filter: sepia(100%)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/e74c3c/ffffff?text=Combination" alt="Combination">
<div class="filter-info">
<h3>Combination</h3>
<p>filter: blur(2px) brightness(120%) contrast(150%)</p>
</div>
</div>
<div class="filter-card">
<img src="https://via.placeholder.com/250x200/2ecc71/ffffff?text=No+Filter" alt="No Filter">
<div class="filter-info">
<h3>No Filter</h3>
<p>filter: none</p>
</div>
</div>
</div>
</div>CSS 样式:
.filter-gallery {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.filter-gallery h2 {
text-align: center;
margin-bottom: 30px;
color: #333;
}
.filter-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
}
.filter-card {
border-radius: 8px;
overflow: hidden;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease;
}
.filter-card:hover {
transform: translateY(-5px);
}
.filter-card img {
width: 100%;
height: 200px;
object-fit: cover;
}
.filter-card:nth-child(1) img {
filter: blur(5px);
}
.filter-card:nth-child(2) img {
filter: brightness(150%);
}
.filter-card:nth-child(3) img {
filter: contrast(200%);
}
.filter-card:nth-child(4) img {
filter: drop-shadow(5px 5px 5px rgba(0,0,0,0.5));
}
.filter-card:nth-child(5) img {
filter: grayscale(100%);
}
.filter-card:nth-child(6) img {
filter: hue-rotate(90deg);
}
.filter-card:nth-child(7) img {
filter: invert(100%);
}
.filter-card:nth-child(8) img {
filter: opacity(50%);
}
.filter-card:nth-child(9) img {
filter: saturate(200%);
}
.filter-card:nth-child(10) img {
filter: sepia(100%);
}
.filter-card:nth-child(11) img {
filter: blur(2px) brightness(120%) contrast(150%);
}
.filter-info {
padding: 15px;
background-color: white;
}
.filter-info h3 {
margin: 0 0 10px 0;
font-size: 16px;
color: #333;
}
.filter-info p {
margin: 0;
font-size: 12px;
color: #666;
font-family: monospace;
}效果说明:
- 展示了一个图片滤镜效果画廊,包含了各种滤镜效果的示例
- 每个卡片展示了一种滤镜效果,并在下方显示了对应的 CSS 代码
- 当鼠标悬停在卡片上时,卡片会有轻微的上浮效果
- 滤镜效果包括:模糊、亮度、对比度、阴影、灰度、色相旋转、反转、透明度、饱和度、sepia 和组合效果
总结
filter 属性是 CSS3 中的一个强大属性,用于对元素应用各种视觉效果,如模糊、亮度、对比度、灰度、色相旋转、反转、饱和度、sepia 等。通过合理使用 filter 属性,可以创建出各种独特的视觉效果,增强网页的视觉体验。
核心要点:
filter属性可以应用于任何元素,包括图片、文本、背景等。- 多个滤镜效果可以组合使用,用空格分隔。
filter属性可能会影响元素的性能,特别是当应用复杂的滤镜效果或在大量元素上使用时。- 对于某些浏览器,可能需要添加浏览器前缀(如
-webkit-filter)以确保兼容性。 filter属性中的opacity与 CSS 中的opacity属性类似,但filter: opacity()可以与其他滤镜效果组合使用。
通过掌握 filter 属性的用法,可以创建出更加丰富、独特的视觉效果,提升网页的设计质量和用户体验。