Вертикально повернутый по центру текст с 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) стиль применяется, но несколько смещается после. Это особенно важно заметно, когда div.outer коротко.
можно ли центрировать этот текст по вертикали, не зная заранее ни одного из размеров? Я не нашел никаких значений transform-origin чтобы решить эту проблему.
6 ответов:
ключ должен установить положение сверху и слева до 50%, а затем transformX и transformY до -50%.
.inner { position: absolute; top: 50%; left: 50%; } .rotate { transform: translateX(-50%) translateY(-50%) rotate(-90deg); }
это может быть немного поздно для ответа на этот вопрос, но я наткнулся на ту же проблему и нашел способ ее достижения, добавив еще один 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; }The
.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; }https://jsfiddle.net/touqeer_shakeel/f1gfy1yy/ Но мы можем сделать весь текст по центру выровнять, установив ширина внутреннего div равна высоте внешнего div, высота линии внутреннего div равна ширине внешнего div и установка свойства display flex для внутреннего div с align-items:center и justify-content: center properties.
.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'); });обновлена скрипка https://jsfiddle.net/touqeer_shakeel/cjL21of5/
устранение :
margin-top: -7px;с.innerсделал вертикально повернутый текст по центру для меня. Это также сделало горизонтальный текст не центрированным.просто удалите приведенный выше код?
вы можете добавить это:
$('.inner').css('margin-top', $(this).parent().height() - 2*$(this).height());на
.on('change')функция, как вы можете видеть здесь:http://jsfiddle.net/darkajax/hVhbp/
Comments