2013-02-28 23 views
52

ile metin döndürülmüş Aşağıdaki HTML vardır: Dikey merkez CSS

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

div.outer dar dikey bir şerit. div.inner, 90 derece döndürülür. "Merkezlenmiş" metnini ister misiniz? konteyner div içinde ortalanmış görünmek için. Önceden div'in boyutunu bilmiyorum.

Bu yakın geliyor: http://jsfiddle.net/CCMyf/2/. Jsfiddle öğesinden, metnin transform: rotate(-90deg) stili uygulanmadan önce dikey olarak ortalandığını görebilirsiniz, ancak bir süre sonra dengelenir. Bu özellikle div.outer'un kısa olduğu zaman fark edilir.

Bu yazı, boyutlardan herhangi birini önceden bilmeden dikey olarak ortalamak mümkün mü? Bu sorunu çözen transform-origin hiçbir değer bulamadım.

+0

Eğer 'ekran ayarı karşıyım musunuz? Dinamik divleri dikey olarak hizalamanın 'standart' yolu, dönüştürmeden sorunsuz çalışmalıdır: http://stackoverflow.com/a/6182661/188221 – DigTheDoug

+0

'' 'display: table''' için karşı değilim. Bu fiddle, tablo çözümünün yukarıdakiyle aynı sorunları olduğunu gösterir: http://jsfiddle.net/4d384/ – danvk

+0

"rotate" sınıfını ortadaki öğeye yerleştirmeyi deneyin. Bunu yapmalı, ama maddenin genişliğini karıştırıyor gibi görünüyor. Dolgu veya genişlik veya yükseklik aksesuarı ile oynamak zorunda olabilirsiniz, ancak bu mümkün olmalıdır: http://jsfiddle.net/digthedoug/jWYuq/ – DigTheDoug

cevap

89

anahtar transformX ve transformY -50%, daha sonra pozisyonu üstten ayarlamak ve% 50 sol ve etmektir:

Burada karşılık gelen keman olduğunu.

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

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

bkz: http://jsfiddle.net/CCMyf/79/

+4

Bu, gördüğüm en iyi çözümlerden biridir. Thx – grayson

+2

Gecenin geç saatlerinde, bunun neden işe yaradığını bilmiyorum, ama ctrl-R'ye bastığım anda ... ... "sadece işe yaramaz" anlarım nadiren. Çenem mecazi olarak düşmedi! – TotoTitus

+1

Metin öğeleriyle birlikte div yerine çalışarak metin merkezini mükemmel hale getirmek için iç öğeye 'margin: 0 'eklemeliydim. – kapser

2

Metni ortalamak için "rotate" sınıfınıza margin: 0 auto; ekler misiniz?

.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

Bu çalışmıyor. İşte "margin: 0 auto" ile güncellenen keman: http://jsfiddle.net/CCMyf/3/. "?" "Merkezleniyor?" "C" aşağıdan yukarıya doğru daha yakındır. – danvk

0

Çıkarma: .inner den margin-top: -7px; benim için merkezli dikey döndürülmüş metin yaptı. Ayrıca yatay metni ortalamamıştır.

Sadece yukarıdaki kodu kaldırın? Burada gördüğünüz gibi, sizin .on('change') fonksiyonu için

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

:

+0

Bu, merkeze yakınlaşmayı sağlayabilir, ancak yine de düzgün bir şekilde ortalanmış değildir. Kemanın bu sürümünde bunu açıkça görebilirsiniz: http://jsfiddle.net/CCMyf/4/ – danvk

5

O soruya cevap için biraz geç olabilir ama aynı konuyla ilgili tökezledi ve yolunda başka bir div ekleyerek bunu başarmanın bir yolunu buldu.

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

ve bazı konumlandırma malzeme ile birlikte, bu orta parça üzerine bir text-align: center uygulanması

:

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

.inner da display: inline-block; hem rotate ve text-align özelliklerini sağlamak için alır. http://jsfiddle.net/CCMyf/47/

2

metin içinde boşluk içerdiğinde başarısız olarak 'bjnsn' dan cevap iyi ama mükemmel değil. Mesela 'Merkezlenmiş?' metin olarak, ancak metni 'Merkezlenmiş' varsaymak için değiştirdik mi? ya da değil 'o zaman iyi çalışmayacak ve uzaydan sonraki sıraya geçecek. Ther, iç div bloğu için tanımlanmış genişlik veya yükseklik değildir.

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

https://jsfiddle.net/touqeer_shakeel/f1gfy1yy/ Ama dış div yüksekliği, hat-yüksekliğine eşit iç div genişliğini ayarlayarak, uygun bir şekilde bütün metin merkezli hizalama yapabilir iç dış div ve ayar genişliğine eşit div hizalama öğeleri ile iç div için ekran esnek özelliği: merkez ve haklı içerik: merkez özellikleri. elemanlarında 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'); 
}); 

güncellenmiş keman https://jsfiddle.net/touqeer_shakeel/cjL21of5/