Bagaimana cara menyelaraskan secara vertikal ke tengah konten div dengan lebar / tinggi yang ditentukan?

95

Apa metode yang benar untuk memusatkan konten secara vertikal dalam lebar / tinggi yang ditentukan div.

Dalam contoh ada dua konten dengan ketinggian berbeda, cara terbaik untuk memusatkan secara vertikal menggunakan kelas .content. (dan berfungsi untuk setiap browser dan tanpa solusi dari table-cell)

Miliki beberapa solusi dalam pikiran, tetapi ingin tahu ide lain, salah satunya menggunakan position:absolute; top:0; bottom: 0;dan margin auto.

Ricardo Rodrigues
sumber
2
Pertanyaan Anda harus sepenuhnya mandiri. Jika tidak, ketika URL mati, itu tidak berguna.
Sparky
Mungkin, tetapi waktu itu tidak memiliki solusi yang saya inginkan ... ini menawarkan lebih banyak pilihan
Ricardo Rodrigues
1
tl; dr tahun 2020 : display: flex; align-items: center;. Jika Anda tidak ingin itu juga berada di tengah secara horizontal, tambahkan flex-direction: column;.
Devin Burke

Jawaban:

131

Saya telah meneliti ini sedikit dan dari apa yang saya temukan, Anda memiliki empat opsi:

Versi 1: Div induk dengan tampilan sebagai sel tabel

Jika Anda tidak keberatan menggunakan display:table-celldi div induk, Anda dapat menggunakan opsi berikut:

.area{
    height: 100px;
    width: 100px;
    background: red;
    margin:10px;
    text-align: center;
    display:table-cell;
    vertical-align:middle;
}​

DEMO langsung


Versi 2: Div induk dengan blok tampilan dan sel tabel tampilan konten

.area{
    height: 100px;
    width: 100px;
    background: red;
    margin:10px;
    text-align: center;
    display:block;
}

.content {
    height: 100px;
    width: 100px;
    display:table-cell;
    vertical-align:middle;    
}​

DEMO langsung


Versi 3: Div induk mengambang dan div konten sebagai sel tabel tampilan

.area{
    background: red;
    margin:10px;
    text-align: center;
    display:block;
    float: left;
}

.content {
    display:table-cell;
    vertical-align:middle;
    height: 100px;
    width: 100px;
}​

DEMO langsung


Versi 4: Posisi div induk relatif dengan posisi konten absolut

Satu-satunya masalah yang saya miliki dengan versi ini adalah sepertinya Anda harus membuat css untuk setiap implementasi tertentu. Alasan untuk ini adalah div konten harus memiliki tinggi yang ditetapkan yang akan diisi teks Anda dan margin-top akan ditentukan darinya. Masalah ini bisa dilihat di demo. Anda bisa membuatnya berfungsi untuk setiap skenario secara manual dengan mengubah% tinggi div konten Anda dan mengalikannya dengan -.5 untuk mendapatkan nilai margin atas Anda.

.area{
    position:relative; 
    display:block;
    height:100px;
    width:100px;
    border:1px solid black;
    background:red;
    margin:10px;
}

.content { 
    position:absolute;
    top:50%; 
    height:50%; 
    width:100px;
    margin-top:-25%;
    text-align:center;
}​

DEMO langsung

Josh Mein
sumber
1
Versi 2 adalah yang saya cari, namun konten tidak terpusat secara vertikal. Apakah penting apa areayang terkandung di dalamnya, atau contentisinya?
Shimmy Weitzhandler
64

Ini juga dapat dilakukan display: flexdengan hanya menggunakan beberapa baris kode. Berikut ini contohnya:

.container {
  width: 100px;
  height: 100px;
  display: flex;
  align-items: center;
}

Demo Langsung

martin36
sumber
1
@nihiser Hanya jika Anda juga ingin memusatkannya secara horizontal juga, atau jika Anda ingin menyetelnyaflex-direction: column
martin36
32

Saya menemukan solusi ini di artikel ini

.parent-element {
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
}

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

Ini bekerja seperti pesona jika ketinggian elemen tidak tetap.

N Kumar
sumber
1
JFYI, saya menemukan artikel yang sama dan menggunakan pendekatan itu. Saya harus mengubah posisi menjadi absolut agar dapat berfungsi di Chrome.
Jack A.
@Tokopedia bekerja dengan position: relativedi chrome 62. Tidak yakin seberapa jauh ke belakang.
Jared Smith
0

Trik sederhana untuk memusatkan konten div secara vertikal adalah dengan mengatur tinggi garis sama dengan tinggi:

<div>this is some line of text!</div>
div {
width: 400px
height: 50px;
line-height: 50px;
}

tetapi ini hanya berfungsi untuk satu baris teks!

Pendekatan terbaik adalah dengan div sebagai container dan span dengan nilai di dalamnya:

.cont {
  width: 100px;
  height: 30px;
  display: table;
}

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

    <div class="cont">
      <span class="val">CZECH REPUBLIC, 24532 PRAGUE, Sesame Street 123</span>
    </div>
aku-dan-viy
sumber
-7

margin: all_four_margin

dengan memberikan 50% ke all_four_margin akan menempatkan elemen di tengah

style="margin: 50%"

Anda juga dapat menerapkannya untuk mengikuti

margin: kanan atas kiri bawah

margin: kanan atas & kiri bawah

margin: kanan atas & bawah & kiri

dengan memberikan% yang sesuai kita mendapatkan elemen dimanapun kita inginkan.

lokesh
sumber
5
tolong jelaskan, kata-kata Anda sepertinya ada di mana-mana dan terputus-putus.
Benjamin Trent
Jawaban tidak jelas dengan frase yang buruk dan terbatas pada daftar nilai yang memungkinkan margin.
nuno