İş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 .height100%
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 paddingmülkü kukla bir çocuğa veya :before/ :aftersözde unsura uygulayabiliriz. Ancak Not bu durumda, ilgili yüzde değeri paddinggöre olan genişliği arasında .responsive-containertek 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 ( :afterSö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, bottomve 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-heightve 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 .