Причина в том, что вы дважды используете свойство transform. Из-за правил CSS с каскадом последнее объявление выигрывает, если они имеют одинаковую специфичность. Поскольку оба объявления преобразования находятся в одном наборе правил, это так.
Что он делает, так это:
- повернуть текст на 90 градусов. ОК.
- переводим 50% на 50%. Хорошо, это то же свойство, что и на первом шаге, поэтому выполните этот шаг и пропустите шаг 1.
См. Http://jsfiddle.net/Lx76Y/ и откройте его в отладчике, чтобы увидеть перезапись первого объявления
Поскольку перевод перезаписывает поворот, вам нужно вместо этого объединить их в одном объявлении: http://jsfiddle.net/Lx76Y/1/
Для этого вы используете список преобразований, разделенных пробелами:
#rotatedtext {
transform-origin: left;
transform: translate(50%, 50%) rotate(90deg) ;
}
Помните, что они указаны в цепочке, поэтому сначала применяется перевод, а затем поворот.
Я не могу комментировать, так что поехали. Об ответе @David Storey.
Будьте осторожны с «порядком выполнения» в цепочках CSS3! Порядок справа налево, а не слева направо.
transformation: translate(0,10%) rotate(25deg);
rotate
Операция выполняется первым, тоtranslate
.См .: Порядок преобразования CSS3 имеет значение: сначала крайняя правая операция
источник
В этом нет необходимости, так как вы можете использовать css 'writing-mode' со значениями 'vertical-lr' или 'vertical-rl' по желанию.
.item { writing-mode: vertical-rl; }
источник
Что-то, что может быть упущено: в моем проекте цепочки оказывается, что для списка, разделенного пробелом, также нужна точка с запятой, разделенная пробелом в конце.
Другими словами, это не работает:
transform: translate(50%, 50%) rotate(90deg);
но это делает:
transform: translate(50%, 50%) rotate(90deg) ; //has a space before ";"
источник