【问题标题】:Why do browser prefixes for text-align have different behaviour and which is correct?为什么 text-align 的浏览器前缀有不同的行为,哪个是正确的?
【发布时间】:2017-01-22 01:47:48
【问题描述】:

我想垂直居中<div>标签,它们之间有一个水平边距。

问题在于text-align: centertext-align: -webkit-centertext-align: -moz-center 之间的这种行为似乎不一致:

.parent {
  display: inline-block;
  border: 1px dotted #fd0;
  position: relative;
}
.parent.ta {
  text-align: center;
}
.parent.browser-ta {
  text-align: -webkit-center;
  text-align: -moz-center;
}
.child {
  display: inline-block;
  vertical-align: top;
}
.child > .content {
  display: block;
  margin: 0 10px;
  border: 1px solid #888;
  width: 200px;
  text-align: left;
}
.wrong {
  background-color: #e00;
  color: #fff;
}
.right {
  background-color: #0a3;
  color: #fff;
}
<div>
  Using <tt>text-align: center</tt>;
  <div class="parent ta">
    <div class="child">
      <div class="content wrong">child 1 LEFT</div>
      <div class="parent ta">
        <div class="child">
          <div class="content">child a</div>
        </div>
        <div class="child">
          <div class="content">child b</div>
        </div>
        <div class="child">
          <div class="content">child c</div>
        </div>
      </div>
    </div>
    <div class="child">
      <div class="content wrong">child 2 LEFT</div>
      <div class="parent ta">
        <div class="child">
          <div class="content">child d</div>
        </div>
        <div class="child">
          <div class="content">child e</div>
        </div>
        <div class="child">
          <div class="content">child f</div>
        </div>
      </div>
    </div>
    <div class="child ">
      <div class="content right">child 3 CENTRE</div>
    </div>
  </div>
</div>
<br>
<br>
<div>
  Using <tt>text-align: -vendor-center</tt>
  <div class="parent browser-ta">
    <div class="child">
      <div class="content right">child 1 CENTRE</div>
      <div class="parent browser-ta">
        <div class="child">
          <div class="content">child a</div>
        </div>
        <div class="child">
          <div class="content">child b</div>
        </div>
        <div class="child">
          <div class="content">child c</div>
        </div>
      </div>
    </div>
    <div class="child">
      <div class="content right">child 2 CENTRE</div>
      <div class="parent browser-ta">
        <div class="child">
          <div class="content">child d</div>
        </div>
        <div class="child">
          <div class="content">child e</div>
        </div>
        <div class="child">
          <div class="content">child f</div>
        </div>
      </div>
    </div>
    <div class="child">
      <div class="content right">child 3 CENTRE</div>
    </div>
  </div>

运行 sn-p 和两个相似的 HTML 和 CSS 在 Chrome (Webkit/Blink) 和 FireFox 中产生不同的布局。红色面板位置错误,绿色面板位置正确。

所以text-align: -webkit-centertext-align: -moz-center 似乎是正确的(对我来说),但text-align: center 似乎在两个浏览器中都有错误。

挖掘出古老的 &lt;centre&gt; 标签(我们不应该使用它)并且它也可以正常工作(尽管检查它发现它也使用浏览器前缀)。

这是正确的吗?这是一个错误吗?有差异的原因吗?我应该使用哪一个?

【问题讨论】:

  • 我从来没有见过那个属性供应商前缀...你有这样做的参考吗?
  • @Paulie_D 不,我没有,但我包含了一个运行并演示不同行为的 sn-p。如果您有相关的明确文档,那么这可能是一个很好的答案。您引用的替代问题是相关的,但有一个非常不同的解决方案 - margin: 0 auto; 对我不起作用,因为我希望孩子之间有一致的边距。
  • 供应商前缀版本是非规范的,因此实现会有所不同。我怀疑你应该研究一下 flexbox,我相信它会取代这个属性。
  • @Paulie_D 这通常是我的假设,但是前缀属性的行为显然更正确 - 所有孩子都是 display: inline-block; 所以应该居中,text-align: -prefix-center; 确实如此text-align: center; 不这样做

标签: css cross-browser webkit mozilla vendor-prefix


【解决方案1】:

MDN 将前缀值描述为“块对齐值”,这意味着除了其中的内联内容之外,块框本身也是对齐的。这是&lt;center&gt; 元素的确切行为,而前缀值实际上是针对该元素的 — 如果您查看每个引擎的 UA 样式表,您会发现一个规则集准确地说明了这一点center { display: block; text-align: -vendor-center; }.

text-align: center 没有以这种方式实现的原因是因为text-align 旨在影响内联级框(如其名称中的“文本-”所证明的那样),而不是块级框。但是,我怀疑这不是您真正想要的答案。

发生的情况是,在您的 sn-p 中实际对齐的框是 .content 元素,它们是块框,而不是内联块。最后一个元素 居中的原因是它的父元素(一个内联块)被收缩包装,然后其自身被其祖先中的 text-align: center 声明居中。

【讨论】:

  • 啊!所以text-align: center 只适用于内联和内联块元素,但text-align: -vendor-center 也适用于块元素?好的,这有帮助,并给了我一种解决方法。但令人沮丧的是:我知道&lt;center&gt; 将表示和内容混为一谈,但它仍然存在,因为 CSS 替代品并没有做到它可靠的功能(自动边距和 -50% 的翻译都是杂物)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
相关资源
最近更新 更多