首页 > web前端 > css教程 > 正文

停止与媒体查询的斗争!使用 CSS 容器查询代替

DDD
发布: 2024-11-21 09:16:11
原创
930 人浏览过

Stop Fighting with Media Queries! Use CSS Container Queries Instead

曾经构建过一个在主要内容中看起来很完美但在侧边栏中出现问题的组件吗? ?

媒体查询只能解决一半的问题 - 它们关心屏幕大小,而不是组件实际所在的位置。这就是容器查询的用武之地。

媒体查询出了什么问题?

假设您已经构建了此卡片组件:

@media (min-width: 768px) {
  .card {
    display: flex;
    gap: 2rem;
  }
}
登录后复制

在移动设备和桌面设备上看起来都很棒!直到...您的队友将其放入狭窄的侧边栏中。现在你的“桌面”布局正试图挤进 300 像素的空间。哎哟。

想要提高您的 CSS 技能吗?查看“取代我的 JavaScript 的现代 CSS 技术”,了解纯 CSS 如何取代复杂的 JavaScript 代码。

容器查询:更好的方法

容器查询不是问“屏幕有多宽?”,而是问“我的容器有多宽?”它们的工作原理如下:

/* Step 1: Mark the container */
.card-wrapper {
  container-type: inline-size;
}

/* Step 2: Style based on container width */
@container (min-width: 400px) {
  .card {
    display: flex;
    gap: 2rem;
  }
}
登录后复制

现在您的卡片会适应其容器,而不是屏幕。把它放在任何地方 - 它就可以工作!

真实示例:智能产品卡

这是一张适合任何空间的产品卡:

<div>





<pre class="brush:php;toolbar:false">.product-wrapper {
  container-type: inline-size;
}

/* Mobile-first: Stack everything */
.product {
  display: grid;
  gap: 1rem;
  padding: 1rem;
  background: white;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}

/* Medium container: Side-by-side layout */
@container (min-width: 400px) {
  .product {
    grid-template-columns: 200px 1fr;
  }
}

/* Large container: More sophisticated layout */
@container (min-width: 600px) {
  .product .content {
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: start;
  }

  .product .desc {
    grid-column: 1 / -1;
  }
}
登录后复制

浏览器支持吗?

好消息!容器查询适用于所有现代浏览器。对于较旧的浏览器,您的移动布局将成为后备:

/* Default mobile layout */
.product { display: grid; }

/* Enhance for modern browsers */
@supports (container-type: inline-size) {
  /* Container query styles */
}
登录后复制

想要确定那些 UI 细节吗? 《用户暗评的12个前端微交互》揭示了让网站感觉精致的微妙交互。

快速提示

  1. 不要将容器查询嵌套得太深 - 它会变得混乱
  2. 当你只需要宽度时使用 inline-size 而不是 size
  3. 在不同大小的容器中测试您的组件

自己尝试一下!

  1. 选择一个存在于多个地方的组件
  2. 将container-type: inline-size 添加到其包装器
  3. 用容器查询替换媒体查询
  4. 看着它自动适应!

想了解更多吗?

  • MDN 指南
  • 我可以使用 - 容器查询

如果您使用容器查询构建了一些很酷的东西,请发表评论! ?

以上是停止与媒体查询的斗争!使用 CSS 容器查询代替的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板