Girar e traduzir


86

Estou tendo problemas para girar e posicionar uma linha de texto. Agora é apenas a posição que funciona. A rotação também funciona, mas apenas se eu desativar o posicionamento.

CSS:

#rotatedtext {
    transform-origin: left;
    transform: rotate(90deg);
    transform: translate(50%, 50%);
}

O html é apenas um texto simples.

Respostas:


157

A razão é porque você está usando a propriedade transform duas vezes. Devido às regras de CSS com cascata, a última declaração ganha se elas tiverem a mesma especificidade. Como ambas as declarações de transformação estão no mesmo conjunto de regras, esse é o caso.

O que está fazendo é o seguinte:

  1. gire o texto 90 graus. Está bem.
  2. traduzir 50% por 50%. Ok, esta é a mesma propriedade da etapa um, então execute esta etapa e ignore a etapa 1.

Veja http://jsfiddle.net/Lx76Y/ e abra-o no depurador para ver a primeira declaração sobrescrita

Como a tradução está substituindo a rotação, você deve combiná-los na mesma declaração: http://jsfiddle.net/Lx76Y/1/

Para fazer isso, você usa uma lista de transformações separadas por espaço:

#rotatedtext {
    transform-origin: left;
    transform: translate(50%, 50%) rotate(90deg) ;
}

Lembre-se de que eles são especificados em uma cadeia, portanto, a translação é aplicada primeiro e, em seguida, a rotação.


23
Descobri que o encadeamento é muito importante para se ter em mente. Compare uma tradução seguida por uma rotação - jsfiddle.net/Mrjm8/3 - a uma rotação seguida por uma tradução - jsfiddle.net/Mrjm8/2
Lucas

Como isso funciona quando escrito em HTML, em vez de CSS?
JakeTheSnake

2
@JakeTheSnake Não. As transformações CSS são um recurso CSS.
Stijn de Witt

2
Uau, obrigada. Você deve colocar em negrito o aspecto do encadeamento :) que foi um elemento chave que muitos blogs e especificações nunca mencionam!
cgatian

@Luke Obrigado por apontar isso, a ordem realmente importa!
Yami Odymel


4

Não há necessidade disso, pois você pode usar css 'writing-mode' com os valores 'vertical-lr' ou 'vertical-rl' conforme desejado.

.item {
  writing-mode: vertical-rl;
}

CSS: modo de escrita


2

Algo que pode ser esquecido: no meu projeto de encadeamento, parece que uma lista separada por espaço também precisa de um ponto e vírgula separado por espaço no final.

Em outras palavras, isso não funciona:

transform: translate(50%, 50%) rotate(90deg);

mas isso faz:

transform: translate(50%, 50%) rotate(90deg) ; //has a space before ";"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.