# 现代CSS强大功能示例 (2025) ## 1. CSS 嵌套 (CSS Nesting) ⭐ 最推荐 让CSS代码更清晰、更易维护 ```css /* 传统写法 */ .device-container { width: 100%; height: 100%; } .device-container .device-update { display: flex; } .device-container .device-update-title { color: white; } /* 现代嵌套写法 */ .device-container { width: 100%; height: 100%; .device-update { display: flex; .device-update-title { color: white; } } /* 使用 & 引用父选择器 */ &:hover { background-color: #0550d0; } /* 媒体查询嵌套 */ @media (max-width: 768px) { flex-direction: column; } } ``` ## 2. CSS 变量 (Custom Properties) ⭐ 最实用 统一管理颜色、尺寸等 ```css :root { /* 颜色变量 */ --primary-color: #0769fb; --primary-hover: #0550d0; --text-color: #ffffff; --bg-color: #f5f5f5; /* 尺寸变量 */ --spacing-sm: 8px; --spacing-md: 16px; --spacing-lg: 24px; /* 动画变量 */ --transition-fast: 0.2s ease; --transition-normal: 0.3s ease; } .device-container { background-color: var(--primary-color); padding: var(--spacing-md); transition: background-color var(--transition-normal); &:hover { background-color: var(--primary-hover); } } ``` ## 3. 容器查询 (Container Queries) ⭐ 响应式新标准 基于容器大小而非视口大小 ```css .device-container { container-type: inline-size; container-name: device; } /* 当容器宽度大于600px时 */ @container device (min-width: 600px) { .device-list { display: grid; grid-template-columns: repeat(2, 1fr); } } /* 当容器宽度小于600px时 */ @container device (max-width: 599px) { .device-list { display: flex; flex-direction: column; } } ``` ## 4. :has() 选择器 ⭐ 强大的父选择器 根据子元素状态改变父元素样式 ```css /* 当包含特定子元素时 */ .device-container:has(.device-update-title) { border-top: 2px solid var(--primary-color); } /* 当子元素有焦点时 */ .device-container:has(input:focus) { box-shadow: 0 0 0 3px rgba(7, 105, 251, 0.3); } /* 当没有子元素时 */ .device-list:has(:not(.device-item)) { display: flex; align-items: center; justify-content: center; color: #999; } ``` ## 5. @layer 层叠层 更好地管理CSS优先级 ```css @layer base, components, utilities; @layer base { .device-container { margin: 0; padding: 0; } } @layer components { .device-update { display: flex; } } @layer utilities { .flex-center { display: flex; align-items: center; justify-content: center; } } ``` ## 6. aspect-ratio 保持元素宽高比 ```css .device-item { aspect-ratio: 16 / 9; /* 保持16:9比例 */ width: 100%; } .device-card { aspect-ratio: 1; /* 正方形 */ } ``` ## 7. backdrop-filter 毛玻璃效果 ```css .device-overlay { backdrop-filter: blur(10px); background-color: rgba(255, 255, 255, 0.1); } ``` ## 8. clip-path 和 mask 创建复杂形状 ```css .device-card { clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%); } .device-icon { mask: url('icon.svg') no-repeat center; mask-size: contain; } ``` ## 9. CSS Grid 高级特性 ```css .device-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-md); /* 子网格 */ .device-list { display: grid; grid-template-columns: subgrid; } } ``` ## 10. 动画和过渡 ```css @keyframes slideIn { from { transform: translateX(-100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } .device-item { animation: slideIn 0.3s ease-out; /* 或者使用 transition */ transition: transform var(--transition-normal), opacity var(--transition-normal); &:hover { transform: scale(1.05); } } ``` ## 11. 逻辑属性 (Logical Properties) 更好的国际化支持 ```css .device-container { /* 传统 */ margin-top: 10px; margin-right: 20px; /* 现代逻辑属性 */ margin-block-start: 10px; /* 顶部(垂直方向开始) */ margin-inline-end: 20px; /* 右侧(水平方向结束) */ } ``` ## 12. color-mix() 颜色混合 ```css .device-button { background-color: color-mix(in srgb, var(--primary-color) 80%, white); &:hover { background-color: color-mix(in srgb, var(--primary-color) 100%, black 10%); } } ``` ## 实际应用示例:优化你的 device.css ```css /* 使用CSS变量和嵌套优化后的代码 */ :root { --device-primary: #0769fb; --device-primary-hover: #0550d0; --device-spacing: 16px; --device-transition: 0.3s ease; } .device-container { width: 100%; height: 100%; background-color: var(--device-primary); display: flex; flex-direction: column; margin: 0; padding: 0; transition: background-color var(--device-transition); &:hover { background-color: var(--device-primary-hover); } .device-update { width: 100%; height: auto; min-height: 60px; background-color: transparent; display: flex; align-items: center; justify-content: space-between; padding: var(--device-spacing); gap: var(--device-spacing); .device-update-title { font-size: 1.2rem; font-weight: 600; color: white; flex: 1; } .device-update-btn { padding: 8px 16px; background-color: rgba(255, 255, 255, 0.2); border-radius: 4px; cursor: pointer; transition: all var(--device-transition); &:hover { background-color: rgba(255, 255, 255, 0.3); transform: scale(1.05); } } } .device-list { flex: 1; overflow-y: auto; padding: var(--device-spacing); /* 容器查询 */ container-type: inline-size; @container (min-width: 600px) { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: var(--device-spacing); } } .device-add { width: 100%; min-height: 50px; background-color: rgba(255, 255, 255, 0.1); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all var(--device-transition); &:hover { background-color: rgba(255, 255, 255, 0.2); } } } ``` ## 浏览器支持情况 - ✅ CSS 嵌套: Chrome 112+, Firefox 117+, Safari 16.5+ - ✅ 容器查询: Chrome 105+, Firefox 110+, Safari 16.0+ - ✅ :has(): Chrome 105+, Firefox 121+, Safari 15.4+ - ✅ CSS 变量: 所有现代浏览器 - ✅ @layer: Chrome 99+, Firefox 97+, Safari 15.4+ - ✅ aspect-ratio: Chrome 88+, Firefox 89+, Safari 15.0+ ## 推荐学习资源 1. MDN Web Docs: https://developer.mozilla.org/en-US/docs/Web/CSS 2. CSS-Tricks: https://css-tricks.com/ 3. web.dev Learn CSS: https://web.dev/learn/css/