Bagaimana cara mengambil sebuah elemen HTML's aktual lebar dan tinggi?
Misalkan saya punya <div>
yang saya ingin pusat di browser's display (viewport). Untuk melakukannya, saya harus menghitung lebar dan tinggi <div>
elemen.
Apa yang harus saya gunakan? Harap sertakan informasi tentang kompatibilitas browser.
824
13
Anda harus menggunakan
.offsetWidth
dan.offsetHeight
properties. Catatan mereka termasuk elemen, tidak.gaya
.var width = dokumen.getElementById('foo').offsetWidth;
Lihatlah
Element.getBoundingClientRect()
.Metode ini akan mengembalikan sebuah objek yang berisi
lebar
,tinggi badan
, dan beberapa nilai-nilai yang berguna:Misalnya:
Saya percaya ini tidak memiliki masalah yang
.offsetWidth
dan.offsetHeight
lakukan di mana mereka kadang-kadang kembali0
(seperti yang dibahas dalam komentar di sini)Perbedaan lain adalah
getBoundingClientRect()
dapat kembali pecahan piksel, di mana.offsetWidth
dan.offsetHeight
akan bulat ke bilangan bulat terdekat.IE8 Catatan:
getBoundingClientRect
tidak kembali tinggi dan lebar pada IE8 dan bawah.*Jika anda harus dukungan IE8, gunakan
.offsetWidth
dan.offsetHeight
:Untuk dicatat bahwa Objek yang dikembalikan oleh metode ini adalah tidak benar-benar normal objek. Sifat yang tidak enumerable (jadi, misalnya,
Objek.tombol
doesn't bekerja out-of-the-box.)Info lebih lanjut tentang ini di sini: https://stackoverflow.com/questions/39417566/how-best-to-convert-a-clientrect-domrect-into-a-plain-object
Referensi:
.offsetHeight
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight.offsetWidth
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth.getBoundingClientRect()
: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRectCATATAN: jawaban ini ditulis pada tahun 2008. Pada saat yang terbaik cross-browser solusi bagi kebanyakan orang benar-benar adalah menggunakan jQuery. I'm meninggalkan jawabannya di sini untuk anak cucu dan, jika anda're menggunakan jQuery, ini adalah cara yang baik untuk melakukannya. Jika anda're menggunakan beberapa framework atau murni JavaScript jawaban yang diterima adalah mungkin cara untuk pergi.
Sebagai jQuery 1.2.6 anda dapat menggunakan salah satu inti CSS fungsi,
tinggi
danlebar
(atauouterHeight
danouterWidth
, yang sesuai).Hanya dalam kasus hal ini berguna untuk siapa pun, saya menempatkan kotak teks, tombol dan div dengan css:
Saya coba di chrome, firefox dan ie-edge, saya mencoba dengan jquery dan tanpa, dan saya mencoba dengan dan tanpa
box-sizing:border-box
. Selalu dengan<!DOCTYPE html>
Hasil:
Menurut MDN: Menentukan dimensi-dimensi elements
offsetWidth
danoffsetHeight
kembali "total jumlah ruang elemen menempati, termasuk lebar terlihat konten, scrollbar (jika ada), padding, dan border"clientWidth
danclientHeight
kembali "berapa banyak ruang yang sebenarnya konten yang ditampilkan mengambil, termasuk padding tapi belum termasuk border, margin, atau scrollbar"scrollWidth
danscrollHeight
kembali "ukuran sebenarnya dari konten, terlepas dari berapa banyak dari hal ini yang terlihat saat ini"Jadi, itu tergantung pada apakah diukur konten ini diharapkan akan keluar dari saat ini yang dapat dilihat.
Anda hanya perlu menghitung untuk IE7 dan lebih tua (dan hanya jika konten anda tidak't memiliki ukuran tetap). Saya sarankan menggunakan HTML bersyarat komentar untuk membatasi hack untuk IEs tua yang don't mendukung CSS2. Untuk semua browser lainnya menggunakan ini:
Ini adalah solusi sempurna. Itu pusat
<div>
dari berbagai ukuran, dan shrink-wrap itu untuk ukuran isinya.Hal ini mudah untuk memodifikasi unsur-unsur gaya tapi agak sulit untuk membaca nilai.
JavaScript dapat't baca setiap elemen gaya properti (elem.gaya) yang berasal dari css(internal/eksternal) kecuali jika anda menggunakan dibangun dalam metode panggilan getComputedStyle dalam javascript.
Elemen: elemen untuk membaca nilai.
pseudo: pseudo-elemen jika diperlukan, misalnya ::sebelum. String kosong atau tidak ada argumen berarti elemen itu sendiri.
Hasilnya adalah sebuah benda dengan gaya-sifat, seperti elem.gaya, tapi sekarang dengan hormat untuk semua kelas css.
Misalnya, di sini gaya tidak melihat margin:
Modifikasi kode javaScript anda untuk memasukkan getComputedStyle dari elemen yang anda ingin mendapatkan itu's lebar/tinggi atau atribut lainnya
Dihitung dan nilai yang diselesaikan
Ada dua konsep dalam CSS:
Sebuah waktu yang lama lalu getComputedStyle diciptakan untuk mendapatkan dihitung nilai-nilai, tetapi ternyata bahwa nilai yang diselesaikan jauh lebih nyaman, dan standar berubah.
Jadi saat ini getComputedStyle benar-benar kembali teratasi nilai properti.
Harap Diperhatikan:
getComputedStyle memerlukan lengkap nama properti
Ada inkonsistensi lainnya. Sebagai contoh, beberapa browser (Chrome) menunjukkan 10px dalam dokumen di bawah ini, dan beberapa dari mereka (Firefox) – yang tidak boleh dilakukan:
untuk informasi lebih lanjut https://javascript.info/styles-and-classes
... tampaknya CSS membantu untuk menempatkan div di pusat ...
elemen.offsetWidth dan elemen.offsetHeight harus dilakukan, seperti yang disarankan di posting sebelumnya.
Namun, jika anda hanya ingin center konten, ada cara yang lebih baik untuk melakukannya. Dengan asumsi anda menggunakan xhtml strict DOCTYPE. mengatur margin:0 auto properti dan lebar diperlukan dalam px untuk tag body. Konten menjadi pusat selaras ke halaman.
jika anda perlu untuk pusat itu di browser's display port, anda dapat mencapai itu dengan CSS saja
anda juga dapat menggunakan kode ini:
Berikut ini adalah kode untuk WKWebView apa yang menentukan ketinggian tertentu elemen Dom (doesn't bekerja dengan benar untuk seluruh halaman)
Jika offsetWidth kembali 0, anda bisa mendapatkan elemen's gaya dan lebar properti pencarian untuk nomor. "100px" -> 100
/\d*/.exec(MyElement.gaya.lebar)