html - 我可以将两个元素之间的所有空间放入 flexbox 或网格中吗?

标签 html css

我有一个如下所示的标题:

<header>
    <div>A</div>
    <div>B</div>
    <div>C</div>
</header>

我希望所有的空间都位于 A 和 B 之间,而不是均匀地间隔这些元素,如下所示:

Demonstration

有什么方法可以使用纯 CSS 来实现此目的,而无需在 HTML 中添加额外的包装元素?


我非常具体地谈论间距,添加 flex-grow: 1A是作弊🙂就我而言AB是可点击的,我不希望它们涂抹在整个标题上。

最佳答案

以下是我能想到的一些基本解决方案:

对于 flex 容器,请在“A”上使用 margin-right: auto

对于 grid 容器,设置 grid-template-column: 1fr Repeat(2, min-content) 以便将“A”放置在 >1fr 列。

示例:

header {
  display: flex;
  width: 400px;
  outline: 3px solid #666;
}

div {
  width: 50px;
  height: 50px;
  background-color: pink;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: x-large;
  outline: 2px solid #000;
}

header>div:first-of-type {
  margin-right: auto;
}

main {
  display: grid;
  width: 400px;
  outline: 3px solid #666;
  grid-template-columns: 1fr repeat(2, min-content);
}
<h3>👇 Flex container</h3>
<header>
  <div>A</div>
  <div>B</div>
  <div>C</div>
</header>

<h3>👇 Grid container </h3>
<main>
  <div>A</div>
  <div>B</div>
  <div>C</div>
</main>

这里是我能想到的一些大家最喜欢的奇怪解决方案,这个例子使用伪元素作为间隔符(不推荐,只是为了展示可能性):

对于 flex 容器,指定伪元素间隔符的order,将其放置在“A”之后。

对于 grid 容器,指定伪元素间隔符以获取所需的列,以便自动放置可以覆盖其他元素。

示例:

header {
  display: flex;
  width: 400px;
  outline: 3px solid #666;
}

header::before {
  content: "I'm a pseudo spacer";
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: large;
  order: 2;
  flex: 1;
}

div {
  width: 50px;
  height: 50px;
  background-color: pink;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: x-large;
  outline: 2px solid #000;
}

header > div {
  order: 3;
}

header > div:nth-of-type(1) {
  order: 1;
}

main {
  display: grid;
  width: 400px;
  outline: 3px solid #666;
  grid-template-columns: min-content 1fr repeat(2, min-content);
  grid-auto-flow: row dense;
}

main::before {
  content: "I'm a pseudo spacer";
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: large;
  grid-column: 2 / 3;
}
<h3>👇 Flex but with pseudo element as spacer</h3>
<header>
  <div>A</div>
  <div>B</div>
  <div>C</div>
</header>

<h3>👇 Grid but with pseudo element as spacer</h3>
<main>
  <div>A</div>
  <div>B</div>
  <div>C</div>
</main>

关于html - 我可以将两个元素之间的所有空间放入 flexbox 或网格中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74672587/

相关文章:

html - CSS Flex 布局未根据需要对齐元素

html - css:在 ng-repeat 时无法 flex-grow

css - 将某人的 CSS 转换为 Xamarin iOS 以获得渐变

javascript - 添加 Transition 正在更改 Jquery 设置的位置

javascript - IE8 中的 CSS/javascript 悬停错误 - 在 chrome 等中正常

javascript - 如何同时滚动和加载隐藏的 id

html - Wordpress 中的内联元素之间添加了换行符标记,导致布局损坏

HTML/CSS - Firefox 和 Chrome 以及 IE 之间的问题

javascript - 检查按钮是否被禁用以及是否在禁用时单击它的监听器,如果是,则弹出警报

javascript - GPL 许可证如何限制商业 Web 应用程序?