"text-align:justify;" 内联块元素是否正确?

thi*_*der 50 css text-align justify

还有一些其他问题已经解决了如何最好地应用text-align: justify以使内联块元素均匀分布...例如,我如何*真正*证明HTML + CSS中的水平菜单?

但是,"清除"内联块元素行的100%宽度元素由浏览器给出了自己的行.我无法弄清楚如何在不使用line-height: 0;父元素的情况下摆脱那个空的垂直空间.

有关问题的示例,请参阅此小提琴

对于我使用的解决方案line-height: 0;,请看这个小提琴

我正在使用的解决方案要求将新line-height元素应用于子元素,但任何先前设置line-height都将丢失.有人知道更好的解决方案吗?我想避免表格,以便元素可以在必要时包装,还有flexbox,因为浏览器支持还没有.我也想避免浮动,因为间隔开的元素数量是任意的.

Sco*_*ttS 86

更新了下面的"未来"解决方案信息; 仍未完全支持.

目前的解决方法(IE8 +,FF,Chrome测试)

看到这个小提琴.

相关的CSS

.prevNext {
    text-align: justify;
}

.prevNext a {
    display: inline-block;
    position: relative;
    top: 1.2em; /* your line-height */
}

.prevNext:before{
    content: '';
    display: block;
    width: 100%;
    margin-bottom: -1.2em; /* your line-height */
}

.prevNext:after {
    content: '';
    display: inline-block;
    width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

说明

display: block:before有负下边距元素拉文达一行的高度,它消除了多余的线的线,但是置换文本.然后用position: relativeinline-block位移被抵消的元素,但不添加附加行回来.

虽然css本身不能直接访问line-height"单位",但emmargin-bottomtop设置中的使用很容易适应任何line-height给定的乘数值之一.所以1.2,120%或者在计算方面1.2em都是相同的,这使得在这里使用一个好的选择,即使被设置,然后为和将匹配.用于规范化站点外观的良好编码意味着在某些时候应该明确定义,因此如果使用任何乘数方法,那么等效单位将给出与之相同的值.并且如果设置为非长度,例如,则可以设置.line-heightemline-height: 1.21.2emmargin-bottomtopline-heightemline-heightline-heightempx

绝对有一个变量或mixin使用css预处理器,如LESS或SCSS可以帮助保持这些值匹配适当的line-height,或javascript可以用于动态读取,但实际上,line-height应该在使用它的上下文中知道,以及此处的相应设置.

更新缩小文本(无空格)问题

Kubi的评论指出,删除<a>元素之间空格的html缩小导致理由失败.一个在内部伪空间<a>标签没有帮助(但预计,随着空间的内部发生inline-block元件),<wbr>添加之间<a>标签没有帮助(可能是因为休息没有必要到下一行),因此,如果需要缩小,然后解决方案是硬编码的非破坏空间特征 -&nbsp;其他空间字符,如薄空间空间不起作用(令人惊讶).

接近未来的清洁解决方案

的溶液,其中webkit是落伍了(作为第一写入此的)中的溶液:

.prevNext {
    text-align: justify;
    -moz-text-align-last: justify;
    -webkit-text-align-last: justify; /* not implemented yet, and will not be */
    text-align-last: justify; /* IE */
}
Run Code Online (Sandbox Code Playgroud)

它适用于FF 12.0+和IE8 +(IE7中的错误).

对于Webkit,从版本39开始(至少可能早先已经悄悄进入),它确实在没有-webkit-扩展的情况下支持它,但用户启用了实验性功能时(可以在其中完成chrome://flags/#enable-experimental-web-platform-features).有传言说版本41或42应该看到完全支持.由于webkit尚未得到无缝支持,它仍然只是部分解决方案.但是,我认为我应该发布它,因为它对某些人有用.

  • 我花了一个小时才发现这个方法只有在你的子元素之间有空格*时才会起作用.它不适用于我的xsl生成的`formatOutput = true`"minified"HTML.参看 http://jsfiddle.net/QaS5J/1/我认为,一条无空格内联块链被视为一个单词,因此不合理. (6认同)
  • @kubi:如果需要缩小html,可以解决这个问题.我已经更新了我的答案.基本上,需要在html中使用硬编码的非破坏空间(在缩小时不应该消除). (2认同)
  • 关于元素之间的"nbsp;"只需要注意一点.添加"nbsp;"会导致内联块定位的微小偏移.为了防止这种情况,将每个`nbsp;`包装在`.span.inivisible-space`中并创建一个带有`font-size:0;的类. (2认同)
  • 在**IE**中,只有当容器(在本例中为**.prevNext**)的font-size属性大于0时才会起作用.如果它等于0,那么它将不起作用 (2认同)

ACJ*_*ACJ 7

考虑以下:

.prevNext {
    display: table;
    width: 100%
}

.prevNext a {
    display: table-cell;
    text-align: center
}
Run Code Online (Sandbox Code Playgroud)

(另请参阅编辑过的小提琴.)这就是您要找的东西吗?这种技术的优点是你可以添加更多的项目,它们都将自动居中.所有现代Web浏览器都支持.