CSS - 垂直居中对象和文本产生意外结果
CSS - Vertical centering object and text creates unexpected result
CSS
中的垂直居中相对简单。这是我正在使用的代码。
position:relative;
top:50%;
transform:translateY(-50%);
1) 这非常适合将多个形状彼此相邻居中。
2) 它非常适合将多个单词彼此相邻居中。
然而奇怪的是,当我将一个居中的形状放在一个居中的单词旁边时,它就会变得混乱。这有明显的或不那么明显的原因吗?我该如何解决?
我创建了一个 fiddle 所以你可以看到结果。 https://jsfiddle.net/9h1pfpns/
这是我的代码:
.container {
height: 200px;
margin: 10px;
border: 4px solid #754419;
}
.shape {
display: inline-block;
position: relative;
top: 50%;
transform: translateY(-50%);
width: 250px;
height: 100px;
margin-left: 10px;
background-color: aquamarine;
}
.text {
display: inline-block;
position: relative;
top: 50%;
transform: translateY(-50%);
font: bold 1.25em Arial, Helvetica, sans-serif;
margin-left: 10px;
border: 1px solid #754419;
}
<div class="container">
<div class="shape"></div>
<div class="text">first</div>
</div>
您可以将文本的 CSS 更改为:-
.text {
display: inline-block;
position: relative;
margin: 0 auto;
font: bold 1.25em Arial, Helvetica, sans-serif;
margin-left: 10px;
border: 1px solid #754419;
}
为了澄清,我删除了以下 CSS:-
top: 50%;
transform: translateY(-50%);
并添加:-
margin: 0 auto;
查看 jsFiddle https://jsfiddle.net/01kkavf4/
*更新*
你也可以替换:-
top: 50%;
transform: translateY(-50%);
有:-
top: 10%;
transform: translateY(-50%);
两者的jsFiddle:-
https://jsfiddle.net/01kkavf4/
第二个分辨率更适合您的盒子。
只是几种不同的方式。
它不起作用,因为在使用相对定位和变换进行偏移之前,the elements are not aligned to the top。默认为 vertical-align: baseline
.
只需添加 vertical-align: top
.
.container {
height: 200px;
margin: 10px;
border: 4px solid #754419;
}
.item, .text {
display: inline-block;
position: relative;
top: 50%;
transform: translateY(-50%);
margin-left: 10px;
vertical-align: top;
}
.item {
width: 250px;
height: 100px;
background-color: aquamarine;
}
.text {
font: bold 1.25em Arial, Helvetica, sans-serif;
border: 1px solid #754419;
}
<div class="container">
<div class="item"></div>
<div class="text">first</div>
</div>
无论如何,我建议不要使用这种方法,因为万一容器比内容物短,它们会溢出上下。但是您将无法滚动查看上面的溢出内容。
相反,我推荐 。
.container {
height: 200px;
margin: 10px;
border: 4px solid #754419;
display: flex;
}
.item, .text {
margin: auto 0 auto 10px;
}
.item {
width: 250px;
height: 100px;
background-color: aquamarine;
}
.text {
font: bold 1.25em Arial, Helvetica, sans-serif;
border: 1px solid #754419;
}
<div class="container">
<div class="item"></div>
<div class="text">first</div>
</div>
CSS
中的垂直居中相对简单。这是我正在使用的代码。
position:relative;
top:50%;
transform:translateY(-50%);
1) 这非常适合将多个形状彼此相邻居中。
2) 它非常适合将多个单词彼此相邻居中。
然而奇怪的是,当我将一个居中的形状放在一个居中的单词旁边时,它就会变得混乱。这有明显的或不那么明显的原因吗?我该如何解决?
我创建了一个 fiddle 所以你可以看到结果。 https://jsfiddle.net/9h1pfpns/
这是我的代码:
.container {
height: 200px;
margin: 10px;
border: 4px solid #754419;
}
.shape {
display: inline-block;
position: relative;
top: 50%;
transform: translateY(-50%);
width: 250px;
height: 100px;
margin-left: 10px;
background-color: aquamarine;
}
.text {
display: inline-block;
position: relative;
top: 50%;
transform: translateY(-50%);
font: bold 1.25em Arial, Helvetica, sans-serif;
margin-left: 10px;
border: 1px solid #754419;
}
<div class="container">
<div class="shape"></div>
<div class="text">first</div>
</div>
您可以将文本的 CSS 更改为:-
.text {
display: inline-block;
position: relative;
margin: 0 auto;
font: bold 1.25em Arial, Helvetica, sans-serif;
margin-left: 10px;
border: 1px solid #754419;
}
为了澄清,我删除了以下 CSS:-
top: 50%;
transform: translateY(-50%);
并添加:-
margin: 0 auto;
查看 jsFiddle https://jsfiddle.net/01kkavf4/
*更新*
你也可以替换:-
top: 50%;
transform: translateY(-50%);
有:-
top: 10%;
transform: translateY(-50%);
两者的jsFiddle:-
https://jsfiddle.net/01kkavf4/
第二个分辨率更适合您的盒子。
只是几种不同的方式。
它不起作用,因为在使用相对定位和变换进行偏移之前,the elements are not aligned to the top。默认为 vertical-align: baseline
.
只需添加 vertical-align: top
.
.container {
height: 200px;
margin: 10px;
border: 4px solid #754419;
}
.item, .text {
display: inline-block;
position: relative;
top: 50%;
transform: translateY(-50%);
margin-left: 10px;
vertical-align: top;
}
.item {
width: 250px;
height: 100px;
background-color: aquamarine;
}
.text {
font: bold 1.25em Arial, Helvetica, sans-serif;
border: 1px solid #754419;
}
<div class="container">
<div class="item"></div>
<div class="text">first</div>
</div>
无论如何,我建议不要使用这种方法,因为万一容器比内容物短,它们会溢出上下。但是您将无法滚动查看上面的溢出内容。
相反,我推荐
.container {
height: 200px;
margin: 10px;
border: 4px solid #754419;
display: flex;
}
.item, .text {
margin: auto 0 auto 10px;
}
.item {
width: 250px;
height: 100px;
background-color: aquamarine;
}
.text {
font: bold 1.25em Arial, Helvetica, sans-serif;
border: 1px solid #754419;
}
<div class="container">
<div class="item"></div>
<div class="text">first</div>
</div>