Bootstrap 3 ile dikey hizalama


889

Twitter Bootstrap 3 kullanıyorum ve divörneğin dikey olarak iki hizalamak istediğimde sorun yaşıyorum - JSFiddle link :

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="row">
  <div class="col-xs-5">
    <div style="height:5em;border:1px solid #000">Big</div>
  </div>
  <div class="col-xs-5">
    <div style="height:3em;border:1px solid #F00">Small</div>
  </div>
</div>

Bootstrap ızgara sistemi kullanan float: leftdeğil, display:inline-blockmülkiyet, böylece vertical-alignişi yapmaz. Bunu margin-topdüzeltmek için kullanmayı denedim , ancak bunun duyarlı tasarım için iyi bir çözüm olmadığını düşünüyorum.


1
hayır hayır, dikey olarak hizalamak istiyorum div, içerideki metin yok, böyle bir şey jsfiddle.net/corinem/Aj9H9 ama bu örnekte bootstrap kullanmıyorum
corinem


6
ÖNEMLİ: Her iki sütun da "vcenter" sınıfına ihtiyaç duyar. Aksi takdirde çalışmaz. Bir saat geçirdim, şimdi anladım.
Cymro

cevaplardan hiç biri 5
col-

Bootstrap 4'te dikey merkez hizalaması çok farklı: stackoverflow.com/a/41464397/171456
Zim

Yanıtlar:


938

Bu cevap bir hack sunar, ancak şimdi her yerde desteklendiği için flexbox ( @Haschem yanıtında belirtildiği gibi) kullanmanızı şiddetle tavsiye ederim .

Demolar bağlantısı:
- Bootstrap 3
- Bootstrap 4 alpha 6

Özel bir sınıfı ihtiyacınız olduğunda kullanmaya devam edebilirsiniz:

.vcenter {
    display: inline-block;
    vertical-align: middle;
    float: none;
}
<div class="row">
    <div class="col-xs-5 col-md-3 col-lg-1 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div><!--
    --><div class="col-xs-5 col-md-7 col-lg-9 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>

Bootply

inline-blockKodunuzda gerçek bir boşluğa izin verirseniz (gibi ...</div> </div>...) kullanmak bloklar arasına fazladan boşluk ekler . Sütun boyutları 12'ye kadar eklenirse, bu ekstra alan ızgaramızı kırar:

<div class="row">
    <div class="col-xs-6 col-md-4 col-lg-2 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div>
    <div class="col-xs-6 col-md-8 col-lg-10 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>

Burada <div class="[...] col-lg-2">ve arasında fazladan boşluk var <div class="[...] col-lg-10">(satır başı ve 2 sekme / 8 boşluk). Ve bu yüzden...

Resim açıklamasını buraya girin

Bu ekstra alana tekme atalım !!

<div class="row">
    <div class="col-xs-6 col-md-4 col-lg-2 vcenter">
        <div style="height:10em;border:1px solid #000">Big</div>
    </div><!--
    --><div class="col-xs-6 col-md-8 col-lg-10 vcenter">
        <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
</div>

Resim açıklamasını buraya girin

Dikkat görünüşte yararsız bir yorum <!-- ... -->? Bunlar önemlidir - onlarsız, <div>elemanlar arasındaki boşluk , düzende yer kaplar ve ızgara sistemini kırar.

Not: Bootply güncellendi


18
Bu kopuyor (örn kullanarak 12 kadar ekleyin, sütun kılavuzları belirtirseniz col-lg-2ve col-lg-10). İlginçtir, aşağıdaki JS kodunu eklerseniz (jQuery varsayarak), kendini düzeltmeyi başarır:$('.row').html($('.vcenter'));
Jake Z

8
@pasemes Bu, (iyi bilinen) inline-block fazladan alandan kaynaklanır . Düzenlememde bir çözüm veriyorum.
zessx

92
Boş yorumların olduğu kısım derin, karanlık, kötü sihir gibi geliyor. Ve budur. Ama bir yerlerde birisi işe yaraması gerektiğine karar verdi, öyle de öyle.
cfstras

5
Henüz kimsenin bundan bahsetmediği için şaşırttı, ancak yorumların yerine "font-size: 0;" "gizem alanı" kaldırmak için satır içi blok div üst üzerinde
Poff

4
Fazladan boşluk sorununu çözmek için herhangi bir HTML yorumu <! - -> veya herhangi bir javascript kodu kullanmaya gerek yoktur, basit ve etkili bir CSS hilesi vardır: negatif kenar boşlukları. Sadece sağ kenar boşluğu ekleyin: -4px; .vcenter sınıfına. Tüm tarayıcılarla test edildi ve çalışıyor (eski IE6 ve IE7 hariç ... ancak tarih öncesi kimin umurunda;))
Frank

897

Esnek kutu düzeni

CSS Esnek Kutu'nun ortaya çıkmasıyla, web tasarımcılarının 1 kabusları 1 çözüldü. En çirkinlerden biri, dikey hizalama. Şimdi bilinmeyen yüksekliklerde bile mümkün .

"Yirmi yıllık düzen saldırıları sona eriyor. Belki yarın değil, yakında ve hayatımızın geri kalanında."

- CSS Efsanevi Eric Meyer , W3Conf 2013'te

Esnek Kutu (ya da kısaca, Flexbox), özellikle yerleşim amacıyla tasarlanmış yeni bir düzen sistemidir. Şartname durumları :

Esnek düzen, yüzeysel olarak blok düzenine benzer. Kayan reklamlar ve sütunlar gibi blok düzeninde kullanılabilen daha karmaşık metin veya belge merkezli özelliklerin çoğundan yoksundur. Buna karşılık, alan dağıtmak ve içeriği webapps ve karmaşık web sayfalarının sıklıkla ihtiyaç duyduğu şekilde hizalamak için basit ve güçlü araçlar kazanır.

Bu durumda nasıl yardımcı olabilir? İyi, görelim bakalım.


Dikey hizalanmış sütunlar

Twitter Bootstrap kullanarak .rowbazı .col-*s var. Yapmamız gereken tek şey istenilen göstermektir .row2 bir şekilde esnek konteyner kutusu ve daha sonra tüm hizaya esnek öğe tarafından dikey ler (sütunlar)align-items özelliği.

BURADAN ÖRNEK (Lütfen yorumları dikkatle okuyun)

<div class="container">
    <div class="row vertical-align"> <!--
                    ^--  Additional class -->
        <div class="col-xs-6"> ... </div>
        <div class="col-xs-6"> ... </div>
    </div>
</div>
.vertical-align {
    display: flex;
    align-items: center;
}

Çıktı

Twitter Bootstrap'ta dikey hizalanmış sütunlar

Renkli alan sütunların doldurma kutusunu görüntüler.

Açıklama align-items: center

8.3 Çapraz Eksen Hizalama: align-itemsözellik

Esnek eşyalar , esnek konteynerin mevcut hattının çapraz ekseninde , buna benzer, justify-contentancak dikey yönde hizalanabilir . align-itemsanonim esnek öğeler dahil olmak üzere tüm esnek kabın öğeleri için varsayılan hizalamayı ayarlar .

align-items: center; Merkez değerine göre, esnek öğenin kenar boşluğu kutusu, çizgi içindeki çapraz eksende ortalanır .


Büyük Uyarı

Önemli not # 1: Twitter Bootstrap, sınıflardan widthbirini .col-xs-#sütunlara vermediğiniz sürece ekstra küçük cihazlardaki sütunları belirtmez .

Bu nedenle bu belirli demoda, .col-xs-*sütunların mobil modda düzgün görüntülenmesi için sınıfları kullandım , çünkü widthsütunun açıkça belirtildiğinden.

Ama alternatif olabilir kapatmak flexbox'a değiştirerek basitçe düzeni display: flex;için display: block;belirli ekran boyutlarında. Örneğin:

/* Extra small devices (767px and down) */
@media (max-width: 767px) {
    .row.vertical-align {
        display: block; /* Turn off the flexible box layout */
    }
}

Veya yalnızca aşağıdaki gibi belirli ekran boyutlarında belirtebilirsiniz.vertical-align :

/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
    .row.vertical-align {
        display: flex;
        align-items: center;
    }
}

Bu durumda, ben gelirdim @KevinNelson bireyin yaklaşımı .

Önemli not # 2: Kısalık nedeniyle satıcı ön ekleri atlandı. Flexbox sözdizimi zaman içinde değiştirildi. Yeni yazılı sözdizimi web tarayıcılarının eski sürümlerinde çalışmaz (ancak Internet Explorer 9 ve daha eski sürümlerde Internet Explorer 9! Flexbox desteklenmez).

Bu, satıcı gibi önceden eklenmiş özellikleri de kullanmanız gerektiği anlamına gelir display: -webkit-box , üretim modunda vb. .

Eğer tıklarsanız "Geçiş Derleyen Görünüm" in Demo , siz (sayesinde öneki CSS bildirimlerinde sürümünü göreceksiniz Autoprefixer ).


Dikey hizalanmış içeriğe sahip tam yükseklikte sütunlar

Önceki demoda gördüğünüz gibi , sütunlar (esnek öğeler) artık konteynerleri (esnek konteyner kutusu, yani .rowöğe) kadar yüksek değildir.

Bunun nedeni, özellik centeriçin değer kullanılmasıdır align-items. Varsayılan değer şudur:stretch öğelerin üst öğenin tüm yüksekliğini doldurabilmesidir.

Bunu düzeltmek display: flex;için sütunlara da ekleyebilirsiniz :

BURAYA ÖRNEK (Yine, yorumlara dikkat edin)

.vertical-align {
  display: flex;
  flex-direction: row;
}

.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] {
  display: flex;
  align-items: center;     /* Align the flex-items vertically */
  justify-content: center; /* Optional, to align inner flex-items
                              horizontally within the column  */
}

Çıktı

Twitter Bootstrap'ta dikey hizalanmış içeriklere sahip tam yükseklikte sütunlar

Renkli alan sütunların doldurma kutusunu görüntüler.

Son olarak, en önemlisi , buradaki demoların ve kod snippet'lerinin size farklı bir fikir vermek, hedefe ulaşmak için modern bir yaklaşım sağlamak olduğunu unutmayın. Bu yaklaşımı gerçek dünya web sitelerinde veya uygulamalarında kullanacaksanız lütfen " Büyük Uyarı " bölümüne dikkat edin.


Tarayıcı desteği de dahil olmak üzere daha fazla okuma için bu kaynaklar yararlı olacaktır:


1. Div içindeki bir görüntüyü duyarlı yükseklikle dikey olarak hizalayın 2. Twitter Bootstrap'ın varsayılan değerini değiştirmemek için ek bir sınıf kullanmak daha iyidir .row.


9
Biraz araştırma yaptıktan sonra, HTML5Please.com'un bunu kullanmak için yeterli destek olduğunu söylediğini gördüm. Bu oldukça harika! html5please.com/#flexbox
Alec Moore

6
Bu aslında en iyi çözümdür ve daha fazla desteğe sahip olmalıdır. Ve elbette biz, geliştiriciler, onu yaymak için elimizden geldiğince kullanmalıyız.
Mateus Neves

12
Bunu denedim ve kemanlarınızı düzenleyip bunun tamamen yararsız olduğunu ve zaman kaybı olduğunu anlayana kadar benim için beklenen şekilde çalışmıyordum. Bunu yapmak duyarlı tasarım noktasını tamamen özlüyor, çünkü sütunlar ekrana sığmadıklarında artık üst üste yığılmayacak, böylece önyükleme ihtiyacını tamamen kullanışsız hale getirecek ve sitenizi tepkisiz hale getirecektir. Ne demek istediğimi görmek için, ilgili örneklerde herhangi bir col-xs- * öğesini col-xs-12 olarak değiştirin, tarayıcı ekranınızı çok küçük yapın (bir mobil cihaz gibi) ve sonuçları görün: daha fazla yanıt yok.
Pere

8
@HashemQolami adlı sınıfları kullanıyor olsanız da col-*, keman / kod kalemleriniz bootstrap kullanmıyor, bu yüzden yanıltıcı. Örnekleriniz bootstrap ile çalışmaz; ızgara sistemi temel alınmaz flex, bu nedenle uyumsuzdur. Önyükleme destekli bir sayfada örneklerinizden herhangi birini deneyin ve onların çalışmadığını fark edeceksiniz.
Pere

5
@Hashem Qolami hala önerileriniz için herhangi bir kullanım durumu bulamıyor. Bootstrap'ın temel, disktinatif özelliklerinden biri, sütunlar yatay olarak sığmadıklarında üst üste yığılır. Bu artık sizin çözümünüzde olmaz. Sadece stilleri yüklerseniz gördüğünüz gibi ızgara sistemi, bile çalışır bu keman içinde . Js yok; sadece css. Oluşturma alanının boyutunu değiştirdiğinizde yanıt verilir. Bu, örneklerinizin hiçbirinde olmaz. "Önce mobil" yaklaşımı kaybolur, bu da Bootstrap'i gereksiz kılar. Yani bu cevap yanlış, yanıltıcı veya eksik.
Pere

48

Aşağıdaki kod benim için çalıştı:

.vertical-align {
    display: flex;
    align-items: center;
}

4
En basit çözüm IMHO
saiyancoder

3
Herkes tek bir sütun ile çalışan bir çözüm var mı? Bir satır aldım ve sonra sadece bir col-md-6. Bu çözüm ve diğer flexbox olanlar sadece 2 sütun olduğunda işe yarar
Ka Mok

36

2020 Güncellemesi

Orijinal sorunun Bootstrap 3 için olduğunu biliyorum, ancak şimdi Bootstrap 4 yayınlandığına göre, dikey merkezde bazı güncellenmiş rehberlik.

Önemli! Dikey merkez ebeveynin yüksekliğine göredir

Senin merkeze çalışırken öğesinin üst hayır tanımlamış ise yüksekliğini , hiçbiri dikey ortalama çözümlerin çalışacak!

Bootstrap 4

Bootstrap 4 artık varsayılan olarak flexbox olduğundan, dikey hizalamaya birçok farklı yaklaşım vardır: otomatik kenar boşlukları , flexbox araçları veya ekran yardımcıları ve dikey hizalama yardımcıları . İlk başta "dikey hizalama araçları" açık görünüyor, ancak bunlar yalnızca satır içi ve tablo görüntüleme öğeleriyle çalışıyor. İşte bazı Bootstrap 4 dikey merkezleme seçenekleri ..


1 - Otomatik Kenar Boşluklarını Kullanarak Dikey Merkez:

Dikey olarak merkezlemenin başka bir yolu da kullanmaktır my-auto. Bu, elemanı kabının içinde ortalayacaktır. Örneğin h-100, satırı tam yüksekliğe getirir my-autove col-sm-12sütunu dikey olarak ortalar.

<div class="row h-100">
    <div class="col-sm-12 my-auto">
        <div class="card card-block w-25">Card</div>
    </div>
</div>

Bootstrap 4 - Otomatik kenar boşluklarını kullanan dikey merkez Demo

my-auto dikey y eksenindeki kenar boşluklarını temsil eder ve şunlara eşdeğerdir:

margin-top: auto;
margin-bottom: auto;

2 - Flexbox'lı Dikey Merkez:

Dikey orta ızgara sütunları

Bootstrap 4 yana .rowartık display:flexsadece kullanabilirsiniz align-self-centerdikey ortalamak için herhangi bir sütun üzerinde ...

       <div class="row">
           <div class="col-6 align-self-center">
                <div class="card card-block">
                 Center
                </div>
           </div>
           <div class="col-6">
                <div class="card card-inverse card-danger">
                    Taller
                </div>
          </div>
    </div>

veya satırın align-items-centertamamını .rowdikey olarak ortalamak için tümünü kullanın col-*...

       <div class="row align-items-center">
           <div class="col-6">
                <div class="card card-block">
                 Center
                </div>
           </div>
           <div class="col-6">
                <div class="card card-inverse card-danger">
                    Taller
                </div>
          </div>
    </div>

Bootstrap 4 - Dikey merkez farklı yükseklik sütunları Demo


3 - Display Utils Kullanarak Dikey Merkez:

Özyükleme 4 olan görüntü utils'i için kullanılabilir display:table, display:table-cell, display:inline, vs .. Bu kullanılabilen dikey hizalama utils hizalama satır içi, sıralı blok veya tablo hücre elemanları.

<div class="row h-50">
    <div class="col-sm-12 h-100 d-table">
        <div class="card card-block d-table-cell align-middle">
            I am centered vertically
        </div>
    </div>
</div>

Bootstrap 4 - Display araçlarını kullanan dikey merkez Demo

Ayrıca bakınız: Bootstrap 4'teki Dikey Hizalama Merkezi


Önyükleme 3

Merkezlemek için öğelerin kaplarında Flexbox yöntemi:

.display-flex-center {
    display: flex;
    align-items: center;
}

TranslateY yöntemini dönüştürün:

.transform-center-parent {
    position: relative;
    transform-style: preserve-3d;
}

.transform-center {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}

Satır içi yöntemi görüntüle:

.display-inline-block {
    display: inline;
}
.display-inline-block > div {
    display: inline-block;
    float: none;
    vertical-align: middle;
}

Bootstrap 3 merkezleme yöntemlerinin demosu


1
İştemx-auto (yatay merkezleme) için Bootstrap belgeleri , bu nedenle my-autodikey merkezleme (y ekseni) mantıklı .
xinthose

26

Bunu div'ın CSS'sinde deneyin:

display: table-cell;
vertical-align: middle;

4
ana öğenin görüntülenmesi gerekiyor: tablo
Az.Youness

21

@Media sorgularına aşina olmayan herkese yardımcı olması durumunda "çözümümü" paylaşacağımı düşündüm.

@ HashemQolami'nin cevabı sayesinde, col- * sınıfları gibi mobil olarak çalışacak bazı medya sorguları oluşturdum, böylece col- * 'ı mobil cihazlar için istifleyebildim, ancak bunları daha büyük ekranlar için merkezde dikey olarak hizalayabildiğim, örn.

<div class='row row-sm-flex-center'>
    <div class='col-xs-12 col-sm-6'></div>
    <div class='col-xs-12 col-sm-6'></div>
</div>

.

.row-xs-flex-center {
    display:flex;
    align-items:center;
}
@media ( min-width:768px ) {
    .row-sm-flex-center {
        display:flex;
        align-items:center;
    }
}
@media ( min-width: 992px ) {
    .row-md-flex-center {
        display:flex;
        align-items:center;
    }
}
@media ( min-width: 1200px ) {
    .row-lg-flex-center {
        display:flex;
        align-items:center;
    }
}

Ekran çözünürlüğü başına farklı sayıda sütun gerektiren daha karmaşık mizanpajlar (örn. -Xs için 2 satır, -sm için 3 ve -md için 4 vb.) Biraz daha gelişmiş bir sonlandırmaya ihtiyaç duyar, ancak -xs içeren basit bir sayfa için yığılmış ve -sm ve satırlarda daha büyük, bu iyi çalışıyor.


Benim durumumda, bunun clear: both;işe yaraması için medya sorguları içindeki sınıflara bir eklemek zorunda kaldım .
motaa

1
@motaa, Karışıklık için özür dilerim ... BS3 tarzında, HTML örneğimde gördüğünüz gibi, bunu bir .rowdeğiştirici olarak kullanıyorum ... bu yüzden benzemeli class="row row-sm-flex-center". BS3 .rowtanımıclear:both;
Kevin Nelson

HTML kodunuzu daha ayrıntılı analiz etmeliydim. :) Gerçi .row değiştiricisini de kullanıyorum ama benim durumumda (wordpress), ana temada değiştirildi, bu da beni clear: both;tekrar eklemeye yol açtı .
motaa

21

Kabul edilen cevabı takiben, işaretlemeyi özelleştirmek istemiyorsanız, endişelerinizi ayırmak için veya sadece bir CMS kullandığınız için, aşağıdaki çözüm iyi çalışır:

.valign {
  font-size: 0;
}

.valign > [class*="col"] {
  display: inline-block;
  float: none;
  font-size: 14px;
  font-size: 1rem;
  vertical-align: middle;
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row valign">
   <div class="col-xs-5">
      <div style="height:5em;border:1px solid #000">Big</div>
   </div>
   <div class="col-xs-5">
       <div style="height:3em;border:1px solid #F00">Small</div>
   </div>
 </div>

Buradaki sınırlama, satır boşluğunu kaldırmak için yazı tipi boyutunu 0 olarak ayarladığından, yazı tipi boyutunu üst öğeden devralamazsınız.



17

Bu benim çözümüm. Bu sınıfı CSS içeriğinize eklemeniz yeterli.

.align-middle {
  display: flex;
  justify-content: center;
  align-items: center;
}

Ardından HTML'niz şöyle görünür:

<div class="col-xs-12 align-middle">
  <div class="col-xs-6" style="background-color:blue;">
    <h3>Item</h3>
    <h3>Item</h3>
  </div>
  <div class="col-xs-6" style="background-color:red;">
    <h3>Item</h3>
  </div>
</div>

.align-middle {
  display: flex;
  justify-content: center;
  align-items: center;
}
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<!DOCTYPE html>
    <title>Title</title>
  </head>
  <body>
    <div class="container">
      <div class="row">
        <div class="col-xs-12 align-middle">
          <div class="col-xs-6" style="background-color:blue;">
            <h3>Item</h3>
            <h3>Item</h3>
          </div>
          <div class="col-xs-6" style="background-color:red;">
            <h3>Item</h3>
          </div>
        </div>
      </div>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
  </body>
</html>


1
Bu, col-md-6
Lucas Bustamante

15

Sadece yaptım ve yapmasını istediğim şeyi yapıyor.

.align-middle {
  margin-top: 25%;
  margin-bottom: 25%;
}

Ve şimdi sayfam şöyle görünüyor

<div class='container-fluid align-middle'>
    content

 +--------------------------------+
 |                                |
 |  +--------------------------+  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  |                          |  |
 |  +--------------------------+  |
 |                                |
 +--------------------------------+

Bu yaklaşımla ilgili sorun, DIV'nin belirtilen bir yüksekliği olduğunda işe yaramamasıdır : jsfiddle.net/4bpxen25/1 Tavsiye ederim: stackoverflow.com/a/28519318/1477388
user1477388

10

Şu anda seçilen koddan başka tarayıcılar değil, Chrome kullanarak aşağıdaki kodun gerçekten işe yaradığını görüyorum:

.v-center {
    display:table!important; height:125px;
}

.v-center div[class*='col-'] {
   display: table-cell!important;
   vertical-align:middle;
   float:none;
}
.v-center img {
   max-height:125px;
}

Bootply Bağlantısı

Yükseklikleri değiştirmeniz (özellikle açık .v-center) ve div[class*='col-']ihtiyaçlarınız için div'i kaldırmanız / değiştirmeniz gerekebilir .


8

Ben de aynı sorunla karşılaştım. Benim durumumda dış kabın yüksekliğini bilmiyordum, ama bunu nasıl düzelttim:

Önce htmlve bodyöğeleriniz için yüksekliği % 100 olacak şekilde ayarlayın. Bu önemli! Bu olmadan, htmlve bodyelemanları sadece çocuklarının yüksekliğini miras alacaktır.

html, body {
   height: 100%;
}

Sonra bir dış konteyner sınıf vardı:

.container {
  display: table;
  width: 100%;
  height: 100%; /* For at least Firefox */
  min-height: 100%;
}

Ve son olarak sınıflı iç konteyner:

.inner-container {
  display: table-cell;
  vertical-align: middle;
}

HTML şu kadar basit:

<body>
   <div class="container">
     <div class="inner-container">
        <p>Vertically Aligned</p>
     </div>
   </div>
</body>

İçeriği dikey olarak hizalamak için tek ihtiyacınız olan bu. Keman ile kontrol edin:

Jsfiddle


8

Tablo ve tablo hücrelerine gerek yoktur. Dönüşüm kullanılarak kolayca elde edilebilir.

Misal: http://codepen.io/arvind/pen/QNbwyM

Kod:

.child {
  height: 10em;
  border: 1px solid green;
  position: relative;
}
.child-content {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<div class="row parent">
  <div class="col-xs-6 col-lg-6 child">
    <div class="child-content">
      <div style="height:4em;border:1px solid #000">Big</div>
    </div>
  </div>
  <div class="col-xs-6 col-lg-6 child">
    <div class="child-content">
      <div style="height:3em;border:1px solid #F00">Small</div>
    </div>
  </div>
</div>


7

Bootstrap'ın Daha Az sürümünü kullanıyorsanız ve CSS'yi kendiniz derliyorsanız, Bootstrap sınıflarıyla kullanmak için bazı yardımcı program sınıflarını kullanabilirsiniz.

Bunları Bootstrap ızgara sisteminin yanıt verebilirliğini ve yapılandırılabilirliğini ( -mdveya kullanmak gibi -sm) korumak istediğinizde fevkalade iyi çalıştım , ancak belirli bir satırdaki tüm sütunların hepsinin aynı dikey yüksekliğe sahip olmasını istiyorum (böylece ardından içeriklerini dikey olarak hizalayın ve satırdaki tüm sütunların ortak bir orta paylaşmasını sağlayın).

CSS / Eksi:

.display-table {
    display: table;
    width: 100%;
}
.col-md-table-cell {
    @media (min-width: @screen-md-min) {
        display: table-cell;
        vertical-align: top;
        float: none;
    }
}
.col-sm-table-cell {
    @media (min-width: @screen-sm-min) {
        display: table-cell;
        vertical-align: top;
        float: none;
    }
}
.vertical-align-middle {
    vertical-align: middle;
}

HTML:

<div class="row display-table">
    <div class="col-sm-5 col-sm-table-cell vertical-align-middle">
        ...
    </div>
    <div class="col-sm-5 col-sm-table-cell vertical-align-middle">
        ...
    </div>
</div>

6

Farklı ekran boyutlarında farklı sütun boyutlarını karıştırırken kullanımını kolaylaştırmak için zessx'in cevabını biraz detaylandırdım .

Eğer kullanırsanız Sass , size SCSS-dosyaya bu ekleyebilirsiniz:

@mixin v-col($prefix, $min-width) {
    @media (min-width: $min-width) {
        .col-#{$prefix}-v {
            display: inline-block;
            vertical-align: middle;
            float: none;
        }
    }
}

@include v-col(lg, $screen-lg);
@include v-col(md, $screen-md);
@include v-col(sm, $screen-sm);
@include v-col(xs, $screen-xs);

Bu, aşağıdaki CSS'yi oluşturur (Sass kullanmıyorsanız doğrudan stil sayfalarınızda kullanabilirsiniz):

@media (min-width: 1200px) {
    .col-lg-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 992px) {
    .col-md-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 768px) {
    .col-sm-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

@media (min-width: 480px) {
    .col-xs-v {
        display: inline-block;
        vertical-align: middle;
        float: none;
    }
}

Şimdi bunu aşağıdaki gibi duyarlı sütunlarınızda kullanabilirsiniz:

<div class="container">
    <div class="row">
        <div class="col-sm-7 col-sm-v col-xs-12">
            <p>
                This content is vertically aligned on tablets and larger. On mobile it will expand to screen width.
            </p>
        </div><div class="col-sm-5 col-sm-v col-xs-12">
            <p>
                This content is vertically aligned on tablets and larger. On mobile it will expand to screen width.
            </p>
        </div>
    </div>
    <div class="row">
        <div class="col-md-7 col-md-v col-sm-12">
            <p>
                This content is vertically aligned on desktops and larger. On tablets and smaller it will expand to screen width.
            </p>
        </div><div class="col-md-5 col-md-v col-sm-12">
            <p>
                This content is vertically aligned on desktops and larger. On tablets and smaller it will expand to screen width.
            </p>
        </div>
    </div>
</div>

Bu gerçekten güzel!
Pietro Coelho

Sadece kısa sözdizimi ve LESS değişkenlerinin kullanımı nedeniyle kaldırıldı.
Eduard Luca

5

Flex davranışlar doğal Bootstrap 4. Ekle beri desteklenir d-flex align-items-centeriçinde rowdiv. Artık CSS içeriğinizi değiştirmeniz gerekmez.

Basit örnek: http://jsfiddle.net/vgks6L74/

<!-- language: html -->
<div class="row d-flex align-items-center">
  <div class="col-5 border border-dark" style="height:10em">  Big </div>
  <div class="col-2 border border-danger" style="height:3em"> Small </div>
</div>

Örneğinizle : http://jsfiddle.net/7zwtL702/

<!-- language: html -->
<div class="row d-flex align-items-center">
    <div class="col-5">
        <div class="border border-dark" style="height:10em">Big</div>
    </div>
    <div class="col-2">
        <div class="border border-danger" style="height:3em">Small</div>
   </div>
</div>

Kaynak: Flex · Bootstrap


4

Tamam, yanlışlıkla birkaç çözümü karıştırdım ve sonunda düzenim için çalışıyor, burada en küçük çözünürlükte Bootstrap sütunlarıyla 3x3 tablo yapmaya çalıştım.

/* Required styles */

#grid a {
  display: table;
}

#grid a div {
  display: table-cell;
  vertical-align: middle;
  float: none;
}


/* Additional styles for demo: */

body {
  padding: 20px;
}

a {
  height: 40px;
  border: 1px solid #444;
}

a > div {
  width: 100%;
  text-align: center;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<div id="grid" class="clearfix row">
  <a class="col-xs-4 align-center" href="#">
    <div>1</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>2</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>3</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>4</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>5</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>6</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>7</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>8</div>
  </a>
  <a class="col-xs-4 align-center" href="#">
    <div>9</div>
  </a>
</div>


2

    div{
        border: 1px solid;
    }
    span{
        display: flex;
        align-items: center;
    }
    .col-5{
        width: 100px;
        height: 50px;
        float: left;
        background: red;
    }
    .col-7{
        width: 200px;
        height: 24px;

        float: left;
        background: green;
    }
    <span>
        <div class="col-5">
        </div>
        <div class="col-7"></div>
    </span>


1

Bunu dene,

.exe {
  font-size: 0;
}

.exe > [class*="col"] {
  display: inline-block;
  float: none;
  font-size: 14px;
  font-size: 1rem;
  vertical-align: middle;
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row  exe">
   <div class="col-xs-5">
      <div style="height:5em;border:1px solid grey">Big</div>
   </div>
   <div class="col-xs-5">
       <div style="height:3em;border:1px solid red">Small</div>
   </div>
 </div>


1

Bunu yapmanın birkaç yolu vardır:

  1. kullanım 

    display: table-cell;
    vertical-align: middle;

    ve kabın CSS'si

    display: table;
  2. Dolguyu ekran boyutuna göre değiştirmek için medya ekranı ile birlikte dolgu kullanın. Google @media ekranında daha fazla bilgi edinin.

  3. Göreli dolgu kullanın

    Yani, doldurmayı% cinsinden belirtin


0

Bootstrap 4 (şu anda alfada olan) ile .align-items-centersınıfı kullanabilirsiniz . Böylece Bootstrap'ın duyarlı karakterini tutabilirsiniz. Benim için hemen iyi çalışıyor. Bkz. Bootstrap 4 Belgeleri .


Bu, yalnızca içeren öğe görüntülendiğinde bazı öğeler için çalışır: flex.
Zim

0

HTML

<div class="row">
    <div class="col-xs-2 pull-bottom"
         style="height:100px;background:blue">
    </div>
    <div class="col-xs-8 pull-bottom"
         style="height:50px;background:yellow">
    </div>
</div>

CSS

.pull-bottom {
    display: inline-block;
    vertical-align: bottom;
    float: none;
}

-4

Bir satırda birkaç div öğesini dikey olarak hizalamak istediğim durumla karşılaştım ve Bootstrap sınıflarının col-xx-xx değişkeninin div'a float: left olarak stil uyguladığını gördüm.

Stili, style = "Float: none" gibi div öğelerine uygulamak zorunda kaldım ve tüm div öğelerim dikey olarak hizalanmaya başladı. İşte çalışma örneği:

<div class="col-lg-4" style="float:none;">

JsFiddle Bağlantısı

Birisinin float özelliği hakkında daha fazla bilgi almak istemesi durumunda:

W3Schools - Şamandıra


Bu benim için çalışmıyor. Firefox ve Chrome'da test ettim. Tüm paneller dikey olarak istiflenir.
Alf

şamandıra: hiçbiri onları dikey olarak yığılmaz, bu şekilde çalışması gerekir.
ATHER

1
O zaman farklı bir soru için doğru cevap. ;)
Alf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.