Kenapa tidak vertical-align: middle
bekerja? Namun, vertical-align: top
tidak bekerja.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
Kenapa tidak vertical-align: middle
bekerja? Namun, vertical-align: top
tidak bekerja.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
vertical-align
Jawaban:
Sebenarnya, dalam hal ini cukup sederhana: terapkan perataan vertikal ke gambar. Karena semuanya dalam satu baris, itu benar-benar gambar yang ingin Anda selaraskan, bukan teks.
Diuji dalam FF3.
Sekarang Anda dapat menggunakan flexbox untuk jenis tata letak ini.
sumber
span
ukuran font. Lihat jawaban saya .width:16px;height:16px
), Anda dapat melihat gambarnya terlalu rendah ...Berikut adalah beberapa teknik sederhana untuk meluruskan vertikal:
Garis vertikal satu garis: tengah
Ini mudah: atur ketinggian baris elemen teks agar sama dengan yang ada pada wadah
Multiple-lines vertical-align: bottom
Benar-benar posisikan div batin relatif ke wadahnya
Multiple-lines vertical-align: tengah
Jika Anda harus mendukung versi kuno IE <= 7
Agar ini berfungsi dengan benar, Anda harus sedikit meretas CSS. Untungnya, ada bug IE yang berfungsi untuk kita. Pengaturan
top:50%
pada wadah dantop:-50%
pada div bagian dalam, Anda dapat mencapai hasil yang sama. Kita dapat menggabungkan keduanya menggunakan fitur lain yang tidak didukung IE: penyeleksi CSS tingkat lanjut.Tinggi wadah variabel, luruskan vertikal: tengah
Solusi ini memerlukan peramban yang sedikit lebih modern daripada solusi lain, karena memanfaatkan
transform: translateY
properti. ( http://caniuse.com/#feat=transforms2d )Menerapkan 3 baris CSS berikut ini ke suatu elemen akan secara vertikal menempatkannya di dalam induknya terlepas dari tinggi elemen induknya:
sumber
display:table
dandisplay:table-cell
CSS bekerja besar, kecuali, tentu saja, di IE7 dan di bawah. Setelah mencabut rambut saya selama beberapa jam, saya memutuskan bahwa saya tidak benar-benar perlu berurusan dengan siapa pun yang masih menggunakan IE7-.display:table
memiliki beberapa batasan di berbagai browser (di IE11max-height
tidak berfungsi jika elemennya ada di dalam sel tabel), jadi dalam beberapa kasus tepi itu bukan ide yang baik untuk menyelaraskan secara vertikal menggunakan sel tabel.Ubah Anda
div
menjadi wadah fleksibel:Sekarang ada dua metode untuk memusatkan perataan untuk semua konten:
Metode 1:
DEMO
Metode 2:
DEMO
Coba nilai lebar dan tinggi berbeda pada
img
dan nilai ukuran font berbeda padaspan
dan Anda akan melihat mereka selalu tetap di tengah wadah.sumber
justify-content: center;
dan untuk memberi jarak (tanpa menggunakan tag <br/>) Anda mungkin juga ingin memasukkanpadding: 1em;
. Pembaruan hebat bagi kami pengembang browser modern.Anda harus menerapkan
vertical-align: middle
ke kedua elemen untuk membuatnya terpusat dengan sempurna.The jawaban yang diterima tidak pusat ikon sekitar setengah dari x-height dari teks di samping itu (sebagaimana didefinisikan dalam spesifikasi CSS ). Yang mungkin cukup baik tetapi dapat terlihat sedikit aneh, jika teks memiliki ascenders atau descenders yang berdiri tepat di atas atau bawah:
Di sebelah kiri, teks tidak sejajar, di sebelah kanan seperti pada gambar di atas. Demo langsung dapat ditemukan di artikel ini tentang perataan-vertikal .
Adakah yang pernah membicarakan mengapa ini
vertical-align: top
berhasil dalam skenario? Gambar dalam pertanyaan mungkin lebih tinggi daripada teks dan dengan demikian menentukan tepi atas kotak baris.vertical-align: top
pada elemen span lalu posisikan saja di bagian atas kotak garis.Perbedaan utama dalam perilaku antara
vertical-align: middle
dantop
adalah bahwa elemen bergerak pertama relatif terhadap garis dasar kotak (yang ditempatkan di mana pun diperlukan untuk memenuhi semua keberpihakan vertikal dan dengan demikian terasa agak tidak dapat diprediksi ) dan relatif kedua terhadap batas luar kotak garis (yang merupakan lebih nyata).sumber
Teknik yang digunakan dalam jawaban yang diterima hanya berfungsi untuk teks baris tunggal ( demo ), tetapi tidak teks multi-baris ( demo ) - seperti yang dicatat di sana.
Jika ada yang perlu memusatkan teks multi-baris vertikal ke gambar, berikut adalah beberapa cara (Metode 1 dan 2 terinspirasi oleh artikel Trik CSS ini )
Metode # 1: Tabel CSS ( FIDDLE ) (IE8 + ( caniuse ))
CSS:
Metode # 2: Elemen pseudo pada wadah ( FIDDLE ) (IE8 +)
CSS:
Metode # 3: Flexbox ( FIDDLE ) ( caniuse )
CSS (Biola di atas berisi awalan vendor):
sumber
Kode ini berfungsi di IE dan juga FF:
sumber
Karena Anda harus mengatur
line-height
ketinggian div agar ini berfungsisumber
Pada dasarnya, Anda harus turun ke CSS3.
sumber
Sebagai catatan, penyelarasan "perintah" tidak boleh bekerja pada SPAN, karena ini adalah in-line tag , bukan tag level blok . Hal-hal seperti perataan, margin, bantalan, dll tidak akan berfungsi pada tag in-line karena titik inline tidak mengganggu aliran teks.
CSS membagi tag HTML menjadi dua kelompok: in-line dan block-level. Cari "css block vs inline" dan sebuah artikel bagus muncul ...
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
(Memahami prinsip-prinsip inti CSS adalah kunci untuk tidak terlalu menyebalkan)
sumber
text-align
danvertical-align
(dengan pengecualian dari aplikasi padatd
elemen untuk tujuan warisan) secara khusus dimaksudkan untukinline
daninline-block
elemen (span
,img
, dll).Gunakan
line-height:30px
untuk rentang sehingga teks sejajar dengan gambar:sumber
Hal lain yang dapat Anda lakukan adalah mengatur teks
line-height
ke ukuran gambar di dalam<div>
. Kemudian atur gambar kevertical-align: middle;
Itu sungguh cara termudah.
sumber
Belum melihat solusi dengan
margin
jawaban ini, jadi inilah solusi saya untuk masalah ini.Solusi ini hanya berfungsi jika Anda tahu lebar gambar Anda.
HTML
CSS
sumber
Saya biasanya menggunakan 3px sebagai pengganti
top
. Dengan menambah / mengurangi nilai itu, gambar dapat diubah ke ketinggian yang diperlukan.sumber
Tulis properti rentang ini
Gunakan
display:inline-block;
Ketika Anda menggunakanvertical-align
properti. Itu adalah properti terkaitsumber
Anda dapat mengatur gambar sebagai
inline element
menggunakandisplay
propertisumber
Pada sebuah tombol di jQuery mobile, misalnya, Anda dapat mengubah sedikit dengan menerapkan gaya ini pada gambar:
sumber
Solusi multiline:
http://jsfiddle.net/zH58L/6/
Bekerja di semua browser dan ie9 +
sumber
Ini bisa membingungkan, saya setuju. Coba gunakan fitur tabel. Saya menggunakan trik CSS sederhana ini untuk memposisikan modals di tengah halaman web. Ini memiliki dukungan browser yang besar:
dan bagian CSS:
Perhatikan bahwa Anda harus menata dan menyesuaikan ukuran gambar dan wadah tabel agar berfungsi sesuai keinginan Anda. Nikmati.
sumber
Pertama CSS inline tidak dianjurkan sama sekali, itu benar-benar mengacaukan HTML Anda.
Untuk menyelaraskan gambar dan rentang, Anda cukup melakukannya
vertical-align:middle
.sumber
Tidak yakin mengapa itu tidak merendernya di browser navigasi Anda, tapi saya biasanya menggunakan snippet seperti ini ketika mencoba untuk menampilkan header dengan gambar dan teks terpusat, semoga membantu!
https://output.jsbin.com/jeqorahupo
sumber
sumber
Anda mungkin menginginkan ini:
Seperti yang disarankan orang lain, coba
vertical-align
pada gambar:CSS tidak mengganggu. Anda hanya tidak membaca dokumentasinya . ; P
sumber