CSS çapraz tarayıcı ile nasıl dikey metin çizebilirim?


243

Çapraz tarayıcı (> = IE6,> = Firefox 2, Chrome, Safari veya Opera'nın herhangi bir sürümü) desteği ile tek bir metin kelimesini 90 derece döndürmek istiyorum. Bu nasıl yapılabilir?


4
Çapraz uyumluluk ile kullanabileceğiniz hiçbir saf CSS yoktur. Elimde olan her şey var. Bir görüntü ile daha iyisin.
Robert K

1
Dikey metin çapraz tarama çok zor değil. Dns4.nl'de operada bile çalışan bir çözüm var. Mozilla ve safari (ayrıca taç) gibi tüm sürümlerle test ettim. bağlantı: dns4.nl/pagina/html_code/vertikale_tekst.html . xkcd150 için yorum :> Sorun, bu tuval elemanına dayanıyor. - xkcd150 20 Eylül, 10:13 Hayır, prosedür tuval öğesine dayanmıyor.

IE'de bile her türlü metin dönüşümünün nasıl yapılacağını açıklayan bir öğretici (sorunun çözümü dahil) :) useragentman.com/blog/2010/03/09/… Umarım yardımcı olur!
Juanma Guerrero


Bu sayfadaki talimatları uygulayarak başarıyla dönebilirim, ancak sayfayı yazdıramadım. Metin geriye doğru yazdırılır. Bu web sitesi benim için çok yararlı oldu: sevenwires.com/play/UpsideDownLetters.html
Nahuel

Yanıtlar:


213

Bu yanıtı en son bilgilerle güncelledi ( CSS Tricks'ten ). Filtre uygulamasına dikkat çektiği için Matt ve Douglas'a şeref.

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

  /* also accepts left, right, top, bottom coordinates; not required, but a good idea for styling */
  -webkit-transform-origin: 50% 50%;
  -moz-transform-origin: 50% 50%;
  -ms-transform-origin: 50% 50%;
  -o-transform-origin: 50% 50%;
  transform-origin: 50% 50%;

  /* Should be unset in IE9+ I think. */
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
}

Eski cevap:

FF 3.5 veya Safari / Webkit 3.1 için şunlara bakın : -moz-transform (ve -webkit-transform). IE bir Matrix filtresi (v5.5 +) var, ama nasıl kullanılacağından emin değilim. Opera henüz bir dönüşüm yetenekine sahip değil.

.rot-neg-90 {
  /* rotate -90 deg, not sure if a negative number is supported so I used 270 */
  -moz-transform: rotate(270deg);
  -moz-transform-origin: 50% 50%;
  -webkit-transform: rotate(270deg);
  -webkit-transform-origin: 50% 50%;
  /* IE support too convoluted for the time I've got on my hands... */
}

Hayalet ayı simgesi için +1;) Bu işi yaparken çok fazla sorun yaşadım, DOM yapımı değiştirmek ve olumsuz bir marjla şekerleme yapmak zorunda kaldım. Kullanımı daha kolay olan ancak sayfa yazdırıldığında doğru görünmeyen bir IE sürümü: write-mode: tb-rl; filtre: flipv uçucu;
RMorrisey

12
Microsoft "filtre: progid: DXImageTransform.Microsoft.BasicImage (döndürme = 3);"
Matt

1
Ne yazık ki, IE9 (standartlar modunda!) Uygular hem -ms dönüştüren * stilleri, ve filtreyi. Uyumluluk görünümünde, yalnızca filtreyi uygular.
Romløk

3
Metninizin bir blok öğesi olduğundan emin olun, örneğin display: inline-block or similar
James Westgate

2
IE8 ve IE9 iyiliği için bazı filtreler. Birincisi IE8, ikincisi IE8 standart modudur ve # 3, IE9 + için filtreyi kaldırır. Arrrgh, CSS saldırılarımı filtrelemeyi durdurmak için stackoverflow yorumları alamıyorum, bu yüzden jsfiddle.net/GrPyj/9
Justin Grant

73

Bir sayfada dikey metin yazmak için aşağıdaki kodu kullanıyorum. Firefox 3.5+, webkit, opera 10.5+ ve IE

.rot-neg-90 {
    -moz-transform:rotate(-270deg); 
    -moz-transform-origin: bottom left;
    -webkit-transform: rotate(-270deg);
    -webkit-transform-origin: bottom left;
    -o-transform: rotate(-270deg);
    -o-transform-origin:  bottom left;
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
}

Chrome 5 üzerinde çalışır. IE 8 "quirks" modunda çalışmaz; yapar "IE8 Standartlar modu" üzerinde çalışmaya.
Asaf Bartov

Bilmeme izin verdiğin için teşekkürler. İlginç modda IE'de dikey Metin almanın bir yolunu bulursanız, lütfen buraya gönderin.
Choesang

15

Başka bir çözüm kullanmaktır SVG metin düğümü olan en tarayıcılar tarafından desteklenmektedir .

<svg width="50" height="300">
    <text x="28" y="150" transform="rotate(-90, 28, 150)" style="text-anchor:middle; font-size:14px">This text is vertical</text>
</svg>

Demo: https://jsfiddle.net/bkymb5kr/

SVG metni hakkında daha fazla bilgi: http://tutorials.jenkov.com/svg/text-element.html


büyük çözüm, öncekilerden çok daha iyi - döndürdükten sonra metin konumlandırmada sorun yok
Picard

9

CSS Yazma Modları modülü dikey metin ile ortogonal akışlarını tanıtır.

Sadece writing-modeistenen değere sahip özelliği kullanın .

span { margin: 20px; }
#vertical-lr { writing-mode: vertical-lr; }
#vertical-rl { writing-mode: vertical-rl; }
#sideways-lr { writing-mode: sideways-lr; }
#sideways-rl { writing-mode: sideways-rl; }
<span id="vertical-lr">
  ↑ (1) vertical-lr 至<br />
  ↑ (2) vertical-lr 至<br />
  ↑ (3) vertical-lr 至
</span>
<span id="vertical-rl">
  ↓ (1) vertical-rl 至<br />
  ↓ (2) vertical-rl 至<br />
  ↓ (3) vertical-rl 至
</span>
<span id="sideways-lr">
  ↓ (1) sideways-lr 至<br />
  ↓ (2) sideways-lr 至<br />
  ↓ (3) sideways-lr 至
</span>
<span id="sideways-rl">
  ↓ (1) sideways-rl 至<br />
  ↓ (2) sideways-rl 至<br />
  ↓ (3) sideways-rl 至
</span>


2
sideways-rl şimdilik geniş bir şekilde desteklenmiyor, dikey-rl ve 180 derece dönmesini tavsiye ederim
godblessstrawberry 30:17

6

Bunu http://snook.ca/archives/html_and_css/css-text-rotation adresinden uyarladım :

<Style>
    .Rotate-90
    {
        Ekran bloğu;
        pozisyon: mutlak;
        sağ: -5px;
        üst: 15 piksel;
        -webkit-dönüşümü: döndürme (-90 derece);
        -moz-dönüşümü: döndürme (-90 derece);
    }
</ Style>
<! - [IE ise]>
    <Style>
        .Rotate-90 {
            filtre: progid: DXImageTransform.Microsoft.BasicImage (döndürme = 3);
            Sağ: -15px; En: 5px;
        }
    </ Style>
    <[Endif] ->

5

Saf CSS ile yapmaya çalışırken sorun yaşadım - yazı tipine bağlı olarak biraz çöp görünebilir. Alternatif olarak bunu yapmak için SVG / VML kullanabilirsiniz. Raphael ve ExtJS gibi tarayıcıyı kolaylıkla çaprazlaştırmaya yardımcı olan kütüphaneler var . ExtJS4'te kod şöyle görünür:

    var drawComp = Ext.create('Ext.draw.Component', {
        renderTo: Ext.getBody(), //or whatever..
        height: 100, width: 100 //ditto..
    });
    var text = Ext.create('Ext.draw.Component', {
        type: "text",
        text: "The text to draw",
        rotate: {
            x: 0, y: 0, degrees: 270
        },
        x: -50, y: 10 //or whatever to fit (you could calculate these)..
    });
    text.show(true);

Bu IE6 + ve tüm modern tarayıcılarda çalışacaktır, ancak maalesef en azından FF3.0'a ihtiyacınız olduğunu düşünüyorum.


1
IE6 + ve tüm modern tarayıcılar arasındaki farklılığı sevmek
IE'nin

1
@ClarkeyBoy Sadece IE10 diğer tarayıcılar ile neredeyse hız olduğunu söyleyebilirim, ve sadece zorla gpu render ve ızgara düzeni nedeniyle. Gerçekten modern bir tarayıcı IE çalıştıramazsınız, çünkü her tarayıcıdan x3-x10 kat daha yavaş güncellenir.
skmasq

En iyi seçenek, bir SVG dosyası veya bu JS kullanmaktır, çünkü CSS dönüşüm özelliğini kullanmanın duyarlı bir şekilde tasarlanmış sayfalarınızla uyumlu olmayabilir.
b01

5

Bootstrap 3 kullanıyorsanız, karışımlarından birini kullanabilirsiniz:

.rotate(degrees);

Misal:

.rotate(-90deg);

1
Yine de çalışıyor, ancak şunu fark edin: Autoprefixer'ın Gruntfile'ımıza girmesi nedeniyle tüm satıcı karışımları v3.2.0 itibarıyla kaldırılmıştır. V4'te kaldırılacaklar.
yishaiz

4

Chrome, Firefox, IE9, IE10'da çalışacak olan çözümüm (Dereceleri gereksiniminize göre değiştirin):

.rotate-text {
  -webkit-transform: rotate(270deg);
  -moz-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  -o-transform: rotate(270deg);
  transform: rotate(270deg);
  filter: none; /*Mandatory for IE9 to show the vertical text correctly*/      
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.