Bagaimana cara menyelaraskan sesuatu secara vertikal di dalam tag rentang?

144

Bagaimana cara mendapatkan "x" untuk disejajarkan secara vertikal di tengah rentang?

.foo {
    height: 50px;
    border: solid black 1px;
    display: inline-block;
    vertical-align: middle;
}

<span class="foo">
   x
</span>
mike
sumber

Jawaban:

218

Gunakan line-height:50px;bukan tinggi. Itu harus melakukan trik;)

Sindre Sorhus
sumber
1
Sangat bagus! Ini berfungsi untuk semua jenis tag. Dalam kasus saya, bekerja ke <img>.
Felipe Conde
21
Masalahnya adalah ketika teks membungkus. Dengan dua baris rentang ini akan dirender dengan tinggi 100px.
Norberto Yoan
jika teksmu dibungkus, coba jawabanku @NorbertoYoan
Hashbrown
idem untuk @Sumit (digandakan karena ada masalah dengan komentar SO )
Hashbrown
Ini seharusnya bukan jawaban pilihan utama, memiliki solusi mungkin memberikan beberapa hasil yang tidak diinginkan lainnya tergantung pada konten.
rafaelmorais
113

Ketahuilah bahwa line-heightpendekatan ini gagal jika Anda memiliki kalimat yang panjang karena spanmelanggar batas karena tidak ada cukup ruang. Dalam hal ini, Anda akan memiliki dua garis dengan celah dengan ketinggian N piksel yang ditentukan di properti.

Saya terjebak di dalamnya ketika saya ingin menunjukkan gambar dengan teks terpusat vertikal di sisi kanannya yang berfungsi dalam aplikasi web responsif. Sebagai basis saya menggunakan pendekatan yang disarankan oleh Eric Nickus dan Felipe Tadeo.

Jika Anda ingin mencapai:

Desktop

dan ini:

ponsel

.container {
    background: url( "https://i.imgur.com/tAlPtC4.jpg" ) no-repeat;
    display: inline-block;
    background-size: 40px 40px; /* image's size */
    height: 40px; /* image's height */
    padding-left: 50px; /* image's width plus 10 px (margin between text and image) */
}

.container span {
    height: 40px; /* image's height */
    display: table-cell;
    vertical-align: middle;
}
<span class="container">
    <span>This is a centered sentence next to an image</span>
</span>

lluisaznar
sumber
apa itu ketinggian dyanmic
Alberto Acuña
39

Ini adalah cara paling sederhana untuk melakukannya jika Anda membutuhkan banyak baris. Bungkus spanteks Anda dengan yang lain spandan tentukan tingginya line-height. Trik untuk beberapa baris adalah ulang batin span's line-height.

<span class="textvalignmiddle"><span>YOUR TEXT HERE</span></span>
.textvalignmiddle {
    line-height: /*set height*/;
}

.textvalignmiddle > span {
    display: inline-block;
    vertical-align: middle;
    line-height: 1em; /*set line height back to normal*/
}

DEMO

Tentu saja bagian luar spanbisa menjadi divatau apa yang Anda miliki

Hashbrown
sumber
2
spans, seperti elemen inline lainnya, dapat berisi elemen inline HTML apa pun . Terlepas dari itu, saya menulis bahwa itu textvalignmiddlebisa jadi divsangat diperlukan (dan Anda dapat mengaturnya display:inline;jika Anda sangat tidak suka menggunakan spans)
Hashbrown
Maksudku, mereka seharusnya tidak melakukannya. Itu untuk berisi teks. Lain gunakan div.
JorgeeFG
3
spanadalah wadah inline umum untuk html dan tidak begitu banyak menjadi teks saja; `Ini dapat digunakan untuk mengelompokkan elemen untuk keperluan styling ...`. Saya sarankan membaca spesifikasi sebelum mendorong standar pengkodean pribadi Anda pada orang lain yang menyatakannya sebagai fakta
Hashbrown
3
apa pun yang terjadi, percakapan ini tidak konstruktif dalam arti teknis terhadap pertanyaan dan bukan untuk apa komentar dalam SO
Hashbrown
Bekerja untuk saya juga. Menggunakan elemen yang berbeda dari rentang.
chocolata
27

Cara flexbox:

.foo {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 50px;
}
Chris Clower
sumber
karena .foorentang waktu display: flex-inlineakan lebih cocok
koala
7
Apakah maksud Anda "inline-flex"?
Tim Gerhard
5

Saya membutuhkan ini untuk tautan, jadi saya membungkus rentang dengan a-tag dan div, kemudian memusatkan span tag itu sendiri

HTML

<div>
    <a class="tester" href="#">
        <span>Home</span>
    </a>
</div>

CSS

.tester{
    display: inline-block;
    width: 9em;
    height: 3em;
    text-align: center;
}
.tester>span{
    position: relative;
    top: 25%;
}
Jason
sumber
Terima kasih untuk ini, saya benci mengacaukan dengan CSS, saya menghabiskan sepanjang hari mencoba memusatkan elemen secara vertikal ketika saya menemukan jawaban Anda di sini. Anda adalah penyelamat hidup!
Todd Nestor
5

Gambar dan teks tengah vertikal CSS

Saya telah membuat satu demo untuk pusat gambar dan teks vertikal dan saya juga menguji firefox, chrome, safari, internet explorer 9 dan 8 juga.

Ini sangat singkat dan mudah css dan html, Silakan periksa kode di bawah ini dan Anda dapat menemukan output di screenshort.

HTML

<div class="frame">
    <img src="capabilities_icon1.png" alt="" />
</div>

CSS

  .frame {
        height: 160px;      
        width: 160px;
        border: 1px solid red;
        white-space: nowrap;
        text-align: center; margin: 1em 0;
    }

    .frame::before {
        display: inline-block;
        height: 100%;
        vertical-align: middle;
        content:"";
    }

    img {
        background: #3A6F9A;
        vertical-align: middle;
    }

Keluaran masukkan deskripsi gambar di sini

Eduard Jacko
sumber
2

ini bekerja untuk saya (Keltex mengatakan hal yang sama)

.foo {
height: 50px;
...
}
.foo span{
vertical-align: middle; 
}

<span class="foo"> <span>middle!</span></span>
Philll_t
sumber
1

Atribut vertical-align css sayangnya tidak melakukan apa yang Anda harapkan. Artikel ini menjelaskan 2 cara untuk menyelaraskan elemen secara vertikal menggunakan css.

Keltex
sumber
1

Atur padding-top menjadi nilai yang tepat untuk menekan x ke bawah, lalu kurangi nilai yang Anda miliki untuk padding-top dari ketinggian.

di mana
sumber