用CSS垂直居中旋转的文本
我有以下的HTML:
<div class="outer"> <div class="inner rotate">Centered?</div> </div>
div.outer
是一个狭窄的垂直条。 div.inner
旋转90度。 我希望文字“居中?” 出现在它的容器div的中心。 我不知道任何一个div的大小。
这接近: http : //jsfiddle.net/CCMyf/2/ 。 你可以从jsfiddle中看到文本在transform: rotate(-90deg)
之前是垂直居中的transform: rotate(-90deg)
风格被应用,但是稍后有些偏移。 当div.outer
短时,这一点尤为明显。
是否可以在不知道任何尺寸的情况下垂直居中? 我还没有find解决这个问题的任何transform-origin
价值。
关键是设置位置顶部和左侧的50%,然后变换X和变换为-50%。
.inner { position: absolute; top: 50%; left: 50%; } .rotate { transform: translateX(-50%) translateY(-50%) rotate(-90deg); }
见: http : //jsfiddle.net/CCMyf/79/
回答这个问题可能有点晚了,但我偶然发现了同样的问题,并find了一些方法来实现它,通过添加另一个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
属性。
这里是相应的小提琴: http : //jsfiddle.net/CCMyf/47/
你可以添加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; }
“bjnsn”的答案很好,但不完美,因为当文本中包含空格时,它会失败。 比如他用“居中? 作为文本,但如果我们改变了文字让假设'居中? 或不“,那么它将无法正常工作,并将占用空间后的下一行。 Ther没有为内部div区块定义宽度或高度。
.inner { font-size: 13px; font-color: #878787; position: absolute; top: 50%; left: 50%; background: #DDD; }
.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'); });
正在移除: margin-top: -7px;
来自.inner
使垂直旋转的文本为我居中。 这也使横向文本不居中。
只要删除上面的代码?
你可以添加这个:
$('.inner').css('margin-top', $(this).parent().height() - 2*$(this).height());
到你的.on('change')
函数,你可以在这里看到: http : //jsfiddle.net/darkajax/hVhbp/