<div class="outer">
<div class="inner rotate">Centered?</div>
</div>
这个方案接近:http://jsfiddle.net/CCMyf/2/。您可以从jsfiddle中看到,在应用transform: rotate(-90deg)
样式之前,文本垂直居中,但在此之后有些偏移。当
是否可能在不提前知道任何尺寸的情况下垂直居中此文本?我没有找到任何解决此问题的transform-origin
值。
<div class="outer">
<div class="inner rotate">Centered?</div>
</div>
这个方案接近:http://jsfiddle.net/CCMyf/2/。您可以从jsfiddle中看到,在应用transform: rotate(-90deg)
样式之前,文本垂直居中,但在此之后有些偏移。当
是否可能在不提前知道任何尺寸的情况下垂直居中此文本?我没有找到任何解决此问题的transform-origin
值。
关键是将位置的上下左右设置为50%,然后将transformX和transformY设置为-50%。
.inner {
position: absolute;
top: 50%;
left: 50%;
}
.rotate {
transform: translateX(-50%) translateY(-50%) rotate(-90deg);
}
transform: rotate(-90deg) translateX(-50%) translateY(-50%);
它不起作用,而如果我像你的例子那样把它放在最后,它就可以工作了:translateX(-50%) translateY(-50%) rotate(-90deg);
。 - Maxime Lafarie也许现在回答这个问题有点晚了,但我遇到了同样的问题,并通过添加另一个div来实现。
该方法是:<div class="outer">
<div class='middle'><span class="inner rotate">Centered?</span></div>
</div>
通过在中间元素上应用text-align: center
,以及一些定位样式:
.middle {
margin-left: -200px;
width: 400px;
text-align: center;
position: relative;
left: 7px;
top: 50%;
line-height: 37px;
}
.inner
还要添加 display: inline-block;
属性,以启用 rotate
和 text-align
属性。.rotate-centered {
top: 50%;
right: 50%;
position: absolute;
transform: scale(-1) translate(-50%, 50%);
writing-mode: vertical-lr;
}
<span class="rotate-centered">Text<span>
示例: https://codepen.io/wwwebman/pen/KKwqErL
但是由于IE/EDGE的支持不佳,writing-mode
在这些浏览器中无法正常工作:
https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode
.inner {
font-size: 13px;
font-color: #878787;
position: absolute;
top: 50%;
left: 50%;
background: #DDD;
}
https://jsfiddle.net/touqeer_shakeel/f1gfy1yy/ 但我们可以通过将内部div宽度设置为外部div的高度,内部div的行高设置为外部div的宽度,并为内部div设置具有align-items:center和justify-content:center属性的display flex属性,使整个文本居中对齐。
.inner {
font-size: 13px;
font-color: #878787;
position: absolute;
top: 50%;
left: 50%;
display: flex;
justify-content:center;
align-items:center;
line-height:40px;
}
$('#height').on('change', function(e) {
$('.outer').css('height', $('#height').val() + 'px');
$('.inner').css('width', $('#height').val() + 'px');
});
您可以在“rotate”类中添加margin: 0 auto;
以使文本居中显示。
.rotate {
-webkit-transform: rotate(-90deg);
-ff-transform: rotate(-90deg);
transform: rotate(-90deg);
width: 16px; /* transform: rotate() does not rotate the bounding box. */
margin: 0 auto;
}
移除 .inner
中的 margin-top: -7px;
让我垂直旋转的文本居中了。但是这也导致水平文本不再居中。
只需要移除上述代码吗?
$('.inner').css('margin-top', $(this).parent().height() - 2*$(this).height());
.on('change')
函数中,可以看到这里:http://jsfiddle.net/darkajax/hVhbp/。
display: table
?因为使用“标准”方法来垂直对齐动态div应该可以通过变换而无需问题:https://dev59.com/eXRC5IYBdhLWcg3wJNmf#6182661 - DigTheDougdisplay: table
。这个fiddle显示表格解决方案与上面的解决方案存在相同的问题:http://jsfiddle.net/4d384/。 - danvk.outer
上放置min-width: 16px; width: 16px
会导致与原始问题完全相同的非居中。 - danvk