CSSクロスブラウザーで垂直方向のテキストを描画するにはどうすればよいですか?


243

クロスブラウザ(> = IE6、> = Firefox 2、Chrome、Safari、またはOperaのすべてのバージョン)をサポートして、テキストの1単語を90度回転させたい。これはどのように行うことができますか?


4
相互互換性で使用できる純粋なCSSはありません。私が持っているのはそこにあるすべてです。画像のほうがいいです。
ロバートK

1
垂直方向のテキストクロスブラウザはそれほど難しくありません。dns4.nlには、オペラでも機能するソリューションがあります。私はすべてのバージョン、すなわちmozillaとsafari(クラウンも)でテストしました。リンクはdns4.nl/pagina/html_code/vertikale_tekst.htmlです。xkcd150のコメント:>問題は、それがcanvas要素に依存していることです。– xkcd150 Sep 20 at 10:13いいえ、手順はcanvas要素に依存していません。

ここでは(あなたの問題への解決策を含む)も、IEでテキスト変換のすべての種類を行う方法を説明チュートリアルです:) useragentman.com/blog/2010/03/09/...希望、それが役立ちます!
Juanma Guerrero、2010

これが私が使ったテクニックの内訳です:scottgale.com/blog/css-vertical-text/2010/03/01

このページの指示に従って回転できましたが、ページを印刷できませんでした。テキストは逆方向に印刷されます。このウェブサイトは私にとって非常に役に立ちました:sevenwires.com/play/UpsideDownLetters.html
Nahuel

回答:


213

この回答を最近の情報で更新しました(CSS Tricksから)。フィルターの実装を指摘してくれたMattとDouglasへの称賛。

.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);
}

古い答え:

FF 3.5またはSafari / Webkit 3.1の場合は、-moz-transform(および-webkit-transform)を確認してください。IEにはマトリックスフィルター(v5.5以降)がありますが、使用方法はわかりません。Operaにはまだ変換機能がありません。

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

ゴーストベアのアイコンの+1;)この作業を行うのにかなりの苦労があり、DOM構造を変更し、マイナスのマージンで回避しなければならなくなりました。使用は簡単ですが、ページが印刷されたときに正しく見えないIEバージョン:writing-mode:tb-rl; フィルター:flipv fliph;
RMorrisey 2010年

12
Microsoft "filter:progid:DXImageTransform.Microsoft.BasicImage(rotation = 3);"
Matt

1
残念ながら、IE9(標準モードで!)は、-ms-transform- *スタイルフィルターの両方を適用します。互換表示では、フィルターのみが適用されます。
ロムローク2013年

3
確認してくださいテキストブロック要素、すなわち使用の表示がある:インラインブロックまたは類似
ジェームズウエストゲート

2
IE8とIE9の良さのためのいくつかのフィルターがあります。1つ目はIE8、2つ目はIE8標準モード、#3はIE9 +のフィルターを削除します。Arrrgh、私は、stackoverflowのコメントは私のCSSハックをフィルタリング停止するために取得することはできませんを見てそうjsfiddle.net/GrPyj/9
ジャスティン・グラント

73

次のコードを使用して、ページに縦書きのテキストを書き込みます。Firefox 3.5以降、webkit、opera 10.5以降、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で動作します。IE8の「奇妙な」モードでは動作しません。「IE8標準モード」では機能しません
Asaf Bartov

知らせてくれてありがとうございます。QuirksモードでIEに縦書きのテキストを表示する方法を見つけた場合は、ここに投稿してください。
Choesang

15

別の解決策を使用することですSVGのテキストノードれるほとんどのブラウザでサポートされているが

<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>

デモ: https : //jsfiddle.net/bkymb5kr/

SVGテキストの詳細: http : //tutorials.jenkov.com/svg/text-element.html


以前のソリューションよりもはるかに優れた優れたソリューション-回転後のテキストの配置に問題なし
Picard

9

CSSライティングモードのモジュールは、縦書きテキストと直交する流れを紹介します。

writing-mode必要な値を持つプロパティを使用するだけです。

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>



6

私はこれをhttp://snook.ca/archives/html_and_css/css-text-rotationから適合させました:

<スタイル>
    .rotate-90
    {
        表示ブロック;
        位置:絶対;
        右:-5px;
        top:15px;
        -webkit-transform:rotate(-90deg);
        -moz-transform:rotate(-90deg);
    }
</ style>
<!-[IEの場合]>
    <スタイル>
        .Rotate-90 {
            フィルター:progid:DXImageTransform.Microsoft.BasicImage(rotation = 3);
            右:-15px; top:5px;
        }
    </ style>
    <![endif]->

5

純粋なCSSでそれを実行しようとすると問題が発生しました-フォントによっては、少しゴミに見える場合があります。別の方法として、SVG / VMLを使用してそれを行うことができます。RaphaelExtJSなど、ブラウザを簡単にクロスできるライブラリがあります。ExtJS4では、コードは次のようになります。

    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);

これはIE6 +とすべての最新ブラウザーで機能しますが、残念ながら、少なくともFF3.0が必要です。


1
IE6 +とすべての最新ブラウザーの違いを愛する-それは、IEのどのバージョンも最新ではないと言っているかのように
読み取れます

1
@ClarkeyBoy IE10だけが他のブラウザとほぼ同じ速度で動作していると私は言うでしょう。これは、GPUレンダリングとグリッドレイアウトを強制したためです。最新のブラウザは、他のすべてのブラウザよりもx3〜x10倍遅く更新されるため、IEを実際に調整することはできません。
skmasq 2013

CSS変換プロパティの使用は、レスポンシブデザインされたページと互換性がない場合があるため、SVGファイルまたはこのJSを使用することをお勧めします。
b01

5

Bootstrap 3を使用する場合は、ミックスインの1つを使用できます。

.rotate(degrees);

例:

.rotate(-90deg);

1
それでも動作しますが、ことを予告:すべてのベンダーのミックスインが原因私たちのGruntfileでAutoprefixerの導入にV3.2.0のよう推奨されていません。これらはv4で削除されます。
yishaiz

4

Chrome、Firefox、IE9、IE10で動作する私のソリューション(要件に応じて度を変更):

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.