İşte bir üst öğedeki satır içi öğelerin aynı anda yatay ve dikey olarak hizalanması için bir teknik :
Dikey hizalama
1) Bu yaklaşımda, ebeveynininline-block
ilk (veya son) alt öğesi olarak (sözde-) bir öğe oluştururuz ve özelliğini , ebeveyninin tüm yüksekliğini alacak şekilde ayarlarız .height
100%
2) Ayrıca ekleme vertical-align: middle
, satır içi (-blok) öğelerini satır alanının ortasında tutar. Bu nedenle, bu CSS bildirimini ilk çocuğa ve elemanımıza ( resim ) ekliyoruz .
3) Son olarak, satır içi (-block) öğeler arasındaki beyaz boşluk karakterini kaldırmak için , üst öğenin yazı tipi boyutunu sıfıra ayarlayabiliriz font-size: 0;
.
Not: Nicolas Gallagher'ın görüntü değiştirme tekniğini aşağıda kullandım.
Avantajları nelerdir?
- Kap ( üst öğe ) dinamik boyutlara sahip olabilir.
Görüntü öğesinin boyutlarını açıkça belirtmeye gerek yoktur.
Bu yaklaşımı, bir <div>
öğeyi dikey olarak da hizalamak için kolayca kullanabiliriz ; dinamik bir içeriğe sahip olabilir (yükseklik ve / veya genişlik). Ancak , içindeki metni görüntülemek için öğesinin font-size
özelliğini yeniden ayarlamanız gerektiğini unutmayın div
. Çevrimiçi Demo .
<div class="container">
<div id="element"> ... </div>
</div>
.container {
height: 300px;
text-align: center; /* align the inline(-block) elements horizontally */
font: 0/0 a; /* remove the gap between inline(-block) elements */
}
.container:before { /* create a full-height inline block pseudo=element */
content: ' ';
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
height: 100%;
}
#element {
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
font: 16px/1 Arial sans-serif; /* <-- reset the font property */
}
Çıktı
Duyarlı Kapsayıcı
OP yanıt veren bir kapsayıcıyı nasıl oluşturacağınızı zaten bildiği için bu bölüm soruyu cevaplamayacaktır. Ancak, nasıl çalıştığını açıklayacağım.
Yapmak için yüksekliği onun bir muhafaza elemanı değişiklikleri genişliği (boy oranı açısından), en üst / alt için bir yüzde değeri kullanabilir padding
özelliği.
Bir yüzde değeri üst / alt dolgu ya da kenarlarında içeren blok genişliğine bağlıdır.
Örneğin:
.responsive-container {
width: 60%;
padding-top: 60%; /* 1:1 Height is the same as the width */
padding-top: 100%; /* width:height = 60:100 or 3:5 */
padding-top: 45%; /* = 60% * 3/4 , width:height = 4:3 */
padding-top: 33.75%; /* = 60% * 9/16, width:height = 16:9 */
}
İşte Online Demo . Alttan satırları yorumlayın ve efekti görmek için paneli yeniden boyutlandırın.
Ayrıca, aynı sonucu elde etmek için padding
mülkü kukla bir çocuğa veya :before
/ :after
sözde unsura uygulayabiliriz. Ancak Not bu durumda, ilgili yüzde değeri padding
göre olan genişliği arasında .responsive-container
tek başına.
<div class="responsive-container">
<div class="dummy"></div>
</div>
.responsive-container { width: 60%; }
.responsive-container .dummy {
padding-top: 100%; /* 1:1 square */
padding-top: 75%; /* w:h = 4:3 */
padding-top: 56.25%; /* w:h = 16:9 */
}
Demo # 1 .
Demo # 2 ( :after
Sözde öğe kullanma )
İçerik ekleme
padding-top
Özellik kullanmak , içeriğin üstünde veya altında, kabın içinde büyük bir alana neden olur .
Düzeltmek amacıyla, bir sarma elemanı ile içerik sarma kullanarak belge, normal akışından bu öğe kaldırmak sahip mutlak konumlandırma (bu kullanılarak sarıcı genişletmek ve son olarak top
, right
, bottom
ve left
özellikleri) kendi ana tüm alanını doldurmak için, kap .
İşte başlıyoruz:
.responsive-container {
width: 60%;
position: relative;
}
.responsive-container .wrapper {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
}
İşte Online Demo .
Hepsini bir araya getirmek
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<img src="http://placehold.it/150x150" alt="">
</div>
</div>
.img-container {
text-align:center; /* Align center inline elements */
font: 0/0 a; /* Hide the characters like spaces */
}
.img-container:before {
content: ' ';
display: inline-block;
vertical-align: middle;
height: 100%;
}
.img-container img {
vertical-align: middle;
display: inline-block;
}
İşte ÇALIŞMA DEMOSU .
Açıkçası, tarayıcı uyumluluğu::before
için sözde öğe kullanmaktan kaçınabilir ve aşağıdakilerin ilk alt öğesi olarak bir öğe oluşturabilirsiniz :.img-container
<div class="img-container">
<div class="centerer"></div>
<img src="http://placehold.it/150x150" alt="">
</div>
.img-container .centerer {
display: inline-block;
vertical-align: middle;
height: 100%;
}
GÜNCEL DEMO .
max-*
Özellikleri kullanma
Görüntüyü kutunun içinde daha düşük genişlikte tutmak için, görüntüyü ayarlayabilir max-height
ve max-width
özelliğini ayarlayabilirsiniz :
.img-container img {
vertical-align: middle;
display: inline-block;
max-height: 100%; /* <-- Set maximum height to 100% of its parent */
max-width: 100%; /* <-- Set maximum width to 100% of its parent */
}
İşte GÜNCEL DEMO .