CSS flexbox 包装 FireFox 中的内容(不是 Chrome)

标签 css google-chrome firefox flexbox pseudo-element

我有一个 button<i> 组成和一个 <span>元素(一个图标和一些文本)。现在两者都有不同的尺寸,所以我在我的按钮上应用了一个 flexbox,它应该很好地居中我的元素。在 Chrome 中,一切都按我预期的那样工作,但在当前 FF 中使用该页面会导致包装按钮的内部内容。该图标通过 :before 显示伪元素。

JSFiddle

谁错了?是 FF 还是 Chrome(和我)。我应该怎么做才能在任一浏览器中获得相同的结果(文本前的图标、垂直居中、无换行)?

最佳答案

奇怪。 button 元素有一些特殊的行为,似乎与 flexbox 冲突。

具体来说,根据spec, flex 元素被 block 化了。 :

The display value of a flex item is blockified: if the specified display of an in-flow child of an element generating a flex container is an inline-level value, it computes to its block-level equivalent.

因此,ispan 将成为 inline,成为 block

但是,flex 属性似乎既不适用于 flex 容器 button,也不适用于 flex 元素 ispan

所以 flex 元素根据 block 格式化上下文而不是 flex 上下文显示,并且由于它们是 block,它们出现在不同的行。

修复它的一种方法是将内容包装在容器中,并使其成为 flex 容器,而不是按钮本身。

div {
  display: flex;
  align-items: center;
}
i {
  width: 12px;
  text-align: center;
  font-size: 22px;
}
i:before {
  content: "\2193";
}
span {
  font-size: 16px;
  margin-right: 10px;
}
<button>
  <div>
    <i></i>
    <span>Text</span>
  </div>
</button>

还要考虑简化标记。

span {
  display: flex;
  align-items: center;
  font-size: 16px;
  margin-right: 10px;
}
span:before {
  content: "\2193";
  width: 12px;
  text-align: center;
  font-size: 22px;
}
<button>
  <span>Text</span>
</button>

关于CSS flexbox 包装 FireFox 中的内容(不是 Chrome),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30979265/

相关文章:

css - div 容器上的动画

javascript - Chrome 扩展 : How to sendMessage form background to background?

javascript - hasOwnProperty 在 FF 中返回 false

在 Chrome 中模拟缩放的 Css

javascript - CSS 覆盖菜单在 Firefox 中不起作用

linux - Firefox 在 Centos/Linux 上找不到 Flash Player 插件

css - 如何使用背景:url(data:image/png;base64 with Retina?

css - 处理类型选择器和类选择器的优先级

css - 将 div 的宽度设置为封闭表格的宽度

java - 在 Headless Chrome 中打开 GWT 应用程序不起作用