Direção Vertical do Texto


106

Tenho tentado o texto ir na direção vertical, como fazemos nas tabelas de ms-word, mas até agora só consegui fazer ISSO ... com o que não estou feliz porque é uma caixa girada ... Não Existe uma maneira de ter um texto de direção vertical real?

Eu apenas defini a rotação para 305 graus na demonstração, o que não torna o texto vertical. 270degvai, mas eu só fiz a demonstração para mostrar a rotação.


Olá, você poderia revisar sua resposta aceita para ajustar-se a uma sintaxe não obsoleta para melhorar a qualidade. Sua pergunta é vista como uma duplicata,
G-Cyrillus

Respostas:


107

Abordagem alternativa: http://www.thecssninja.com/css/real-text-rotation-with-css

p { writing-mode: tb-rl; }

2
Consegui encontrar isto: generatedcontent.org/post/45384206019/writing-modes . Embora pareça tão hacky.
Crystal Miller

7
@CrystalMiller e BTW, w3schools pode ser um bom ajudante, mas não é a fonte / documentação original (por isso pode perder algumas coisas), o "oficial" é w3.org, ou o mais próximo, mais legível por humanos, dele é a rede de desenvolvedores do mozilla - "MDN" - developer.mozilla.org
jave.web

Funciona no Chrome, Mozilla e IE Edge, mas não no Safari para Windows.
kushalvm

8
tb-rlestá obsoleto, use em seu vertical-rllugar.
Jared Chu

3
infelizmente, se o texto vertical estiver no lado esquerdo da tela, a maioria dos textos romanos é lida de baixo para cima. E então de cima para baixo se o texto estiver no lado direito da tela. Tendo alguns valores obsoletos, terminamos com o único vertical-rl que é de cima para baixo para o lado direito da tela. Para o lado esquerdo, temos que adicionar uma transformação: rotate (180deg);
Kir Kanos

80
-webkit-transform: rotate(90deg);

As outras respostas estão corretas, mas levaram a alguns problemas de alinhamento. Ao tentar coisas diferentes, esse código CSS funcionou perfeitamente para mim.

.vertical{
    writing-mode:tb-rl;
    -webkit-transform:rotate(90deg);
    -moz-transform:rotate(90deg);
    -o-transform: rotate(90deg);
    -ms-transform:rotate(90deg);
    transform: rotate(90deg);
    white-space:nowrap;
    display:block;
    bottom:0;
    width:20px;
    height:20px;
}

9
A propriedade 'bottom' não tem valor sem a propriedade 'position'.
Crystal Miller

2
Eu precisava adicionar -ms-transform: rotate (90deg); para fazer isso funcionar no IE11
patrickbadley

1
de acordo com developer.mozilla.org/en-US/docs/Web/CSS/writing-mode , writing-mode:tb-rl;está obsoleto. Use em seu writing-mode:vertical-rllugar!
steffen

64

Eu estava procurando um texto vertical real e não o texto girado em HTML como mostrado abaixo. Então, eu poderia alcançá-lo usando o seguinte método.

insira a descrição da imagem aqui HTML: -

<p class="vericaltext">
Hi This is Vertical Text!
</p>

CSS: -

.vericaltext{
    width:1px;
    word-wrap: break-word;
    font-family: monospace; /* this is just for good looks */
}

JSFiddle! Demo.

Atualizar: - Se você precisar que os espaços em branco sejam exibidos, adicione a seguinte propriedade ao seu css.

white-space: pre;

Então, a classe css deve ser

.vericaltext{
    width:1px;
    word-wrap: break-word;
    font-family: monospace; /* this is just for good looks */
    white-space: pre;/* this is for displaying whitespaces */
}

JSFiddle! Demonstração com espaço em branco

Atualização 2 (28 de junho de 2015)

Uma vez que white-space: pre;não parece funcionar (para este uso específico) no Firefox (a partir de agora), basta alterar essa linha para

white-space: pre-wrap;

Então, a classe css deve ser

.vericaltext{
    width:1px;
    word-wrap: break-word;
    font-family: monospace; /* this is just for good looks */
    white-space:pre-wrap; /* this is for displaying whitespaces including Moz-FF.*/
}

JsFiddle Demo FF compatível.


Posso alinhar o texto verticalmente no centro?
Mohammad Saifullah de

Não entendi muito bem o que você quer dizer com alinhamento do centro, mas talvez você possa apenas alinhar o elemento do contêiner .vericaltextao centro.
Mohd Abdul Mujib de

1
Incrível. Em vez disso, deve ser marcado em verde. Esperançosamente OP irá marcá-lo como ele ainda está ativo no SO.
Rahul

: D Resposta fria
Kapil Yadav

Eu tenho alguns quentes e frescos também: p
Mohd Abdul Mujib

27

Para girar o texto 90 graus:

-webkit-transform: rotate(90deg);   
-moz-transform: rotate(90deg);
-ms-transform: rotate(90deg);
-o-transform: rotate(90deg);
transform: rotate(90deg);

Além disso, parece que a tag span não pode ser girada sem ser configurada para exibir: block.


4
<span> provavelmente precisa estar com display: block; para girar corretamente
Mladen Janjetovic,

2
Eu apliquei isso a um <div> que fica dentro de um <td>. Parece girar com sucesso em todos os navegadores. ... ... MAS, uma vez que o div gira (90 graus), o td não expande sua altura.
dsdsdsdsd

11

Para texto vertical com caracteres um abaixo do outro no Firefox, use:

text-orientation: upright;
writing-mode: vertical-rl;


5

Para exibir o texto na vertical (parte inferior superior), podemos simplesmente usar:

writing-mode: vertical-lr; 

transform: rotate(180deg);

#myDiv{
text-align: center;
}

#mySpan{
writing-mode: vertical-lr; 
transform: rotate(180deg);
}
<div id="myDiv"> 

<span id="mySpan"> Here We gooooo !!! </span>

</div>

Observe que podemos adicionar isso para garantir a compatibilidade do navegador:

-webkit-transform: rotate(180deg);   
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);

também podemos ler mais sobre writing-modepropriedades aqui na documentação do Mozilla.


4

#myDiv{
text-align: center;
}

#mySpan{
writing-mode: vertical-lr; 
transform: rotate(180deg);
}
<div id="myDiv"> 

<span id="mySpan"> Here We gooooo !!! </span>

</div>

insira a descrição da imagem aqui


Olá, obrigado por tentar responder a esta pergunta, você pode explicar brevemente como sua solução aborda o problema do OP?
James Wong - Reintegrar Monica

3

Sou novo nisso, me ajudou muito. Basta alterar a largura, altura, parte superior e esquerda para caber:

.vertical-text {
display: block;
position:absolute;
width: 0px;
height: 0px;
top: 0px;
left: 0px;
transform: rotate(90deg);
}

Você também pode ir aqui e ver outra maneira de fazer isso. O autor faz assim:

.vertical-text {
transform: rotate(90deg);
transform-origin: left top 0;
float: left;
}

transform-origin é o que eu precisava!
xtian,

flutuar para a esquerda é o que eu precisava!
Chris

2

rotação, como você fez, é o caminho a percorrer - mas observe que nem todos os navegadores suportam isso. se você não quiser uma solução para vários navegadores, terá que gerar imagens para isso.


2

Pode usar a propriedade CSS3 Transform

.txtdiv{
  transform:rotate(7deg);
  -ms-transform:rotate(7deg); /* IE 9 */
  -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.93969262, M12=0.34202014, M21=-0.34202014, M22=0.93969262,sizingMethod='auto expand')"; /* IE6-8 */
  -webkit-transform:rotate(7deg); /* Opera, Chrome, and Safari */
}


2

Eu consegui ter uma solução que funcionasse com isso:

(Eu tenho um título dentro de uma div de classe middleItem)

.middleItem > .title{
    width: 5px;
    height: auto;
    word-break:break-all;
    font-size: 150%;
}

2

Aqui está um exemplo de algum código SVG que usei para colocar três linhas de texto vertical em um título de coluna de tabela. Outros ângulos são possíveis com um pouco de ajuste. Acredito que a maioria dos navegadores suporta SVG atualmente.

<svg height="150" width="40">
  <text font-weight="bold" x="-150" y="10" transform="rotate(-90 0 0)">Jane Doe</text>
  <text x="-150" y="25" transform="rotate(-90 0 0)">0/0&nbsp;&nbsp;&nbsp;&nbsp;0/0</text>
  <text x="-150" y="40" transform="rotate(-90 0 0)">2015-06-06</text>
  Sorry, your browser does not support inline SVG.
</svg>

2

Você pode conseguir o mesmo com as propriedades CSS abaixo:

writing-mode: vertical-rl;
text-orientation: upright;


1
.vertical-text {
    transform: rotate(90deg);
    transform-origin: left top 0;
    float: left;
}

1
<!DOCTYPE html>
<html>
    <style>
        h2 {
           margin: 0 0 0 0;
           transform: rotate(270deg);
           transform-origin: top left;
           color: #852c98;
           position: absolute;
           top: 200px;
        }
    </style>
    <body>
        <h2>It’s all in the curd</h2>
    </body>
</html>

você pode alterar transformar: girar (270deg); para transformar: girar (90deg); de acordo com os requisitos
sachin burnawal

1

Se você quiser um alinhamento como

S
T
A
R
T

Em seguida, siga https://www.w3.org/International/articles/vertical-text/#upright-latin

Exemplo:

div.vertical-sentence{
  -ms-writing-mode: tb-rl; /* for IE */
  -webkit-writing-mode: vertical-rl; /* for Webkit */
  writing-mode: vertical-rl;
  
}
.rotate-characters-back-to-horizontal{ 
  -webkit-text-orientation: upright;  /* for Webkit */
  text-orientation: upright; 
}
<div class="vertical-sentence">
  <p><span class="rotate-characters-back-to-horizontal" lang="en">Whatever</span></p>
  <p><span class="rotate-characters-back-to-horizontal" lang="fr">Latin</span></p>
  <p><span class="rotate-characters-back-to-horizontal" lang="hi">वर्डप्रेस </span></p>
</div>

Observe que o híndi tem um sotaque no meu exemplo e isso será processado como um único caractere. Esse é o único problema que enfrentei com esta solução.


1

De developer.mozilla.org

A propriedade CSS text-oriented define a orientação dos caracteres de texto em uma linha. Afeta apenas o texto no modo vertical (quando o modo de escrita não é horizontal-tb). É útil para controlar a exibição de idiomas que usam script vertical e também para fazer cabeçalhos de tabelas verticais.

writing-mode: vertical-rl;
text-orientation: mixed;

Você também pode revisar toda a sintaxe aqui

/* Keyword values */
text-orientation: mixed;
text-orientation: upright;
text-orientation: sideways-right;
text-orientation: sideways;
text-orientation: use-glyph-orientation;

/* Global values */
text-orientation: inherit;
text-orientation: initial;
text-orientation: unset;

0

Você pode usar quebra de linha: quebra de palavra para obter texto vertical, use o seguinte trecho

HTML:

<div class='verticalText mydiv'>Here is your text</div>

css:

.verticalText {
word-wrap: break-word;
  font-size: 18px;
}
.mydiv {
  height: 300px;
  width: 10px;
}

0

<style>
    #text_orientation{
        writing-mode:tb-rl;
        transform: rotate(90deg);
        white-space:nowrap;
        display:block;
        bottom:0;
        width:20px;
        height:20px;
    }
</style>
</head>
<body>

<p id="text_orientation">Welcome</p>
</body>


0
h1{word-break:break-all;display:block;width:40px;} 

OLÁ

NOTA: Navegador compatível - navegador IE (8,9,10,11) - navegador Firefox (38,39,40,41,42,43,44) - navegador Chrome (44,45,46,47,48) - Safari navegador (8,9) - navegador Opera (não compatível) - navegador Android (44)


0

Tente usar um arquivo SVG, ele parece ter melhor compatibilidade com o navegador e não prejudica seus designs responsivos.

Tentei a transformação CSS e tive muitos problemas com a origem da transformação; e acabou indo com um arquivo SVG. Demorou cerca de 10 minutos e pude controlar um pouco com CSS também.

Você pode usar o Inkscape para fazer o SVG se não tiver o Adobe Illustrator.



0

Você pode tentar assim

-webkit-transform: rotate(270deg);   
-moz-transform: rotate(270deg);
-ms-transform: rotate(270deg);
-o-transform: rotate(270deg);
transform: rotate(270deg);

0

Esta é uma solução um pouco hacky, mas para vários navegadores que não requer CSS

<div>
  <div>h</div>
  <div>e</div>
  <div>l</div>
  <div>l</div>
  <div>o</div>
<div>

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.