- Позиция вашего ящика
relative
(с некоторым количеством margin
места для смещения текста заголовка) - Позиция вашего заголовка
absolute
с отрицательным верхом -1.1em
- Создайте
<span>
(внутри заголовка) для повернутого вертикального текста - Поместите абсолютное значение SPAN справа
100% + 1.1em
transform
поверните вы ПРОШЕЛ на начало координат right top
на -90deg
/*QuickReset*/*{margin:0;box-sizing:border-box;}html,body{min-height:100%;font:14px/1.4 sans-serif;}
.box {
position: relative;
margin: 3em;
width: 140px;
height: 100px;
background: #0bf;
}
.box h1 {
position: absolute;
text-transform: uppercase;
white-space: nowrap;
font-size: 2em; /* play only with this value. don't touch the rest! */
top: -1.1em;
}
.box h1 span{
position: absolute;
top: 0.35em;
right: calc(100% + 1.1em);
transform-origin: right top;
transform: rotate(-90deg);
}
<div class="box">
<h1><span>Latest</span> News</h1>
</div>
<div class="box">
<h1><span>Special</span> Offers!</h1>
</div>
<div class="box">
<h1><span>Edge case with</span> some long text</h1>
</div>
Автоматически переносить <span>
(на стороне сервера)
Если вы тянете заголовки неизвестной длины , т. Е.из CMS, я предлагаю вам разбить вашу строку пополам - со знанием слов! , чтобы определить слово в первой половине / с , которое необходимозавернутый в span
Пример использования PHP:
<?php
/**
* Wrap first half of a sentence into <span>, word-aware!
*/
function span_first_half($s) {
$n = floor(strlen($s)/2);
preg_match(("/.{{$n}}\\S*/"), $s, $a);
$b = substr($s, strlen($a[0]));
return "<span>$a[0]</span>$b";
}
PHP - используйте как:
<h1><?= span_first_half("Edge case with some long text") ?></h1>
<h1><?= span_first_half("This is cool!") ?></h1>
В результате:
<h1><span>Edge case with</span> some long text</h1>
<h1><span>This is</span> cool!</h1>
JavaScript - Используйте как
function span_first_half(s) {
const n = Math.floor(s.length/2),
a = s.match(RegExp(".{"+n+"}\\S*"))[0],
b = s.substr(a.length);
return `<span>${a}</span>${b}`;
}
console.log( span_first_half("Edge case with some long text") );
console.log( span_first_half("This is cool!") );
Вышеприведенные демонстрации адаптированы из этого примера JavaScript