一、CSS 变量与函数
1.为何用:主题切换、响应式尺寸、统一设计令牌
2.作用域与级联:
(1)在 :root 定义全局变量,可在任何选择器内覆盖。
(2)变量在计算时解析,支持与函数组合。
3.常用函数:
:自适应尺寸/字体/间距的首选。clamp(min, preferred, max)
:混合单位计算(如calc()
)。calc(100% - 2rem)
:响应式上限/下限控制。min()/max()
:颜色混合(现代浏览器)。color-mix()
二、过渡与动画(性能与可达性)
1.高性能原则:只动画合成属性
transform
、
opacity
,避免触发布局/重绘(如
width/left
)。
2.GPU 合成:加
transform: translateZ(0)
可 hint 合成层,但避免滥用。
3.可达性:尊重
prefers-reduced-motion: reduce
,必要时关闭或弱化动画。
4.进入动画(仅 transform/opacity)
css
.fade-in-up { opacity: 0; transform: translateY(10px); animation: fadeUp .4s ease forwards; } @keyframes fadeUp { to { opacity: 1; transform: none; } }
5.排错与陷阱:
(1)动画卡顿:检查是否在动画
width/height/left/top
。
(2)抢占焦点:动画元素若受焦点影响,注意
outline
与可达性提示。
三、Flex/grid 进阶
1.Flex(轴向与等高)
(1)等高:父容器
align-items: stretch
,子项自适应高度。
(2)工具栏布局:左右固定,中间自适应。
(3)示例(工具栏)
css
.toolbar { display: flex; align-items: center; gap: var(--space); } .toolbar__left, .toolbar__right { flex: 0 0 auto; } .toolbar__center { flex: 1 1 auto; display: flex; justify-content: center; }
2.Grid(自适应宫格)
(1)
:容器宽度变化时自动增减列。repeat(auto-fit, minmax(220px, 1fr))
(2)子项跨行/列:
grid-column: span 2;
。
(3)示例(宫格)
css
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--space); } .grid > article.featured { grid-column: span 2; }
3.选择 Flex 还是 Grid:
(1)一维发布(主轴排布):Flex
(2)二维布局(行列网格):Grid
四、Tailwind CSS 入门(原子化思维)
1.核心:用原子类(功能类)组合 UI,减少手写 CSS,统一设计系统。
2.CDN 方式引入体验;生产项目用构建(剔除未用类)
html
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@3.4.10/dist/tailwind.min.css" rel="stylesheet">
3.常用原子
(1)布局:
flex grid gap-4 grid-cols-1 md:grid-cols-3
(2)间距:
p-4 px-6 py-2 space-y-2
(3)字体:
text-sm lg:text-base font-semibold
(4)圆角与阴影:
rounded-xl shadow hover:shadow-lg
(5)状态/响应式:
hover:
active:
focus:
sm md lg xl 2xl
(6)暗色:
dark:
(给
html
加
class="dark"
)
4.示例(按钮)
html
<button class="inline-flex items-center gap-2 rounded-xl px-4 py-2 bg-indigo-600 text-white hover:bg-indigo-500 active:scale-[.98] shadow hover:shadow-lg transition"> 行动按钮 </button>
五、实战:3 个现代 CSS 组件
1.组件 1:角色卡片
点:卡片升起、头像圆形裁剪、变量化间距。
html
<article class="card"> <img class="avatar" src="assets/images/characters/character_sun_wukong_1754673023396.png" alt="孙悟空"> <h3 class="title">孙悟空</h3> <p class="meta">齐天大圣 · 力量/敏捷 MAX</p> <button class="btn">查看资料</button> </article>
css
.card { background:#fff; border-radius:var(--radius); padding:var(--space); display:grid; gap:var(--space); transition: transform .2s, box-shadow .2s; } .card:hover { transform: translateY(-3px); box-shadow: 0 12px 30px rgba(0,0,0,.12); } .avatar { width:96px; height:96px; border-radius:50%; object-fit:cover; } .title { font: 600 var(--title)/1.25 ui-sans-serif, system-ui; } .meta { color:#6b7280; font-size:12px; }
2.组件 2:场景宫格
点:Grid 自适应、封面图
aspect-ratio
、渐变遮罩标题。
html
<section class="grid"> <article class="scene"> <img src="assets/images/backgrounds/scene_722654800_1754673080977.jpg" alt=""> <h4>花果山</h4> </article> </section>
css
.scene { position:relative; border-radius:var(--radius); overflow:hidden; } .scene img { width:100%; aspect-ratio:16/9; object-fit:cover; display:block; } .scene::after { content:""; position:absolute; inset:0; background: linear-gradient(to top, rgba(0,0,0,.45), transparent 50%); } .scene h4 { position:absolute; left:12px; bottom:10px; color:#fff; font-weight:600; text-shadow:0 1px 2px rgba(0,0,0,.5); }
3.组件 3:顶部导航
点:Flex 三段、移动端折叠
html
<header class="nav"> <div class="nav__left">OrionFlow</div> <nav class="nav__center"> <a href="#">场景</a><a href="#">角色</a><a href="#">关于</a> </nav> <div class="nav__right"><button class="btn">登录</button></div> </header>
css
.nav { display:flex; align-items:center; gap:var(--space); padding:var(--space); } .nav__left, .nav__right { flex: 0 0 auto; } .nav__center { flex: 1 1 auto; display:flex; gap:12px; justify-content:center; } .nav__center a { color: var(--fg); text-decoration:none; padding:6px 10px; border-radius:8px; transition: background-color .2s; } .nav__center a:hover { background: rgba(0,0,0,.06); } @media (max-width: 600px) { .nav__center { display:none; } }
六、常见坑与规避
1.变量未生效:确认变量名拼写与作用域,检查是否被局部覆盖
2.动画抖动:避免改变会触发重排的属性;使用 will-change 谨慎
3.Grid 塌陷:子项宽度限定过强导致换行异常,优先 minmax() 控制
4.Tailwind 重复类很长:抽象复用组件时用模板或 @apply (需构建配置)