【问题标题】:How to fix display flex with percent width columns 1px gap?如何使用百分比宽度列 1px 间隙修复显示 flex?
【发布时间】:2018-03-29 03:22:40
【问题描述】:

在具有百分比宽度的特定宽度显示弹性列上留下一个 1px 的间隙 http://prntscr.com/gyhatt

html,
body {
  margin: 0;
  padding: 0;
}

* {
  box-sizing: border-box;
}

.wrapper {
  max-width: 1200px;
  padding: 30px;
}

.container {
  display: flex;
  flex-wrap: wrap;
  background: red;
}

.g {
  padding: 30px;
}

.grid-33 {
  width: 33.3333%;
}

.grid-50 {
  width: 50%;
}

.grid-66 {
  width: 66.6666%;
}

.grid-100 {
  width: 100%;
}

.white {
  background: #fff;
}

.yellow {
  background: #ffb401;
}
<div class="wrapper">
  <div class="container">
    <div class="g  white grid-66">
      <p>Test</p>
    </div>
    <div class="g yellow grid-33">
      <p>Test</p>
    </div>
  </div>
</div>

fiddle

我已经尝试将 grid-33 设置为 33.3334%,但它不起作用,而且它没有用,因为我正在使用框架并且无法“轻推”特定列来解决实际的布局问题。我希望 flex box 的尺寸会像显示表一样,其中 px 被四舍五入,但似乎情况并非如此。

感谢任何帮助。

【问题讨论】:

  • 您使用的是什么网络浏览器?我认为 Firefox 或 Chrome 没有任何差距。
  • 让我知道我的回答是否有帮助并且可以被接受和/或赞成......或者它根本不起作用?

标签: html css flexbox


【解决方案1】:

如果您愿意,您可以保留width 属性并使用flex-grow 它是flex 的属性:

在你的情况下,我尝试使用 -

.grid-33 {
  flex-grow: 3;
  -webkit-flex-grow: 3;
}

.grid-66 {
  flex-grow: 7;
  -webkit-flex-grow: 7;
}

在我看来,如果有任何更改,您可以使用flex-grow 值对其进行调整。

html,
body {
  margin: 0;
  padding: 0;
}

* {
  box-sizing: border-box;
}

.wrapper {
  max-width: 1200px;
  padding: 30px;
}

.container {
  display: flex;
  flex-wrap: wrap;
  background: red;
}

.g {
  padding: 30px;
}

.grid-33 {
  flex-grow: 3;
  -webkit-flex-grow: 3;
}

.grid-50 {
  width: 50%;
}

.grid-66 {
  flex-grow: 7;
  -webkit-flex-grow: 7;
}

.grid-100 {
  width: 100%;
}

.white {
  background: #fff;
}

.yellow {
  background: #ffb401;
}
<div class="wrapper">
  <div class="container">
    <div class="g  white grid-66">
      <p>Test</p>
    </div>
    <div class="g yellow grid-33">
      <p>Test</p>
    </div>
  </div>
</div>

【讨论】:

  • hm ,它修复了它,但同样,它是一个已经以百分比定义宽度但我尝试的框架。
  • @Benn 如果它已修复 width 然后在您的自定义样式中使用 width: auto 覆盖它(如果您的自定义代码被框架代码覆盖,请使用 !important)跨度>
【解决方案2】:

该问题是 Chrome 和 Edge 中存在的错误(或舍入问题),但 Firefox 没有。


我找到了 2 种解决方法,一种是您将 justify-content: space-between; 添加到 flex 容器中(但在某些屏幕宽度上,Chrome 似乎仍然存在 1px 问题)

堆栈sn-p

html,
body {
  margin: 0;
  padding: 0;
}

* {
  box-sizing: border-box;
}

.wrapper {
  max-width: 1200px;
  padding: 30px;
}

.container {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  background: red;
}

.g {
  padding: 30px;
}

.grid-33 {
  width: 33.3333%;
}

.grid-50 {
  width: 50%;
}

.grid-66 {
  width: 66.6666%;
}

.grid-100 {
  width: 100%;
}

.white {
  background: #fff;
}

.yellow {
  background: #ffb401;
}
<div class="wrapper">
  <div class="container">
    <div class="g  white grid-66">
      <p>Test</p>
    </div>
    <div class="g yellow grid-33">
      <p>Test</p>
    </div>
  </div>
</div>

另一种是使用flex: 1 1 0/flex: 2 2 0,其中flex-grow/flex-shrink 是 1 of 3 和 2 of 3,因此它们的增长和收缩均等。

注意,像这样使用它很重要,其中它的flex-basis 设置为 0,否则在可用空间在项目之间分配之前将考虑内容。

html,
body {
  margin: 0;
  padding: 0;
}

* {
  box-sizing: border-box;
}

.wrapper {
  max-width: 1200px;
  padding: 30px;
}

.container {
  display: flex;
  flex-wrap: wrap;
  background: red;
}

.g {
  padding: 30px;
}

.grid-33 {
  width: 33.3333%;
  flex: 1 1 0;
}

.grid-50 {
  width: 50%;
}

.grid-66 {
  width: 66.6666%;
  flex: 2 2 0;
}

.grid-100 {
  width: 100%;
}

.white {
  background: #fff;
}

.yellow {
  background: #ffb401;
}
<div class="wrapper">
  <div class="container">
    <div class="g  white grid-66">
      <p>Test</p>
    </div>
    <div class="g yellow grid-33">
      <p>Test</p>
    </div>
  </div>
</div>

【讨论】:

  • 第一个,space-between 只是移动了 chrome prntscr.com/gyw8al 中的错误,正如你提到的,第二个改变了容器的宽度,所以三分之一不再是三分之一。但是感谢您承认这是一个舍入错误。
  • 我会接受您的回答,因为它是浏览器错误,因此建议的“修复”都不起作用。由于我有一个周围的容器,我设法以 1px 的负右边距拉伸右列。我想我需要的只是有人确认这是您所做的实际错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2012-01-06
  • 1970-01-01
  • 2011-01-29
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多