Проблема 1: дополнительное пространство сверху
Элемент с липким позиционированием остается в потоке DOM - так же, как и элемент с позиционированием relative
.Итак, отсюда пространство, которое занимает элемент h1.section__title
.
Проблема 2: липкий элемент выходит наружу в конце раздела
Это потому, чтоисходная высота элемента h1
все еще считается там, даже после поворота.
Итак, вам нужно определить точную ширину липкого заголовка (который затем становится высотой этого элемента после поворота)сначала, а затем установите это значение ширины для высоты повернутого элемента следующим образом:
$section-sticky-header-height: 145px;
.section__title {
display: inline-block;
margin-bottom: 0;
transform-origin: 0% 0%;
position: sticky;
top: 0;
left: 50px;
/* solves problem 1 */
float: left;
/* solves problem 2 */
transform: rotate(-90deg) translatex(-$section-sticky-header-height);
height: $section-sticky-header-height;
}
Codepen: https://codepen.io/anon/pen/arybWZ
Редактировать:
Проблема в том, что я не могу определить точную ширину липкого заголовка, потому что текст h1 является переменным (клиент вставит этот текст через CMS).Есть ли способ справиться с этим?Если возможно без Javascript
Понял.Вместо этого вы можете попробовать это, если высота переменная:
<h1 class="h1 mb-0 section__title">
<div class="rotation-outer">
<div class="rotation-inner">
<div class="rotation">
STICKY
</div>
</div>
</div>
</h1>
.section__title {
border: 1px solid; // for demo purpose
position: sticky;
top: 0;
float: left;
.rotation-outer {
display: table;
position: relative;
left: 50px;
.rotation-inner {
padding: 50% 0;
height: 0;
.rotation {
transform-origin: 0 0;
transform: rotate(-90deg) translate(-100%);
margin-top: -50%;
white-space: nowrap;
}
}
}
}
См. В действии: https://codepen.io/anon/pen/BedREm
Здесь очень хорошее объяснение того, как это работает: Повернутые элементы в CSS, которые корректно влияют на высоту их родителей
Редактировать 2:
По этой ссылке я также обнаружил свойство writing-mode: vertical-rl;
(в этом ответеstackoverflow.com/a/50406895/1252920).Как вы думаете, может быть лучшим решением?Я применил его в этом Codepen: codepen.io/anon/pen/JqyJWK?editors=1100 Что вы думаете?
Да, еще одна приятная альтернатива, которую вы можете использовать.:)
Здесь я немного изменил / оптимизировал: https://codepen.io/anon/pen/qGXPPe?editors=1100
Однако, пожалуйста, обратите внимание, что vertical-lr
или vertical-rl
широко не поддерживается.Видимо только на настольных версиях Chrome / Firefox / Opera. Смотрите здесь .Так что решать вам, какой из них использовать.Лично я бы не стал использовать writing-mode
из-за отсутствия поддержки браузера.