Misalkan saya memiliki <div>
yang saya ingin pusatkan di tampilan browser (viewport). Untuk melakukannya, saya perlu menghitung lebar dan tinggi<div>
elemen.
Apa yang harus saya gunakan? Harap sertakan informasi tentang kompatibilitas browser.
javascript
html
xhtml
dhtml
snortasprocket
sumber
sumber
Jawaban:
Anda harus menggunakan
.offsetWidth
dan.offsetHeight
properti. Perhatikan bahwa itu milik elemen, bukan.style
.var width = document.getElementById('foo').offsetWidth;
Fungsi
.getBoundingClientRect()
mengembalikan dimensi dan lokasi elemen sebagai angka floating-point setelah melakukan transformasi CSS.sumber
.offsetWidth
dan.offsetHeight
: developer.mozilla.org/en/Determining_the_dimensions_of_elementsoffsetWidth
akan menjadi 0 jika elemennya adalahdisplay:none
, sedangkan yang dikomputasiwidth
mungkin masih memiliki nilai positif dalam contoh ini.visibility:hidden
tidak mempengaruhioffsetWidth
.offsetWidth
mengembalikan kotak "keseluruhan" termasuk konten, padding, dan perbatasan; sementaraclientWidth
mengembalikan ukuran kotak konten saja (sehingga akan memiliki nilai yang lebih kecil setiap kali elemen memiliki padding dan / atau perbatasan yang tidak nol). (mod diedit untuk kejelasan)Lihatlah
Element.getBoundingClientRect()
.Metode ini akan mengembalikan objek yang berisi
width
,height
dan beberapa nilai lain yang bermanfaat:Sebagai contoh:
Saya percaya ini tidak memiliki masalah itu
.offsetWidth
dan.offsetHeight
lakukan di mana mereka kembali0
(seperti yang dibahas dalam komentar di sini )Perbedaan lainnya adalah
getBoundingClientRect()
dapat mengembalikan piksel fraksional, di mana.offsetWidth
dan.offsetHeight
akan membulatkan ke bilangan bulat terdekat.Catatan IE8 :
getBoundingClientRect
tidak mengembalikan tinggi dan lebar pada IE8 dan di bawah. *Jika Anda harus mendukung IE8, gunakan
.offsetWidth
dan.offsetHeight
:Perlu dicatat bahwa Objek yang dikembalikan oleh metode ini sebenarnya bukan objek yang normal . Properti tidak dapat dihitung (jadi, misalnya,
Object.keys
tidak bekerja di luar kotak.)Info lebih lanjut tentang ini di sini: Cara terbaik untuk mengubah ClientRect / DomRect menjadi Obyek biasa
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/getBoundingClientRectsumber
offsetHeight
danoffsetWidth
tidak.CATATAN : jawaban ini ditulis pada tahun 2008. Pada saat itu solusi lintas-browser terbaik bagi kebanyakan orang adalah menggunakan jQuery. Saya meninggalkan jawaban di sini untuk anak cucu dan, jika Anda menggunakan jQuery, ini adalah cara yang baik untuk melakukannya. Jika Anda menggunakan kerangka kerja lain atau JavaScript murni, jawaban yang diterima mungkin adalah jalan yang harus ditempuh.
Pada jQuery 1.2.6 Anda dapat menggunakan salah satu fungsi inti CSS ,
height
danwidth
(atauouterHeight
danouterWidth
, jika sesuai).sumber
Kalau-kalau berguna bagi siapa pun, saya meletakkan kotak teks, tombol dan div semua dengan css yang sama:
Saya mencobanya dengan chrome, firefox dan ie-edge, saya mencoba dengan jquery dan tanpa, dan saya mencobanya dengan dan tanpa
box-sizing:border-box
. Selalu dengan<!DOCTYPE html>
Hasil:
sumber
Menurut MDN: Menentukan dimensi elemen
offsetWidth
danoffsetHeight
kembalikan "jumlah total ruang yang ditempati elemen, termasuk lebar konten yang terlihat, scrollbar (jika ada), padding, dan border"clientWidth
danclientHeight
kembalikan "seberapa banyak ruang yang digunakan untuk konten yang ditampilkan, termasuk padding tetapi tidak termasuk perbatasan, margin, atau scrollbar"scrollWidth
danscrollHeight
kembalikan "ukuran sebenarnya dari konten, terlepas dari berapa banyak dari itu saat ini terlihat"Jadi itu tergantung pada apakah konten yang diukur diharapkan keluar dari area yang dapat dilihat saat ini.
sumber
Anda hanya perlu menghitungnya untuk IE7 dan yang lebih lama (dan hanya jika konten Anda tidak memiliki ukuran tetap). Saya sarankan menggunakan komentar kondisional HTML untuk membatasi retas ke IE lama yang tidak mendukung CSS2. Untuk semua browser lain gunakan ini:
Ini solusi sempurna. Ia memusatkan
<div>
ukuran apa pun, dan menyusutkannya ke ukuran kontennya.sumber
Sangat mudah untuk memodifikasi gaya elemen tetapi agak sulit untuk membaca nilainya.
JavaScript tidak dapat membaca properti gaya elemen (elem.style) yang berasal dari css (internal / eksternal) kecuali Anda menggunakan metode panggilan internal getComputedStyle di javascript.
Elemen: Elemen untuk membaca nilai untuk.
pseudo: Elemen pseudo jika diperlukan, misalnya :: sebelumnya. String kosong atau tanpa argumen berarti elemen itu sendiri.
Hasilnya adalah objek dengan properti style, seperti elem.style, tapi sekarang dengan memperhatikan semua kelas css.
Misalnya, di sini style tidak melihat margin:
Jadi modifikasi kode javaScript Anda untuk memasukkan getComputedStyle dari elemen yang ingin Anda dapatkan lebar / tinggi atau atribut lainnya
Nilai yang dihitung dan diselesaikan
Ada dua konsep dalam CSS:
Dulu getComputedStyle telah dibuat untuk mendapatkan nilai yang dihitung, tetapi ternyata nilai yang diselesaikan jauh lebih nyaman, dan standar berubah.
Jadi saat ini getComputedStyle benar-benar mengembalikan nilai yang diselesaikan dari properti.
Tolong dicatat:
getComputedStyle membutuhkan nama properti lengkap
Ada ketidakkonsistenan lain. Sebagai contoh, beberapa browser (Chrome) menunjukkan 10px pada dokumen di bawah ini, dan beberapa di antaranya (Firefox) - jangan:
untuk informasi lebih lanjut https://javascript.info/styles-and-classes
sumber
element.offsetWidth dan element.offsetHeight harus dilakukan, seperti yang disarankan dalam posting sebelumnya.
Namun, jika Anda hanya ingin memusatkan konten, ada cara yang lebih baik untuk melakukannya. Asumsikan Anda menggunakan xhtml DOCTYPE ketat. atur margin: 0, properti otomatis dan lebar yang diperlukan dalam px ke tag body. Konten mendapat pusat selaras ke halaman.
sumber
... tampaknya CSS membantu menempatkan div di tengah ...
sumber
Anda juga dapat menggunakan kode ini:
sumber
jika Anda perlu memusatkannya di port tampilan browser; Anda dapat mencapainya hanya dengan CSS
sumber
Berikut ini adalah kode untuk WKWebView yang menentukan ketinggian elemen Dom tertentu (tidak berfungsi dengan baik untuk seluruh halaman)
sumber
swift
kode iOS , kan? Bukan JavaScript. Saya menahan downvote (b / c ini mungkin sebenarnya cukup berguna) tetapi harap dicatat bahwa ini tidak menjawab pertanyaan, dan kemungkinan akan lebih cocok untuk pertanyaan lain, khusus iOS. Jika belum ada, mungkin pertimbangkan untuk bertanya dan menjawab sendiri.Jika offsetWidth mengembalikan 0, Anda bisa mendapatkan properti lebar gaya elemen dan mencarinya untuk nomor. "100px" -> 100
/\d*/.exec(MyElement.style.width)
sumber