CSS容器查询终于来了

229 篇文章 14 订阅
159 篇文章 14 订阅

CSS容器查询终于来了! 它们目前在谷歌浏览器(105)中得到了支持,很快就会在Safari 16中得到支持。这对前端来说容器查询与媒体查询一样重要。

在这节课中,我们介绍一下容器查询是如何工作的,如何使用它们,以及语法是什么样子的,并分享一些现实生活中的例子和用例。

简介

在设计一个组件时,我们需要适配不同的变化,并根据CSS类或视口大小来改变它们。这对于我们开发来说不是很理想,会迫使我们根据变化类或视口尺寸来写CSS。

考虑下面例子:

在这里插入图片描述

我们有一个卡片组件,当视口足够大时,它应该切换到水平样式。乍一看,这可能听起来不错。然而,当你更深入地思考这个问题时,它就有点复杂了。

在这里插入图片描述

如果我们想在不同的地方使用同一个卡片组件,比如在空间狭小的侧边栏和有更多空间的主区域,我们就需要使用不同的类来适配:

.c-article {
  /* Default stacked style */
}

@media (min-width: 800px) {
  /* Horizontal style. */
  .c-article--horizontal {
    display: flex;
    align-items: center;
  }
}

如果我们不想用上面的方式,那么会出现下面这样的情况:

在这里插入图片描述

这种从用户界面的角度来看,并不友好。

通过容器查询,我们可以简单地编写响应父级或容器宽度的CSS。请看下图:

在这里插入图片描述

注意到在媒体查询中,我们是如何根据视口或屏幕宽度来查询一个组件的。在容器查询中,同样的情况发生在父级上。

什么是容器查询?

通过 container-type 属性查询一个组件与最接近的父类的关系,该父类有一个定义的包含物。

我们过去在媒体查询中写CSS的方式,但只是针对组件层面。

容器查询语法

要根据一个组件的父级宽度查询,我们需要使用 container-type 属性。看下面的例子"

.wrapper {
  container-type: inline-size;
}

有了这些,我们就可以开始查询一个组件。在下面的例子中,如果.card元素的容器的宽度等于400px或更大,我们需要添加一个特定的样式。

@container (min-width: 400px) {
  .card {
    display: flex;
    align-items: center;
  }
}

虽然上述方法可行,但当有多个容器时,就会造成混乱。为了避免这种情况,最好为一个容器命名。

.wrapper {
  container-type: inline-size;
  container-name: card;
}

现在,我们可以在 @container 旁边加容器名称,如下所示。

@container card (min-width: 400px) {
  .card {
    display: flex;
    align-items: center;
  }
}

完整代码:

.wrapper {
  container-type: inline-size;
  container-name: card;
}

.c-article {
  /* Default stacked style */
}

@container card (min-width: 400px) {
  /* Horizontal style. */
  .c-article {
    display: flex;
    align-items: center;
  }
}

浏览器支持

容器查询现在在Chrome 105中得到支持,并很快在Safari 16中得到支持。

在这里插入图片描述

事例

在这里插入图片描述

这边有10个关于容器查询的事例,地址:https://lab.ishadeed.com/container-queries

来源:https://ishadeed.com/article/container-queries-are-finally-here/

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 你可以使用以下方法来让 CSS 容器居中: 1. 使用 margin: auto 和 fixed 宽度/高度: ```css .container { width: 500px; height: 500px; margin: auto; background-color: #ccc; } ``` 2. 使用 position 和 transform: translate(-50%, -50%): ```css .container { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #ccc; } ``` 3. 使用 flexbox 布局: ```css .container { display: flex; align-items: center; justify-content: center; background-color: #ccc; } ``` 注意:这些方法的前提是容器的父元素已经设置了一个合适的高度和宽度。 ### 回答2: 要使CSS容器居中,可以使用以下几种方法: 1. 使用布局属性和属性值。例如,可以在容器CSS样式中设置`display: flex;`和`justify-content: center;`,这将使容器的内容水平居中。如果要将容器垂直居中,可以设置`align-items: center;`。 2. 使用定位属性和属性值。例如,可以设置容器CSS样式为`position: absolute;`和`top: 50%;`,然后再设置`transform: translateY(-50%);`。这将使容器垂直居中。 3. 使用自动边距。可以将容器的左右边距设置为`auto`,这将使容器水平居中。例如,可以设置`margin-left: auto;`和`margin-right: auto;`。 总的来说,使用这些方法之一可以实现CSS容器的水平居中、垂直居中或同时水平垂直居中。具体使用哪种方法取决于具体的布局需求和设计风格。 ### 回答3: 在CSS中,有多种方式来实现容器的居中设置。以下是几种常见的方法: 1. 使用Flexbox布局:将容器CSS属性`display`设置为`flex`,并添加`align-items: center`和`justify-content: center`属性。这样就能使容器的内容在水平和垂直方向上居中显示。 2. 使用绝对定位:将容器CSS属性`position`设置为`absolute`,并将`top`、`left`、`right`和`bottom`属性设置为`0`,再将`margin`设置为`auto`。这样容器就能在父容器中居中显示。 3. 使用相对定位和负边距:将容器CSS属性`position`设置为`relative`,然后通过设置负边距来实现居中。例如,可以将`top`和`left`属性设置为`50%`,再将`transform`属性设置为`translate(-50%, -50%)`。 4. 使用表格布局:将容器CSS属性`display`设置为`table`,然后将其子元素的CSS属性`display`设置为`table-cell`,并添加`vertical-align: middle`属性。 5. 使用绝对定位和transfrom:将容器CSS属性`position`设置为`absolute`,然后将`top`和`left`属性设置为`50%`,再将`transform`属性设置为`translate(-50%, -50%)`。这样容器就能在父容器中水平和垂直方向上居中显示。 无论选择哪种方法,都可以根据具体的布局需求来设置CSS属性,从而实现容器的居中显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@大迁世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值