Jos*_*owe 26 html css vertical-alignment centering
我正在尝试使用样式化的超链接为网站创建一些按钮.我设法让按钮看起来像我想要的,禁止一个小问题.我无法将文本(下面的源代码中的"链接")放到垂直居中.
不幸的是,第二个按钮可能会显示多行文本,所以我不能用line-height
它来垂直居中.
我最初的解决方案是使用display: table-cell;
而不是inline-block
,并在Chrome,Firefox和Safari中对问题进行排序,但在Internet Explorer中没有,因此我认为我需要坚持使用内联块.
我如何在57px
x中垂直居中链接文本100px
inline-block
,并让它迎合多行文本?提前致谢.
CSS:
.button {
background-image:url(/images/categorybutton-off.gif);
color:#000;
display:inline-block;
height:57px;
width:100px;
font-family:Verdana, Geneva, sans-serif;
font-size:10px;
font-weight:bold;
text-align:center;
text-decoration:none;
vertical-align:middle;
}
.button:hover {
background-image:url(/images/categorybutton-on.gif);
}
.button:before {
content:"Click Here For\A";
font-style:italic;
font-weight:normal !important;
white-space:pre;
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<a href="/" class="button">Link</a>
<a href="/" class="button">Link<br />More Details</a>
Run Code Online (Sandbox Code Playgroud)
Raf*_*łka 32
非常感谢@avrahamcool,就像一个魅力!
我有一点升级.您可以使用css替换冗余的.Centerer span
.button:before {
content: '';
display: inline-block;
vertical-align: middle;
height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
请参阅此处的演示:http://jsfiddle.net/modernweb/bXD2V/
注意:这不适用于"content"属性中的文本.
avr*_*ool 19
用span(中心)包裹你的文本,然后在它之前写一个空的span(Centerer).
HTML:
<a href="..." class="button">
<span class="Centerer"></span>
<span class='Centered'>Link</span>
</a>
Run Code Online (Sandbox Code Playgroud)
CSS
.Centered
{
vertical-align: middle;
display: inline-block;
}
.Centerer
{
display: inline-block;
height: 100%;
vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
看看这里:http://jsfiddle.net/xVnQ6/
您不需要为此创建任何包装元素或任何内容...只需使用内联柔性(或网格,但我将描述柔性)和中心内容,就像这样(这与使用非内联柔性相同,但添加了一个vertical-align
元素来设置合理的基线):
.button {
display: inline-flex;
flex-direction: column;
justify-content: center;
text-align: center;
vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
<a href="/" class="button">Link</a>
<a href="/" class="button">Link<br />More Details</a>
Run Code Online (Sandbox Code Playgroud)
这也适用于动态高度内容。
经历每一个;所以首先有一个显而易见的问题:
display: inline-flex;
Run Code Online (Sandbox Code Playgroud)
接下来,由于::before
正在使用,因此有两个子项目(the::before
和 text)。因为我想我们希望它们垂直堆叠,所以我们需要设置方向(因为默认为“行”):
flex-direction: column; /* PS: this defines the "main" axis */
Run Code Online (Sandbox Code Playgroud)
然后,由于我们希望元素沿着垂直轴(即列,即主轴)打包和居中(如果您使用“行”弯曲方向,则应align-content
在此处使用):
justify-content: center;
Run Code Online (Sandbox Code Playgroud)
由于我们想要将文本居中,因此每行都单独居中(请记住,每个项目默认填充十字轴,即水平轴,因此它们已经是全宽):
text-align: center;
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这已经足够了,但由于这是一个内联元素,基线将遍布各处(基于内容),因此我们可以将它们设置为一致且合理的内容:
vertical-align: middle; /* align *this* element in the *parent*! */
Run Code Online (Sandbox Code Playgroud)
就是这样;只是直接应用于元素。没有内部 div 或包装器或任何需要的东西。
如果你只有一个子元素(例如没有::before
或其他),那么 Flex 方向是什么并不重要,因此你可以使用默认值稍微缩短 CSS:
/* if there's just one child, or you want to */
/* arrange children horizontally: */
.button {
display: flex;
align-content: center;
text-align: center;
vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
vertical-align
如果元素的容器将其放置在可接受的位置并且不需要调整基线,您也可以删除。
顺便说一句,如果您愿意,也可以使用内联网格布局来完成同样的事情——单行/列网格与 Flex 有很多功能重叠:
/* using grid instead: */
.button {
display: inline-grid;
grid: max-content / auto;
align-content: center;
text-align: center;
vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
display: inline-flex;
Run Code Online (Sandbox Code Playgroud)
flex-direction: column; /* PS: this defines the "main" axis */
Run Code Online (Sandbox Code Playgroud)