CSS学习知识点大全(三)

简介: 教程来源 https://app-aakcgtuh1ywx.appmiaoda.com 本节详解CSS动画与现代特性:涵盖过渡(transition)和关键帧动画(@keyframes)的完整语法与实战示例;CSS自定义变量(:root + var())实现主题化与动态管理;以及容器查询、原生嵌套、动态视口单位(dvh/svh/lvh)、color-mix等前沿特性,助力构建响应式、可维护的现代Web界面。

七、动画与过渡

7.1 过渡

.element {
    /* 过渡属性 */
    transition-property: all;
    transition-property: width, height, background-color;
    transition-property: none;

    /* 过渡时长 */
    transition-duration: 0.3s;
    transition-duration: 0.3s, 0.5s;

    /* 过渡时机函数 */
    transition-timing-function: ease;        /* 缓动 */
    transition-timing-function: linear;      /* 线性 */
    transition-timing-function: ease-in;     /* 加速 */
    transition-timing-function: ease-out;    /* 减速 */
    transition-timing-function: ease-in-out; /* 先加速后减速 */
    transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);

    /* 过渡延迟 */
    transition-delay: 0s;
    transition-delay: 0.2s;

    /* 简写 */
    transition: all 0.3s ease;
    transition: width 0.3s, height 0.5s;
}

/* 过渡示例 */
.button {
    background: #007bff;
    padding: 10px 20px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.button:hover {
    background: #0056b3;
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(0,123,255,0.3);
}

.card {
    transition: transform 0.3s, box-shadow 0.3s;
}

.card:hover {
    transform: translateY(-8px);
    box-shadow: 0 12px 24px rgba(0,0,0,0.1);
}

7.2 关键帧动画

/* 定义动画 */
@keyframes fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

@keyframes slideIn {
    0% {
        transform: translateX(-100%);
        opacity: 0;
    }
    100% {
        transform: translateX(0);
        opacity: 1;
    }
}

@keyframes pulse {
    0% {
        transform: scale(1);
    }
    50% {
        transform: scale(1.05);
    }
    100% {
        transform: scale(1);
    }
}

@keyframes rotate {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}

@keyframes bounce {
    0%, 100% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-20px);
    }
}

/* 使用动画 */
.element {
    /* 动画名称 */
    animation-name: fadeIn;

    /* 动画时长 */
    animation-duration: 0.5s;

    /* 动画时机函数 */
    animation-timing-function: ease;

    /* 动画延迟 */
    animation-delay: 0s;

    /* 动画次数 */
    animation-iteration-count: 1;
    animation-iteration-count: infinite;

    /* 动画方向 */
    animation-direction: normal;        /* 正向 */
    animation-direction: reverse;       /* 反向 */
    animation-direction: alternate;     /* 交替 */
    animation-direction: alternate-reverse; /* 反向交替 */

    /* 动画填充模式 */
    animation-fill-mode: none;          /* 默认 */
    animation-fill-mode: forwards;      /* 保持最后状态 */
    animation-fill-mode: backwards;     /* 应用第一帧 */
    animation-fill-mode: both;          /* 同时应用 */

    /* 动画播放状态 */
    animation-play-state: running;
    animation-play-state: paused;

    /* 简写 */
    animation: fadeIn 0.5s ease forwards;
    animation: slideIn 0.6s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

/* 动画示例 */
.loader {
    width: 40px;
    height: 40px;
    border: 3px solid #f3f3f3;
    border-top: 3px solid #007bff;
    border-radius: 50%;
    animation: rotate 1s linear infinite;
}

.notification {
    animation: slideIn 0.3s ease forwards;
}

.notification.hide {
    animation: fadeOut 0.3s ease forwards;
}

@keyframes fadeOut {
    to {
        opacity: 0;
        transform: translateY(-20px);
    }
}

/* 滚动动画 */
.reveal {
    opacity: 0;
    transform: translateY(30px);
    transition: all 0.6s ease;
}

.reveal.active {
    opacity: 1;
    transform: translateY(0);
}

八、CSS 变量

/* 定义变量 */
:root {
    /* 颜色变量 */
    --primary-color: #007bff;
    --secondary-color: #6c757d;
    --success-color: #28a745;
    --danger-color: #dc3545;
    --warning-color: #ffc107;
    --info-color: #17a2b8;
    --light-color: #f8f9fa;
    --dark-color: #343a40;

    /* 间距变量 */
    --spacing-xs: 4px;
    --spacing-sm: 8px;
    --spacing-md: 16px;
    --spacing-lg: 24px;
    --spacing-xl: 32px;

    /* 字体变量 */
    --font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    --font-size-sm: 12px;
    --font-size-base: 16px;
    --font-size-lg: 20px;
    --font-size-xl: 24px;

    /* 圆角变量 */
    --border-radius-sm: 4px;
    --border-radius-md: 8px;
    --border-radius-lg: 16px;
    --border-radius-round: 50%;

    /* 阴影变量 */
    --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
    --shadow-md: 0 4px 6px rgba(0,0,0,0.1);
    --shadow-lg: 0 10px 15px rgba(0,0,0,0.1);
}

/* 使用变量 */
.element {
    color: var(--primary-color);
    padding: var(--spacing-md);
    font-family: var(--font-family-base);
    border-radius: var(--border-radius-md);
    box-shadow: var(--shadow-md);
}

/* 后备值 */
.element {
    color: var(--primary-color, #007bff);
}

/* 动态修改变量 */
@media (prefers-color-scheme: dark) {
    :root {
        --light-color: #1a1a1a;
        --dark-color: #f8f9fa;
    }
}

/* JavaScript 修改 */
// document.documentElement.style.setProperty('--primary-color', '#ff0000');

/* 变量计算 */
.element {
    --padding: 20px;
    padding: var(--padding);
    margin: calc(var(--padding) * 2);
}

/* 主题切换示例 */
[data-theme="dark"] {
    --bg-color: #1a1a1a;
    --text-color: #f8f9fa;
    --border-color: #333;
}

[data-theme="light"] {
    --bg-color: #ffffff;
    --text-color: #333;
    --border-color: #ddd;
}

body {
    background: var(--bg-color);
    color: var(--text-color);
}

九、现代 CSS 特性

9.1 容器查询

js/* 定义容器 */
.card-container {
    container-type: inline-size;
    container-name: card;
}

/* 或简写 */
.card {
    container: card / inline-size;
}

/* 容器查询 */
@container card (min-width: 400px) {
    .card-content {
        display: flex;
        gap: 20px;
    }

    .card-image {
        width: 200px;
    }
}

@container card (max-width: 399px) {
    .card-content {
        display: block;
    }

    .card-image {
        width: 100%;
    }
}

9.2 CSS 嵌套

/* 原生 CSS 嵌套(CSS Nesting) */
.card {
    background: white;
    border-radius: 8px;

    & .card-header {
        padding: 16px;
        border-bottom: 1px solid #eee;

        & h2 {
            font-size: 1.25rem;
            margin: 0;
        }
    }

    & .card-body {
        padding: 16px;
    }

    &:hover {
        box-shadow: 0 4px 12px rgba(0,0,0,0.1);
    }
}

/* 等价于 */
.card {
    background: white;
    border-radius: 8px;
}
.card .card-header {
    padding: 16px;
    border-bottom: 1px solid #eee;
}
.card .card-header h2 {
    font-size: 1.25rem;
    margin: 0;
}
.card .card-body {
    padding: 16px;
}
.card:hover {
    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}

9.3 视口单位

/* 视口单位 */
.element {
    width: 100vw;      /* 视口宽度的100% */
    height: 100vh;     /* 视口高度的100% */

    /* 动态视口单位 */
    width: 100dvw;     /* 动态视口宽度 */
    height: 100dvh;    /* 动态视口高度 */

    /* 小视口单位 */
    width: 100svw;     /* 小视口宽度 */
    height: 100svh;    /* 小视口高度 */

    /* 大视口单位 */
    width: 100lvw;     /* 大视口宽度 */
    height: 100lvh;    /* 大视口高度 */

    /* 视口最小/最大单位 */
    width: 100vmin;    /* 视口宽度和高度的最小值 */
    height: 100vmax;   /* 视口宽度和高度的最大值 */
}

/* 全屏元素 */
.hero {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
}

9.4 颜色函数

/* 现代颜色函数 */
.element {
    /* 相对颜色 */
    --primary: #007bff;
    background: color-mix(in srgb, var(--primary), white 50%);

    /* 颜色混合 */
    background: color-mix(in srgb, red 30%, blue 70%);

    /* 相对颜色语法 */
    background: rgb(from var(--primary) r g b / 0.5);

    /* 对比度颜色 */
    color: contrast-color(var(--primary) vs black, white);

    /* OKLCH 颜色空间 */
    background: oklch(0.6 0.2 45deg);
    background: oklch(from var(--primary) l c h);

    /* Lab 颜色空间 */
    background: lab(54% 80 70);
}

来源:
https://app-aakcgtuh1ywx.appmiaoda.com

相关文章
|
5月前
|
算法 机器人 测试技术
动态规划入门详解
等待了好久好久,今天终于可以对动态规划动手了(☆▽☆)
264 3
|
4月前
|
SQL 监控 Java
分布式事务解决方案Seata之AT事务
Seata AT模式是零侵入分布式事务方案,基于改进两阶段提交(2PC),通过自动代理数据源、拦截SQL、记录undo_log实现全局事务一致性,无需修改业务代码,仅需`@GlobalTransactional`注解即可快速接入。
739 3
分布式事务解决方案Seata之AT事务
|
4月前
|
人工智能 数据可视化 机器人
OpenClaw一键部署攻略,手把手教你 “养龙虾”!
还在为部署OpenClaw踩坑发愁?“养龙虾”其实超简单!本文奉上阿里云一键云端部署攻略:全程可视化、零代码,仅两步——买预装服务器+填API密钥,5分钟即可拥有专属AI数字员工!支持微信/钉钉协同、文件处理、日程管理、代码辅助等,新手友好,成本低廉(新用户首月9.9元+7000万Token免费额度)。
832 25
|
4月前
|
NoSQL 网络协议 Cloud Native
【Azure Redis】云原生环境下的 Redis 超时之谜:为什么 15 分钟后应用才恢复?
云原生中Redis短暂不可用后应用持续超时15分钟?问题不在Redis,而在Linux TCP默认重传机制(tcp_retries2=15)与长连接模型的错位。需三管齐下:调低内核重传次数、客户端显式配置超时与自动重连、应用层引入断路器与弹性重试。
323 20
|
4月前
|
Ubuntu 算法 关系型数据库
Debian/Ubuntu 环境 PolarDB-X 单机版 DEB 包安装综合指南
本文整合阿里云文档,详解Ubuntu 18.04与Debian 10下PolarDB-X单机版安装:因官方仅提供RPM包,需用alien转DEB,但二者压缩格式不同(Ubuntu用zstd,Debian 10不支持),必须在目标系统本地转换,不可复用。含依赖处理、配置初始化及启动验证全流程。
860 19
|
5月前
|
人工智能 运维 安全
基于云边协同的电线电缆押出机智能调机解决方案设计与落地
本方案基于云边协同架构,融合阿里云云原生技术,破解线缆行业押出机调机效率低、原料损耗高、数据孤岛等难题;边缘毫秒级实时控制+云端Al训练优化,实现调机提效80%、降耗60%,部署快、运维省、可扩展
590 9
基于云边协同的电线电缆押出机智能调机解决方案设计与落地
|
4月前
|
存储 人工智能 数据库
阿里云怎么算新用户?阿里云新用户定义及优惠政策解析
阿里云是阿里巴巴旗下云计算品牌,本文详解新用户定义(无付费记录的会员)及三大专属福利:高额优惠券、首购大幅折扣、超160款云产品免费试用,助您低成本轻松上云!
361 15
|
4月前
|
弹性计算
如何查询自己的阿里云账户是新用户还是老用户?
阿里云新用户指无任何收费云产品购买记录的实名认证用户(含试用未付费者);老用户则已有付费订单。同一证件下多账号共享唯一新用户资格。本文详解判定标准与自查步骤,助力大家精准锁定优惠权益。
551 9
|
4月前
|
弹性计算 人工智能 运维
新购续费同价,阿里云ECS云服务器2核2G3M99元1年、2核4G5M199元1年,2027年3月结束
阿里云打破“新购低价、续费高价”的行业惯例,推出“新购续费同价”的阿里云经济型e实例和通用算力型u1实例长效特惠活动,价格分别为99元/年和199元/年。活动面向新老用户、个人及企业,提供成本确定性。经济型e实例适合轻量级应用,通用算力型u1实例满足企业入门需求。此外,阿里云还为新用户提供轻量应用服务器抢购活动,价格低至38元/年。用户可在活动期内锁定长期低成本云服务。
886 6
|
4月前
|
人工智能 机器人 API
阿里云无影云电脑+轻量服务器部署OpenClaw|集成Slack机器人+千问Qwen3.6-Plus配置保姆级教程+避坑大全
2026年,OpenClaw结合阿里云无影云电脑、轻量服务器与Slack,已实现“零基础、零代码、全场景”的AI自动化落地。本文完整覆盖**阿里云轻量服务器部署OpenClaw(Clawdbot)简单步骤及阿里云千问Qwen3.6-Plus配置教程和避坑指南**,从无影云电脑一键部署、轻量服务器手动搭建,到Slack全集成、千问大模型配置,全程提供可直接复制的代码与可视化指引,确保新手一次成功、稳定运行。
340 10