我的标题可以包含一行或多行。
如何垂直对齐文本?如果总是一行,我可以将line-height设置为容器的高度。
我可以使用JavaScript来做到这一点,但是我真的不喜欢它,我正在寻找一种纯CSS方式。
另外,如果容器可以用线条扩展,那将是完美的,因此我始终可以在顶部和底部使用相同的填充。
Answers:
为此,您可以使用display:table-cell
属性:
.inline {
display: inline-block;
margin: 1em;
}
.wrap {
display: table;
height: 100px;
width: 160px;
padding: 10px;
border: thin solid darkgray;
}
.wrap p {
display: table-cell;
vertical-align: middle;
}
<div class="inline">
<div class="wrap">
<p>Example of single line.</p>
</div>
</div>
<div class="inline">
<div class="wrap">
<p>To look best, text should really be centered inside.</p>
</div>
</div>
但它适用于IE8及更高版本。阅读本文以获取更多信息:CSS技巧:垂直居中的多行文本。
.wrap
有幻数的height
和width
,可以将每个人设定100%
。然后将width
和height
应用于.wrap
元素的父级。
如果您不喜欢这个display:table
窍门(我知道我不喜欢),那么这里有个解决方案:
.cen {
min-height:5em; width:12em; background:red; margin:1em 0;
}
.cen p {
display:inline-block; vertical-align:middle;
margin:0 0 0 1em; width:10em;
}
.cen::after {
display:inline-block; vertical-align:middle; line-height:5em;
width:0; content:"\00A0"; overflow:hidden;
}
与HTML
<div class="cen">
<p>Text in div 1</p>
</div>
这使div的高度为5em,除非内容更高,否则它会增长。这里的
例子。
编辑:哦,这应该在哪些浏览器上工作?IE8无法合作。
(后来编辑:更新了CSS以处理Chrome中的问题)
<br>
示例中显示的标签)时,我在Chrome中每个元素的底部都留出了很多额外的空白。伪元素似乎正在换行。任何想法如何减轻这种情况?
::after
块认为它确实有一个宽度(由于其内容),因此它在后面不适合p
。不幸的是,它确实需要内容,否则将完全崩溃,并且无法正常工作。但是我不确定为什么只用换行而不是单行p
s来做到这一点。
p
宽度小于div,因此零宽度::after
块在其右边有空间。希望这可以帮助!
<div>
为table-item
,这会使屏幕阅读器以及用户感到困惑。
我真的很喜欢这个解决方案:
<div>
<span style="display: inline-block; vertical-align: middle; height: --The height of your box here--"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here</span>
</div>
随意使用样式表,高度为100%...
也可能必须注释掉span标记之间的空格,因为它们是内联块
<div style="outline:thin solid red;">
<span style="display: inline-block; vertical-align: middle; height: 60px;"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here.</span>
</div>
<div style="outline:thin solid red;">
<span style="display: inline-block; vertical-align: middle; height: 60px;"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here. Put your multi-line content here. Put your multi-line content here. Put your multi-line content here. Put your multi-line content here.</span>
</div>
注意:这似乎不适用于多行内容。
除了使用vertical-align: center
and之外display: table-cell
,您可能还想看看称为CSS display flex的较新方法,它更简单
.box {
width: 200px;
height: 50px;
padding: 10px;
margin-bottom: 20px;
background-color: red;
/* Only add these 2 lines */
display: flex;
align-items: center;
}
<div class="box">Lorem ipsum dolor</div>
<div class="box">Lorem ipsum dolor sit amet ipsum dolor</div>
这样的东西
<div>
<p>
Lorem Ipsum is simply
</p>
</div>
div {
display: table;
}
p {
display:table-cell;
vertical-align: middle;
}
如果您希望文本具有响应能力,则随着宽度的动态变化,将单词从一行换成多行,上述带inline-block
助手的技巧(此处具有最佳的兼容性)可能还不够,因为.inlinehelper
可以将文本自动向下压入。
这是完成此类简单任务的完整解决方案:
HTML:
<div id="responsive_wrap">
<span class="inlinehelper"><span id="content">
</div>
CSS:
#responsive_wrap {
display: block;
height: 100%; //dimensions just for
width: 100%; //example's sake
white-space: nowrap;
}
#content {
display: inline-block;
white-space: initial;
}
.inlinehelper {
height: 100%;
width: 0;
vertical-align: middle;
display: inline-block;
}
注意该white-space:nowrap
属性,该属性可以防止.inlinehelper
和#content
相互包装。
white-space:initial
在#content
复位能力包的span
本身;
另一个选择:
更多是个人喜好问题。您可以使用伪元素代替.inlinehelper
。删除.inlinehelper
css规则和元素,并添加以下伪元素css选择器:
#responsive_wrap:before {
content: "";
display: inline-block;
vertical-align: middle;
height: 100%;
width: 0px;
}
PS:我发现这确实是一个老问题,为时已晚,因此让这个答案成为可能,也许对某人会有帮助。
明智地使用表格是布局内容的最佳方法(将样式标签放入CSS):
<table style="border:1;collapse;width:300px;padding:5px;background-color:red;">
<tr>
<td style="width:250px;vertical-align:middle;">Lorem ipsum dolor sit amet ipswum dolor</td>
<td style="width:50px;vertical-align:top;color:white;">1 Line</td>
</tr>
行数将需要一个JS脚本,在这里查看:
http://www.webdeveloper.com/forum/archive/index.php/t-44333.html
我喜欢这种解决方案。我在某个地方看到了stackoverflow中的这个技巧,但不记得确切的位置。非常有用!:)
ul {
background: #000;
padding-left: 0;
}
ul li {
height: 130px;
position: relative;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border-bottom: 3px solid #F7F7F7;
}
ul li:last-of-type {
border-bottom: none;
}
ul li:after {
color: #333;
position: absolute;
right: 35px;
font-size: 40px;
content: ">";
top: 50%;
margin-top: -24px;
color: #FFDA00;
-webkit-transition: 0.25s all ease;
transition: 0.25s all ease;
}
ul li a {
font-size: 35px;
font-family: Arial;
color: #fff;
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding-left: 40px;
height: 100%;
line-height: 38px;
display: inline-block;
width: 100%;
text-align: left;
text-decoration: none;
}
ul li a:before {
display: inline-block;
vertical-align: middle;
content: " ";
height: 100%;
}
ul li a span {
display: inline-block;
vertical-align: middle;
}
<ul>
<li class="dn">
<a href="kapec.ru.php"><span> Lorem ipsum 1 LINE</span></a>
</li>
<li>
<a href="varianti.ru.php"><span>Lorem ipsum <br> 2 lines </span></a>
</li>
</ul>