Подтвердить что ты не робот

Вертикально центрированный текст с 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, которые решают эту проблему.

4b9b3361

Ответ 1

Ключ состоит в том, чтобы установить положение сверху и слева на 50%, а затем transformX и transformY до -50%.

.inner {
    position: absolute;
    top: 50%;
    left: 50%;
}

.rotate {  
    transform:  translateX(-50%) translateY(-50%) rotate(-90deg);
}

см. ниже: http://jsfiddle.net/CCMyf/79/

Ответ 2

Возможно, немного поздно ответить на этот вопрос, но я наткнулся на ту же проблему и нашел какой-то способ ее достижения, добавив еще один 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/

Ответ 3

Можете ли вы добавить 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;
}

Ответ 4

Ответ от "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, и установив свойство flex отображения для внутреннего div с выравниванием -items: center и justify-content: свойства центра.

.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/

Ответ 5

Удаление: margin-top: -7px; из .inner сделало вертикально повернутый текст центрированным для меня. Он также сделал горизонтальный текст не центрированным.

Просто удалите вышеуказанный код?

Ответ 6

Вы можете добавить это:

$('.inner').css('margin-top', $(this).parent().height() - 2*$(this).height());

К вашей функции .on('change'), как вы можете видеть здесь: http://jsfiddle.net/darkajax/hVhbp/