Dirección de texto vertical

106

He estado intentando que el texto vaya en una dirección vertical como podemos hacer en las tablas de ms-word, pero hasta ahora solo he podido hacer ESTO ... con lo que no estoy contento porque es un cuadro girado ... Isn ' ¿Hay alguna manera de tener texto en dirección vertical real?

Solo configuré la rotación en 305 grados en la demostración, lo que no hace que el texto sea vertical. 270deglo haré, pero solo hice la demostración para mostrar la rotación.

Luna
fuente
Hola, ¿podría revisar su respuesta aceptada para que se ajuste a una sintaxis no obsoleta para mejorar la calidad? Su pregunta se ve como un duplicado,
G-Cyrillus

Respuestas:

107

Enfoque alternativo: http://www.thecssninja.com/css/real-text-rotation-with-css

p { writing-mode: tb-rl; }
cisne
fuente
2
Pude encontrar esto: generatecontent.org/post/45384206019/writing-modes . Aunque se siente tan hacky.
Crystal Miller
7
@CrystalMiller y BTW, w3schools puede ser un buen ayudante, pero no es la fuente / documentación original (por lo que puede pasar por alto algunas cosas), el "oficial" es w3.org, o lo más cercano, más legible por humanos, a él. es la red de desarrolladores de mozilla - "MDN" - developer.mozilla.org
jave.web
Funciona en Chrome, Mozilla e IE Edge, pero no en Safari para Windows.
kushalvm
8
tb-rlestá obsoleto, utilícelo vertical-rlen su lugar.
Jared Chu
3
lamentablemente, si el texto vertical está en el lado izquierdo de la pantalla, la mayoría de los textos romanos se leen de abajo hacia arriba. Y luego de arriba a abajo si el texto está en el lado derecho de la pantalla. Teniendo algunos valores obsoletos, terminamos con el único vertical-rl que está de arriba a abajo para el lado derecho de la pantalla. Para el lado izquierdo, tenemos que agregar una transformación: rotate (180deg);
Kir Kanos
80
-webkit-transform: rotate(90deg);

Las otras respuestas son correctas pero provocaron algunos problemas de alineación. Al probar diferentes cosas, este código CSS funcionó perfectamente para mí.

.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;
}
Amit
fuente
9
La propiedad 'bottom' no tiene valor sin una propiedad de 'position'.
Crystal Miller
2
Necesitaba agregar -ms-transform: rotate (90deg); para que esto funcione en IE11
patrickbadley
1
de acuerdo con developer.mozilla.org/en-US/docs/Web/CSS/writing-mode , writing-mode:tb-rl;está en desuso. ¡Úselo en su writing-mode:vertical-rllugar!
steffen
64

Estaba buscando un texto vertical real y no el texto girado en HTML como se muestra a continuación. Entonces podría lograrlo usando el siguiente método.

ingrese la descripción de la imagen aquí 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! Manifestación.

Actualizar: - Si necesita que se muestren los espacios en blanco , agregue la siguiente propiedad a su css.

white-space: pre;

Entonces, la clase css 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! Demostración con espacio en blanco

Actualización 2 (28-JUN-2015)

Dado que white-space: pre;no parece funcionar (para este uso específico) en Firefox (a partir de ahora), simplemente cambie esa línea a

white-space: pre-wrap;

Entonces, la clase css 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.*/
}

Compatible con JsFiddle Demo FF.

Mohd Abdul Mujib
fuente
¿Puedo alinear el texto verticalmente en el centro?
Mohammad Saifullah
No entendí muy bien lo que quieres decir con alinear el centro, pero tal vez puedas alinear el elemento contenedor .vericaltextcon el centro.
Mohd Abdul Mujib
1
Increíble. Esto debería estar marcado en verde en su lugar. Con suerte, OP lo marcará ya que todavía está activo en SO.
Rahul
: D Respuesta fría vieja
Kapil Yadav
También tengo algunos calientes y frescos: p
Mohd Abdul Mujib
27

Para rotar el texto 90 grados:

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

Además, parece que la etiqueta de intervalo no se puede rotar sin configurarla para mostrar: bloque.

Marrón
fuente
4
<span> probablemente deba estar con display: block; rotar correctamente
Mladen Janjetovic
2
Apliqué esto a un <div> que se encuentra dentro de un <td>. Parece rotar con éxito en todos los navegadores. ... ... PERO, una vez que el div gira (90 grados), el td no expande su altura.
dsdsdsdsd
11

Para texto vertical con caracteres uno debajo del otro en firefox, use:

text-orientation: upright;
writing-mode: vertical-rl;
Iggy
fuente
7

Intente usar:

writing-mode: lr-tb;
Mladen Janjetovic
fuente
5

Para mostrar texto en vertical (inferior-superior), simplemente podemos 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>

Tenga en cuenta que podemos agregar esto para garantizar la compatibilidad del navegador:

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

también podemos leer más sobre la writing-modepropiedad aquí en los documentos de Mozilla.

Abdallah Okasha
fuente
4

#myDiv{
text-align: center;
}

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

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

</div>

ingrese la descripción de la imagen aquí

vishal singh
fuente
Hola, gracias por intentar responder a esta pregunta, ¿puede explicar brevemente cómo su solución aborda el problema de OP?
James Wong - Reincorpora a Monica el
3

Soy nuevo en esto, me ayudó mucho. Simplemente cambie el ancho, la altura, la parte superior e izquierda para que se ajuste:

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

También puede ir aquí y ver otra forma de hacerlo. El autor lo hace así:

.vertical-text {
transform: rotate(90deg);
transform-origin: left top 0;
float: left;
}
MELLA
fuente
transform-origin es lo que necesitaba!
xtian
flotar a la izquierda es lo que necesitaba!
chris
2

la rotación, como lo hizo, es el camino a seguir, pero tenga en cuenta que no todos los navegadores lo admiten. Si no desea obtener una solución para varios navegadores, tendrá que generar imágenes para eso.

oezi
fuente
2

Puede usar la propiedad de transformación CSS3

.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 */
}
Sadee
fuente
2

Me las arreglé para tener una solución funcional con esto:

(Tengo un título dentro de un div de clase middleItem)

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

Aquí hay un ejemplo de un código SVG que usé para colocar tres líneas de texto vertical en un encabezado de columna de tabla. Otros ángulos son posibles con algunos ajustes. Creo que la mayoría de los navegadores admiten SVG en estos días.

<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>
Neil Bauers
fuente
2

Puede lograr lo mismo con las siguientes propiedades CSS:

writing-mode: vertical-rl;
text-orientation: upright;
Rajitha Alluri
fuente
1
.vertical-text {
    transform: rotate(90deg);
    transform-origin: left top 0;
    float: left;
}
JIYAUL MUSTAPHA
fuente
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>
Sachin Burnawal
fuente
puede cambiar transform: rotate (270deg); transformar: rotar (90 grados); según los requisitos
sachin burnawal
1

Si quieres una alineación como

S
T
A
R
T

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

Ejemplo:

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>

Tenga en cuenta que el hindi tiene un acento en mi ejemplo y que se representará como un solo carácter. Ese es el único problema al que me enfrenté con esta solución.

Beda Schmid
fuente
1

De developer.mozilla.org

La propiedad CSS de orientación de texto establece la orientación de los caracteres de texto en una línea. Solo afecta al texto en modo vertical (cuando el modo de escritura no es horizontal-tb). Es útil para controlar la visualización de lenguajes que usan escritura vertical y también para hacer encabezados de tablas verticales.

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

También puede revisar toda la sintaxis aquí

/* 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;
Yousef Altaf
fuente
0

Puede usar el ajuste de palabras: romper-palabra para obtener texto vertical, use el siguiente fragmento

HTML:

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

css:

.verticalText {
word-wrap: break-word;
  font-size: 18px;
}
.mydiv {
  height: 300px;
  width: 10px;
}
Hari Prasandh
fuente
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>

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

HOLA

NOTA: Navegador compatible - 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 (no compatible) - navegador Android (44)

Salehin
fuente
0

Intente usar un archivo SVG, parece tener una mejor compatibilidad con el navegador y no romperá sus diseños receptivos.

Probé la transformación CSS y tuve muchos problemas con el origen de la transformación; y terminó yendo con un archivo SVG. Me tomó como 10 minutos y también pude controlarlo un poco con CSS.

Puede usar Inkscape para hacer el SVG si no tiene Adobe Illustrator.

b01
fuente
0

Puedes probar así

-webkit-transform: rotate(270deg);   
-moz-transform: rotate(270deg);
-ms-transform: rotate(270deg);
-o-transform: rotate(270deg);
transform: rotate(270deg);
Bablu Ahmed
fuente
0

Esta es una solución un poco intrincada pero entre navegadores que no requiere CSS

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

Luke Preston
fuente