2013-02-28 22 views
52

でテキストを回転させます。 div.innerを90度回転させます。私はテキストを "Centered?"コンテナdivの中央に表示されます。私はdivのサイズを事前に知っていません。垂直センターは、私は、次のHTMLを持っているCSS

これは閉じる:http://jsfiddle.net/CCMyf/2/です。あなたはtransform: rotate(-90deg)スタイルが適用される前にテキストが中央に配置されていることがjsfiddleからわかりますが、ややオフセットしています。これは特に、div.outerが不足している場合に顕著になります。

事前にサイズを知らなくてもこのテキストを垂直にセンタリングすることはできますか?この問題を解決するtransform-originの値は見つかりませんでした。

+0

あなたは 'ディスプレイの設定に反対していますか?ダイナミックdivを垂直方向に整列させる「標準的な」方法は、問題のない変換で動作するはずです:http://stackoverflow.com/a/6182661/188221 – DigTheDoug

+0

私は '' display:table''に反対していません。このフィドルは、テーブルソリューションが上記と同じ問題を抱えていることを示しています:http://jsfiddle.net/4d384/ – danvk

+0

中間要素に 'rotate'クラスを入れてみてください。それはそれを行うべきですが、それはアイテムの幅を乱すように見えます。パディングや幅や高さの小道具で遊ぶ必要があるかもしれませんが、それは可能でなければなりません:http://jsfiddle.net/digthedoug/jWYuq/ – DigTheDoug

答えて

89

キーが-50%〜50%の位置の上部と左を設定し、transformXとtransformYすることです。

.inner { 
    position: absolute; 
    top: 50%; 
    left: 50%; 
} 

.rotate { 
    transform: translateX(-50%) translateY(-50%) rotate(-90deg); 
} 

参照:テキストはそれにスペースが含まれている場合、それが失敗したとして「bjnsn」からhttp://jsfiddle.net/CCMyf/79/

+4

これは私が見た最良のソリューションの1つです。 Thx – grayson

+2

夜遅く、なぜこの作品が、私はCtrl-Rを押した瞬間はわからない...私はそのような "ちょうど作品"の瞬間を得ることはまれです。私の顎は非比喩的に落ちた! – TotoTitus

+1

div要素の代わりにテキスト要素を使って作業するテキスト要素の中心を完全にするために内側の要素に 'margin:0'を追加する必要がありました。 – kapser

2

「回転」クラスにmargin: 0 auto;を追加して、テキストを中央に配置できますか?削除

.rotate { 
    -webkit-transform: rotate(-90deg); 
    -ff-transform: rotate(-90deg); 
    transform: rotate(-90deg); 
    width: 16px; /* transform: rotate() does not rotate the bounding box. */ 
    margin: 0 auto; 
} 
+0

これは機能しません。ここでは "margin:0 auto"で更新されたフィドルです:http://jsfiddle.net/CCMyf/3/。あなたは "?" 「センタリング? "C"が底部にあるよりはるかに上に近い。 – danvk

0

.innerからmargin-top: -7px;は私のために中央に縦方向に回転したテキストを作りました。また、水平のテキストを中央に配置しませんでした。

上記のコードを削除するだけですか?あなたがここに見ることができるように、あなたの.on('change')関数に

$('.inner').css('margin-top', $(this).parent().height() - 2*$(this).height()); 

を::

+0

これは、中央に近づけることができますが、それでもまだ適切に中央に配置されていません。可能であれば、私はCSSソリューションを非常に好むでしょうが、これはうまくいきますが、これはうまくいきます。http://jsfiddle.net/CCMyf/4/ – danvk

5

それはその質問に答えるために少し遅れる場合がありますが、私は同じ問題につまずい途中で別のdivを追加して、それを達成する何らかの方法を見つけました。いくつかの位置決めものと共に

<div class="outer"> 
    <div class='middle'><span class="inner rotate">Centered?</span></div> 
</div> 

及びその中間要素上text-align: centerを適用すること、:

.middle { 
    margin-left: -200px; 
    width: 400px; 
    text-align: center; 
    position: relative; 
    left: 7px; 
    top: 50%; 
    line-height: 37px; 
} 

.innerも両方rotatetext-align特性を可能にするために、display: inline-block;を得ます。ここ

は、対応フィドルある:http://jsfiddle.net/CCMyf/47/

2

答えは良いが、完璧ではありません。例えば、彼は 'Centered?'テキストとして変更した場合、テキストを 'Centered?そうでなければ、うまく動作せず、スペースの次の行を取るでしょう。 Therは内側のdivブロックに対して定義された幅または高さではありません。

.inner { 
    font-size: 13px; 
    font-color: #878787; 
    position: absolute; 
    top: 50%; 
    left: 50%; 
    background: #DDD; 
} 

https://jsfiddle.net/touqeer_shakeel/f1gfy1yy/ しかし、我々は、外側のdivの高さに等しい内側のdivの幅を設定することにより、適切に内側外側のdivの幅に等しく、DIVおよび設定の行の高さを全体のテキスト中心整列を行うことができalign-items:centerとjustify-content:centerプロパティで内部divの表示flexプロパティ。要素にtable`:

.inner { 
    font-size: 13px; 
    font-color: #878787; 
    position: absolute; 
    top: 50%; 
    left: 50%; 
    display: flex; 
    justify-content:center; 
    align-items:center; 
    line-height:40px; 
} 
$('#height').on('change', function(e) { 
    $('.outer').css('height', $('#height').val() + 'px'); 
    $('.inner').css('width', $('#height').val() + 'px'); 
}); 

更新フィドルhttps://jsfiddle.net/touqeer_shakeel/cjL21of5/

関連する問題