10个实用CSS技巧精选:从父选择器到毛玻璃效果

更新日期: 2026-04-20 阅读: 10 标签: 效果

本文精选10个兼容性较好的现代CSS技巧,涵盖:has()、容器查询、scroll-snap、backdrop-filter、aspect-ratio、is()/where()、color-mix()、text-wrap balance、subgrid、layer。每个技巧都配有代码和效果说明,可直接用于项目。


一、:has() 父选择器

作用:根据子元素状态选择父元素,实现“父随子变”的效果。

效果:卡片内有图片时添加圆角,有链接时添加悬停效果;表单有错误输入时添加红框。

/* 有图片的卡片加圆角 */
.card:has(img) {
  border-radius: 12px;
}

/* 有未填必填项的表单加红框 */
form:has(input:invalid:not(:placeholder-shown)) {
  border: 2px solid #f56c6c;
}

/* 有选中项的列表项高亮 */
li:has(input:checked) {
  background: #e6f7ff;
}

二、容器查询 @container

作用:根据容器宽度而非视口宽度应用样式,更适合组件级响应式设计。

效果:侧边栏变窄时,内部卡片自动从横向布局切换为纵向布局。

.sidebar {
  container-type: inline-size;
  container-name: sidebar;
}

@container sidebar (max-width: 400px) {
  .card {
    flex-direction: column;
  }
  .card img {
    width: 100%;
  }
}
html
<div class="sidebar">
  <div class="card">
    <img src="..." alt="" />
    <div class="content">...</div>
  </div>
</div>

三、scroll-snap 滚动吸附

作用:实现轮播图、横向滚动列表“一屏一停”的吸附效果。

效果:横向滚动时,每次滚动结束后自动对齐到某一项。

.scroll-container {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  gap: 16px;
}

.scroll-container > * {
  scroll-snap-align: start;
  flex-shrink: 0;
}

四、backdrop-filter 毛玻璃效果

作用:对元素背后的内容进行模糊、亮度等滤镜处理,实现毛玻璃效果。

效果:导航栏、弹窗背景呈现半透明且模糊的效果,类似 iOS 毛玻璃风格。

.navbar {
  background: rgba(255, 255, 255, 0.6);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

.modal-overlay {
  background: rgba(0, 0, 0, 0.3);
  backdrop-filter: blur(4px);
}

五、aspect-ratio 宽高比

作用:直接指定元素的宽高比,无需使用 padding hack 方案。

效果:图片、视频、卡片统一为 16:9 或 1:1 比例,布局更整齐。

.video-wrapper {
  aspect-ratio: 16 / 9;
  width: 100%;
}

.avatar {
  aspect-ratio: 1;
  width: 48px;
  border-radius: 50%;
}

六、:is() 与 :where() 简化选择器

作用:合并多个选择器的公共部分。:where() 权重为 0,:is() 取列表中最高的权重。

效果:减少重复代码,:where() 适合编写低优先级覆盖样式。

/* 传统写法冗长 */
header h1, header h2, header h3,
main h1, main h2, main h3 {
  margin-top: 0;
}

/* :is() 简化写法 */
:is(header, main) :is(h1, h2, h3) {
  margin-top: 0;
}

/* :where() 权重为 0,便于覆盖 */
:where(.card) h2 {
  font-size: 1rem;
}
.card h2 {
  font-size: 1.25rem; /* 可轻松覆盖上方样式 */
}

七、color-mix() 颜色混合

作用:在 CSS 中直接混合两种颜色,无需预处理器计算。

效果:主题色与白色或黑色混合得到浅色、深色变体;实现 hover 时颜色加深的效果。

:root {
  --primary: #1890ff;
}

.button {
  background: var(--primary);
}

.button:hover {
  background: color-mix(in srgb, var(--primary) 80%, black);
}

.card {
  background: color-mix(in srgb, var(--primary) 10%, white);
}

八、text-wrap: balance 标题平衡换行

作用:让多行标题尽量平衡每行的字数,视觉上更整齐。

效果:标题为 2 到 3 行时,每行字数更接近,避免最后一行只有一两个字的情况。

h1, h2 {
  text-wrap: balance;
  max-width: 40ch;
}

九、subgrid 子网格

作用:让子元素参与父级 grid 的轨道定义,实现跨项对齐。

效果:在卡片网格中,每张卡片内部的多列能够与其他卡片保持对齐。

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

.card {
  display: grid;
  grid-column: span 1;
  grid-template-columns: subgrid;
}

.card-header { grid-column: 1 / -1; }
.card-body { grid-column: 1; }
.card-actions { grid-column: 2 / -1; }

十、@layer 级联层

作用:控制样式优先级顺序,避免滥用 !important。

效果:将基础样式、组件样式、工具类分层管理,优先级清晰可控。

@layer base, components, utilities;

@layer base {
  * { margin: 0; padding: 0; }
  body { font-family: sans-serif; }
}

@layer components {
  .button {
    padding: 8px 16px;
    border-radius: 4px;
  }
}

@layer utilities {
  .mt-4 { margin-top: 1rem; }
  .text-center { text-align: center; }
}

总结

技巧典型场景
:has()父随子变、表单校验样式
@container组件级响应式
scroll-snap轮播图、横向滚动列表
backdrop-filter毛玻璃导航栏、弹窗
aspect-ratio图片、视频、卡片比例控制
:is() / :where()选择器简化、低权重覆盖
color-mix()主题色变体、hover 效果
text-wrap: balance多行标题平衡换行
subgrid网格子项对齐
@layer样式分层、优先级管理

这些特性在现代浏览器中支持良好,可在生产项目中按需选用。建议收藏本文,使用时直接查阅代码示例。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13643

相关推荐

css3 斜切角/斜边的实现方式

设计图含有斜切角的效果时,我们一般想到的方法是切出四个角为背景,然后用border连起来,这样就能显示出该效果了,那么直接使用css呢?下面就整理css做斜边的效果。

CSS3的过渡效果,使用transition实现鼠标移入/移出效果

在css中使用伪类虽然实现了样式的改变,但由于没有过渡效果会显得很生硬。以前如果要实现过渡,就需要借助第三方的js框架来实现。现在只需要使用CSS3的过渡(transition)功能,就可以从一组样式平滑的切换到另一组样式。

css制作从下往上逐渐显示的div

其中div1是整个容器,div2是需要从下往上显示的div。如果只是改变height高度的话,会导致div从上往下慢慢显示,所以并不能直接设置div2的高度来达成效果,此时我们需要一个遮罩mask来帮助div2达成想要的效果。

CSS遮罩效果(模糊效果,阴影效果,毛玻璃效果)

一般遮罩加上透明度opacity就是阴影效果。阴影效果和一般遮罩一样,唯一不同的是设置.mask遮罩的背景色用rgba()表示,当然hsla()也是可以的。模糊效果(毛玻璃效果) 通过 filter来实现

js如何实现新手引导效果?

js最近有个小伙伴问到了怎么实现新手引导的效果,然后便去网上找了下实现方案。可以通过css的border来实现。

css文字选中效果

文字选中效果,这个可能很少有人注意过。在默认状态先一般选中的文本颜色是白字蓝底的,不过可以通过CSS进行设置。::selection定义元素上的伪选择器,以便在选定元素时设置其中文本的样式。

CSS垂直翻转/水平翻转

随着现代浏览器对CSS3的支持愈发完善,对于实现各个浏览器兼容的元素的水平翻转或是垂直翻转效果也就成为了可能。相关的CSS代码如下:

使用 JavaScript 实现分屏视觉效果

今天这篇文章就来讲讲使用JavaScript来实现这种分屏的视觉UI效果。现在在网站上这种分屏视觉效果应用的也非常广泛,比如 Corsair website。

css左边竖条的实现方法

问题描述:在只使用一个标签的情况下实现左边竖线。使用border;使用伪元素来实现;内/外阴影;drop-shadow;渐变 linearGradient

css 遮照镂空效果

一:最简单最粗暴的方法!截图!二:利用css3的阴影效果。三:利用css的边框属性。四:最麻烦的一个,利用canvas的绘图功能。五:遮罩层加box

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!