Html 如何水平和垂直对齐内联块
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24572028/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to align an inline-block horizontally and vertically
提问by sprocket12
What is the best/cleanest using CSS
to align the #dates div
to the right side of the header, and vertically in the middle.
什么是最好/最干净的CSS
用于将#dates div
标题与标题右侧对齐,并在中间垂直对齐。
I tried float: right
, but that does not allow the vertical-align
. I want to avoid using floats, so I am using inline-block
, and using relative positioning. Is there a more correct approach?
我试过了float: right
,但那不允许vertical-align
。我想避免使用浮点数,所以我使用inline-block
, 并使用相对定位。有没有更正确的方法?
I do not like the fact that I have to do a top of 30px, and using trial and error until it centers.
我不喜欢这样的事实,即我必须做一个 30px 的顶部,并使用反复试验直到它居中。
<div id="header">
<a id="logo" href="~/" runat="server">
<img src="Images/Interface/logo.png" alt="logo" />
</a>
<div id="dates">
<div id="hijri-date">2 Ramadhaan, 1435 AH</div>
<div id="gregorian-date">Sunday 29 June 2014</div>
</div>
</div>
#header
{
background-color: white;
padding: 15px;
position: relative;
}
#logo
{
display: inline-block;
vertical-align: middle;
}
#logo img
{
vertical-align: bottom; /* to get rid of text descender space underneath image */
}
#dates
{
display: inline-block;
position: absolute;
right: 30px;
top: 30px;
font-size: 14px;
font-family: 'Open Sans';
color: #696969;
background: url(Images/Interface/date-icon.png) no-repeat;
background-position-y: center;
padding-left: 32px;
}
采纳答案by Pete
回答by Marc Audet
Using Inline-Blocks
使用内联块
Using your HTML elements as posted, try the following CSS:
使用您发布的 HTML 元素,尝试以下 CSS:
#header {
background-color: yellow;
padding: 15px;
text-align: justify;
line-height: 0;
}
#logo {
display: inline-block;
vertical-align: middle;
}
#logo img {
vertical-align: bottom;
/* to get rid of text descender space underneath image */
}
#dates {
display: inline-block;
line-height: 1.5;
font-size: 14px;
font-family:'Open Sans';
color: black;
background-image: url(http://placehold.it/100x100);
background-position: center;
padding-left: 32px;
}
#header:after {
content: '';
display: inline-block;
vertical-align: top;
width: 100%;
}
Since you have two child elements in #header
, a left logo image and a right text block, just use text-align: justify
to force the logo to the left and the text to the right.
由于您在 中有两个子元素#header
,一个左徽标图像和一个右文本块,只需用于text-align: justify
强制徽标向左,文本向右。
To get this to work, you need at least two rows in the #header
.
要使其工作,您需要在#header
.
To generate a second row, use a pseudo element: #header:after
which will place a 100% wide empty inline-block after the date. The width: 100%
forces it to start and fill a 2nd row and the vertical-align: top
gets rid of the extra white space below the baseline.
要生成第二行,请使用伪元素:#header:after
它将在日期之后放置一个 100% 宽的空行内块。该width: 100%
部队就开始和填充第2行vertical-align: top
摆脱了低于基准多余的空白的。
To deal with the white space in the height, set line-height: 0
in #header
which will allow the height of the pseudo-element to collapse to 0. However, you need to reset the line-height: 1.5
in #dates
to get legible text.
为了处理高度中的空白,设置line-height: 0
in #header
which 将允许伪元素的高度折叠为 0。但是,您需要重置line-height: 1.5
in#dates
以获得清晰的文本。
Pros and Cons
利弊
With this approach, the elements will eventually wrap to two lines as the page width gets smaller.
使用这种方法,随着页面宽度变小,元素最终会换行成两行。
If you want to keep the elements on a single line, you might be better off using CSS tables.
如果您想将元素保留在一行中,最好使用 CSS 表格。
回答by Vladimir Shevchuk
I think, the best way for vertical align is using css:display-table
and css"display-table-cell
properties. If you want align to right content in id="dates" you should use css:display-inline-table
inside this block.
我认为,垂直对齐的最佳方法是使用css:display-table
和css"display-table-cell
属性。如果你想在 id="dates" 中对齐正确的内容,你应该css:display-inline-table
在这个块内使用。
#header {
background: #fff;
padding: 15px;
background: #ccc;
display: table;
}
#logo {
display: table-cell;
}
#dates {
display: table-cell;
text-align: right;
font-size: 14px;
font-family: 'Open Sans';
color: #696969;
}