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.