高级CSS

掌握CSS函数、混合模式、滤镜等高级特性

CSS函数

CSS提供了多种内置函数,可以在属性值中使用:

calc() 函数

用于动态计算长度值:

CSS
.container {
    width: calc(100% - 40px);
    height: calc(50vh + 100px);
}

min() 和 max() 函数

用于设置最小和最大值:

CSS
.responsive-element {
    width: min(100%, 500px);
    font-size: max(16px, 2vw);
}

clamp() 函数

设置一个值的范围:

CSS
.fluid-text {
    font-size: clamp(16px, 4vw, 24px);
    /* 最小值16px,理想值4vw,最大值24px */
}

其他CSS函数

CSS还提供了许多其他有用的函数:

函数 描述 示例
var() 使用CSS变量 color: var(--primary-color)
attr() 获取HTML属性值 content: attr(data-label)
rgb() / rgba() 定义颜色 color: rgb(255, 0, 0)
hsl() / hsla() 使用HSL定义颜色 color: hsl(120, 100%, 50%)
url() 引用资源 background: url(image.jpg)

CSS混合模式

混合模式控制元素内容如何与背景混合:

CSS
.blend-element {
    background-image: url(texture.jpg);
    background-color: var(--primary-color);
    background-blend-mode: multiply;
}

.text-blend {
    mix-blend-mode: difference;
}
混合模式 描述
normal 正常混合(默认)
multiply 正片叠底
screen 滤色
overlay 叠加
darken 变暗
lighten 变亮
color-dodge 颜色减淡
color-burn 颜色加深
difference 差值

混合模式示例

CSS滤镜

滤镜可以对元素应用图形效果:

CSS
.filtered-element {
    filter: blur(5px) grayscale(50%) brightness(1.2);
}
滤镜函数 描述
blur() 模糊效果
brightness() 亮度调整
contrast() 对比度调整
grayscale() 灰度效果
hue-rotate() 色相旋转
invert() 颜色反转
opacity() 透明度调整
saturate() 饱和度调整
sepia() 棕褐色效果
drop-shadow() 阴影效果

滤镜效果示例

CSS遮罩和剪切

clip-path

用于创建复杂的形状:

CSS
.clipped-element {
    clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
    /* 菱形 */
    
    clip-path: circle(50% at 50% 50%);
    /* 圆形 */
    
    clip-path: inset(10% 20% 30% 40%);
    /* 矩形内切 */
}

mask

使用图像或渐变作为遮罩:

CSS
.masked-element {
    mask-image: linear-gradient(to right, transparent, black);
    -webkit-mask-image: linear-gradient(to right, transparent, black);
}

遮罩和剪切示例

CSS计数器

CSS计数器允许自动编号元素:

CSS
ol {
    counter-reset: section;
}

li {
    counter-increment: section;
}

li::before {
    content: counter(section) ". ";
    font-weight: bold;
    color: var(--primary-color);
}
  1. 第一个项目
  2. 第二个项目
  3. 第三个项目

嵌套计数器

CSS计数器支持嵌套使用:

CSS
ol {
    counter-reset: chapter;
}

li {
    counter-increment: chapter;
}

li ol {
    counter-reset: section;
}

li li {
    counter-increment: section;
}

li li::before {
    content: counter(chapter) "." counter(section) " ";
}

CSS自定义属性(变量)的高级用法

CSS变量可以与JavaScript结合,实现动态主题切换:

CSS
:root {
    --primary-color: #82255E;
    --bg-color: #ffffff;
    --text-color: #333333;
}

.dark-theme {
    --primary-color: #B83B6A;
    --bg-color: #333333;
    --text-color: #ffffff;
}
JavaScript
// 切换主题
function toggleTheme() {
    const root = document.documentElement;
    root.classList.toggle('dark-theme');
}

CSS变量的计算

CSS变量可以与calc()函数结合使用:

CSS
:root {
    --base-size: 16px;
    --padding: calc(var(--base-size) * 2);
    --margin: calc(var(--base-size) / 2);
}

CSS容器查询

容器查询允许根据父容器尺寸应用样式:

CSS
.container {
    container-type: inline-size;
}

.card {
    display: grid;
    grid-template-columns: 1fr;
}

@container (min-width: 500px) {
    .card {
        grid-template-columns: 1fr 2fr;
    }
}
注意: 容器查询是CSS的新特性,目前浏览器支持度有限,需要使用@supports进行特性检测。

CSS子网格

子网格允许嵌套网格继承父网格的轨道:

CSS
.grid-container {
    display: grid;
    grid-template-columns: 1fr 1fr;
}

.nested-grid {
    display: grid;
    grid-template-columns: subgrid;
}

高级CSS效果演示

当前效果:
强度值: 50

效果类型

选择要应用的高级CSS效果类型

效果控制

调整效果的强度或参数值

操作控制

效果演示区域
效果:
强度: 0

生成的CSS代码

CSS
/* 选择效果并调整参数查看生成的CSS代码 */

效果说明

选择不同的效果类型来查看高级CSS特性的实际应用。

性能优化技巧

使用transform和opacity: 这些属性可以由GPU加速,性能更好。
避免布局抖动: 避免在动画中修改会影响布局的属性。
使用will-change: 提前告知浏览器元素将要发生的变化。
优化CSS选择器: 避免使用过于复杂的选择器。
CSS
/* 性能优化示例 */
.animated-element {
    will-change: transform, opacity;
    transform: translateZ(0); /* 触发GPU加速 */
}

CSS containment

使用contain属性限制浏览器重绘和重排的范围:

CSS
.isolated-element {
    contain: layout paint style;
}

CSS Houdini

CSS Houdini是一组低级API,允许开发者扩展CSS的功能:

Properties and Values API

允许注册自定义CSS属性:

JavaScript
// 注册自定义属性
CSS.registerProperty({
    name: '--my-color',
    syntax: '<color>',
    inherits: false,
    initialValue: '#000000'
});

Paint API

允许使用JavaScript创建自定义CSS图像:

JavaScript
// 注册绘制工作
registerPaint('my-pattern', class {
    paint(ctx, size, properties) {
        // 自定义绘制逻辑
    }
});
CSS
.custom-element {
    background-image: paint(my-pattern);
}

CSS的未来特性

CSS嵌套

允许在CSS中使用嵌套语法:

CSS
.card {
    padding: 1rem;
    
    & .featured {
        border: 2px solid gold;
    }
    
    & .title {
        font-size: 1.5rem;
    }
}

CSS层叠层

允许更好地控制CSS规则的优先级:

CSS
/* 定义层 */
@layer base, components, utilities;

/* 在特定层中添加样式 */
@layer base {
    p {
        margin-bottom: 1rem;
    }
}