【问题标题】:Inconsistent flexbox CSS with fieldsets, Firefox vs. Chrome带有字段集、Firefox 与 Chrome 的 flexbox CSS 不一致
【发布时间】:2020-12-30 21:34:26
【问题描述】:

我遇到了一些奇怪的行为,希望得到解释或澄清。是不是我用错了 flex?

https://jsfiddle.net/bxnohfkq/5/

let $field = $('#field');
let $wrapper = $('#wrapper');
let $button = $('#button');

// display dimensions.
$field.val($wrapper.outerWidth() + '×' + $wrapper.outerHeight());

// ???
$button.click((ev) => {
  if ($wrapper.is('.fix')) {
    $wrapper.removeClass('fix');
  } else {
    $wrapper.addClass('fix');
  }
});
* {
  box-sizing: border-box;
}

fieldset {
  min-width: 0;
  padding: 0;
  margin: 0;
  border: 0;
}

#wrapper {
  max-width: 260px;
}

#padded {
  padding: 0.5rem;
  background-color: tan;
}

#row {
  display: flex;
}

#fieldset_field {
  flex-grow: 1;
}

#field {
  width: 100%;
}

#button {
  margin-left: 0.5rem;
}

.fix fieldset {
  min-inline-size: unset;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="wrapper">
  <p>Clicking button fixes the issue in Firefox. In Chrome, it never even comes up in the first place.</p>
  <div id="padded">
    <div id="row">
      <fieldset id="fieldset_field">
        <input type="text" id="field" />
      </fieldset>
      <fieldset id="fieldset_button">
        <button id="button">Ok</button>
      </fieldset>
    </div>
  </div>
</div>

我有一个输入字段,可以将相邻按钮推出其包装盒 - 但仅限于 Firefox; Chrome 没有这个问题。

起初,我认为这与用户代理如何为表单输入字段使用不同的默认宽度有关。但事实证明这是一个&lt;fieldset&gt; 设置:如果我将min-inline-size: unset;min-inline-size: min-content; 应用于所有字段集,它会很好地对齐。

不过,我并不真正了解根本问题。 Documentation 建议该属性只会与写作方向相关——我不会以任何方式改变。

【问题讨论】:

  • @G-Cyrillus,你需要调整窗口大小。
  • @Simplicius 好吧,我明白了,确实很有趣

标签: css google-chrome firefox flexbox fieldset


【解决方案1】:

您可以使用flex: 1 1 0; (flex: [grow] [shrink] [base];) 而不是只使用flex-grow: 1;,这样您也可以删除min-inline-size

* {
  box-sizing: border-box;
}
fieldset {
  min-width: 0;
  padding: 0;
  margin: 0;
  border: 0;
}
#wrapper {
  max-width: 260px;
}
#padded {
  padding: 0.5rem; 
  background-color: tan;
}
#row {
  display: flex; 
}
#fieldset_field {
  flex: 1 1 0;
}
#field {
  width: 100%;
}
#button {
  margin-left: 0.5rem;
}
<div id="wrapper">
  <p>Clicking button fixes the issue in Firefox. In Chrome, it never even comes up in the first place.</p>
  <div id="padded">
    <div id="row">
      <fieldset id="fieldset_field">
        <input type="text" id="field" />
      </fieldset>
      <fieldset id="fieldset_button">
        <button id="button">Ok</button>
      </fieldset>
    </div>
  </div>
</div>

【讨论】:

  • 你说得对,这确实可以解决问题。 (Base 0,嗯?好吧)我不知道为什么会这样,但由于 flex 对我来说本身就是一个谜,我会接受这个答案。
  • @WoodrowShigeru。哈哈,base: 0unset的同义词。
猜你喜欢
  • 2012-10-17
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2013-10-04
  • 2016-08-20
相关资源
最近更新 更多