【问题标题】:Floating divs left/right without separating them on large window向左/向右浮动 div 而不在大窗口上分隔它们
【发布时间】:2016-01-08 09:28:42
【问题描述】:

以下示例显示左右浮动的 div 具有两种不同的容器宽度。

对于大容器(或大窗口),左浮动的div贴在左边框,右浮动的div贴在右边。

当容器很大时,有没有办法强制 div 粘在一起(在容器中水平居中)?请注意,不能选择固定容器或任何 div 的宽度。

理想情况下,我想避免使用 javascript。

.container {
  display: inline-block;
  border: 1px solid black;
}
.inner1 {
  float: left;
  background-color: #aff;
}
.inner2 {
  float: right;
  background-color: #ffa;
}
.inner3 {
  float: left;
  background-color: #faf;
}
First example with wide container<br />
<div class="container" style="width:400px">
  <div class="inner1"><---------- First</div>
  <div class="inner2">Second
    <br />--------
    <br />------</div>
  <div class="inner3">Third ----------</div>
</div>
<br />
Second example with small container<br />
<div class="container" style="width:100px">
  <div class="inner1"><---------- First</div>
  <div class="inner2">Second
    <br />--------
    <br />------</div>
  <div class="inner3">Third ----------</div>
</div>

编辑: 我使用浮点数的原因是为了防止 div 的默认排序。当非浮动时,它们的顺序是从左到右或从上到下,或两者兼而有之。这种排序有时会防止有用空间被填充。例如,想象 div1 宽但不高,而 div2 又瘦又高。如果屏幕足够大,则 div2 将位于 div1 的右侧。 div1 下方和 div2 左侧将有很多空间。我想把 div3 放在那个空间里。但是由于排序的原因,div3 会在 div2 的右侧或下方。

为了解决这个问题,我使用了浮动 div,但它产生了我最初所说的另一个问题:浮动左/右使 div 在大屏幕上分开。

如果不用浮点数也能解决问题,那就最好了。

【问题讨论】:

  • 为什么一定要避免使用javascript?

标签: html css css-float


【解决方案1】:

我还不能评论,因为我很新。 所以我就谈谈 如果我理解正确的问题,你 可能正在寻找

vertical-align: middle;

我希望这就是你要找的东西。

【讨论】:

  • 我不是在寻找垂直对齐。如问题所述,仅水平。
【解决方案2】:

你的意思是像this 这样的东西吗?只需从.inner3 中删除浮动即可。

.container {
  display: inline-block;
  border: 1px solid black;
}
.inner1 {
  float: left;
  background-color: #aff;
}
.inner2 {
  float: right;
  background-color: #ffa;
}
.inner3 {
  background-color: #faf;
}

First example with wide container<br />
<div class="container" style="width:400px">
  <div class="inner1"><---------- First</div>
  <div class="inner2">Second
    <br />--------
    <br />------</div>
  <div class="inner3">Third ----------</div>
</div>
<br />
Second example with small container<br />
<div class="container" style="width:100px">
  <div class="inner1"><---------- First</div>
  <div class="inner2">Second
    <br />--------
    <br />------</div>
  <div class="inner3">Third ----------</div>
</div>

【讨论】:

  • 我相信此解决方案不会阻止 inner2 和 inner3 分离。但是感谢您的尝试
【解决方案3】:

您可以使用 CSS3 @media 查询。只需在屏幕上浮动 400 像素及以上宽度的 div。

.container {
  border: 1px solid black;
}
.inner1 {
  float: left;
  background-color: #aff;
}
.inner2 {
  float: right;
  background-color: #ffa;
}
.inner3 {
  float: left;
  background-color: #faf;
}

@media (min-width: 400px) {
  .container {
    margin: 0 auto;
  }
  .inner1 {
    float: left;
  }
  .inner2 {
    float: left;
  }
  .inner3 {
    float: left;
  }
}

容器将以屏幕宽度为中心 >= 400 像素。内部 div 将浮动到左侧。默认情况下,inner1、inner2、inner3 会分别向左、向右、向左浮动。

Example on JSFiddle

【讨论】:

  • 这不是一个好的解决方案,因为 400px 只是一个示例。我不希望这种情况发生在给定的大小上。所有内部 div 可以有任意大小。
【解决方案4】:

我认为,在这种情况下,从 .container 中删除 display: inline-block; 并在此处添加 overflow: hidden; 并添加到 .inner3 中:

.container {
  border: 1px solid black;
  overflow: hidden;
}
.inner1 {
  float: left;
  background-color: #aff;
}
.inner2 {
  float: right;
  background-color: #ffa;
}
.inner3 {
  overflow: hidden;
  background-color: #faf;
  float: left;
}

编辑 jsfiddle:
jsfiddle-link

【讨论】:

  • 使用您的解决方案,在扩展容器宽度时,inner1 和 inner2 仍然是分开的。对吗?
  • @fffred,与float 你没有不同的解决方案,因为它改变了 DOM 中其他元素的位置。在这种情况下,您可以将@media 与其他样式一起用于不同的屏幕
  • 但是如果我还不知道我的 div 的大小,我应该使用什么媒体大小?所有 div 的大小取决于其内容。
  • 砌体可以。但我还是更喜欢纯 CSS 解决方案。
猜你喜欢
  • 2022-08-13
  • 2015-01-14
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多