Saya menggunakan Bootstrap Twitter pada sebuah proyek. Serta gaya bootstrap default saya juga menambahkan beberapa dari saya sendiri
//My styles
@media (max-width: 767px)
{
//CSS here
}
Saya juga menggunakan jQuery untuk mengubah urutan elemen tertentu pada halaman ketika lebar viewport kurang dari 767px.
$(document).load($(window).bind("resize", checkPosition));
function checkPosition()
{
if($(window).width() < 767)
{
$("#body-container .main-content").remove().insertBefore($("#body-container .left-sidebar"));
} else {
$("#body-container .main-content").remove().insertAfter($("#body-container .left-sidebar"));
}
}
Masalah yang saya alami adalah bahwa lebar yang dihitung oleh $(window).width()
dan lebar yang dihitung oleh CSS tampaknya tidak sama. Ketika $(window).width()
mengembalikan 767 css menghitungnya lebar viewport 751 sehingga tampaknya ada 16px berbeda.
Adakah yang tahu apa yang menyebabkan ini dan bagaimana saya bisa menyelesaikan masalah? Orang-orang telah menyarankan bahwa lebar bilah gulir tidak dipertimbangkan dan menggunakan $(window).innerWidth() < 751
adalah cara untuk pergi. Namun idealnya saya ingin menemukan solusi yang menghitung lebar scrollbar dan yang konsisten dengan permintaan media saya (misalnya di mana kedua kondisi memeriksa terhadap nilai 767). Karena pasti tidak semua browser akan memiliki lebar scrollbar 16px?
Jawaban:
Jika Anda tidak harus mendukung IE9, Anda cukup menggunakan
window.matchMedia()
( dokumentasi MDN ).window.matchMedia
sepenuhnya konsisten dengan permintaan media CSS dan dukungan browser cukup baik: http://caniuse.com/#feat=matchmediaMEMPERBARUI:
Jika Anda harus mendukung lebih banyak peramban, Anda dapat menggunakan metode mq Modernizr , ia mendukung semua peramban yang memahami kueri media dalam CSS.
sumber
Modernizr.mq
hanya mengembalikan nilai boolean, jadi Anda harus menyebutnya sendiri dalamonresize
pengendali event.window.matchMedia
adalah cara yang disarankan, karena tidak memicu reflow , tergantung pada seberapa sering Anda memanggil fungsi ini dapat menyebabkan masalah kinerja. Jika Anda tidak ingin menggunakan Modernizr secara langsung, Anda dapat menyalin kode sumber dari src / mq.js dan src / injectElementWithStyles.js .Periksa aturan CSS yang diubah oleh kueri media. Ini dijamin selalu berhasil.
http://www.fourfront.us/blog/jquery-window-width-and-media-queries
HTML:
Javascript:
CSS:
sumber
<div id="xs-indicator" class="xs-visible">
Mungkin karena
scrollbar
, gunakaninnerWidth
bukanwidth
sukaAnda juga bisa mendapatkan
viewport
sejenisnyaSumber kode di atas
sumber
innerWidth()
atau Anda dapat menggunakannya seperti$('body').innerWidth();
Lihat ini stackoverflow.com/questions/8339377/…window.innerWidth
tidak konsisten dengan kueri media CSS di Safari 8 jika bilah gulir diaktifkan di preferensi sistem OSX.ya, itu karena scrollbar. Sumber jawaban yang benar: masukkan uraian tautan di sini
sumber
Ini mungkin praktik yang lebih baik bukan untuk JS-lingkup lebar dokumen tetapi semacam perubahan yang dibuat oleh css @media query. Dengan metode ini Anda dapat yakin bahwa fungsi JQuery dan perubahan css terjadi secara bersamaan.
css:
jquery:
sumber
Saya menghadapi masalah yang sama baru-baru ini - juga dengan Bootstrap 3.
$ .Width () atau $ .innerWidth () tidak akan berfungsi untuk Anda.
Solusi terbaik yang saya temukan - dan secara khusus dirancang untuk BS3 -
adalah memeriksa lebar
.container
elemen.Karena Anda mungkin tahu bagaimana
.container
elemen bekerja,itu satu-satunya elemen yang akan memberi Anda lebar saat ini yang ditetapkan oleh aturan BS css.
Jadi begitulah kira-kira
sumber
Menggunakan
Ini menyelesaikan masalah saya
sumber
Berikut ini adalah alternatif dari metode yang disebutkan sebelumnya yang mengandalkan perubahan sesuatu melalui CSS dan membacanya melalui Javascript. Metode ini tidak perlu
window.matchMedia
atau Modernizr. Itu juga tidak memerlukan elemen HTML tambahan. Ia bekerja dengan menggunakan elemen pseudo-HTML untuk menyimpan informasi breakpoint:Saya menggunakan
body
sebagai contoh, Anda dapat menggunakan elemen HTML apa pun untuk ini. Anda dapat menambahkan string atau nomor apa pun yang Anda inginkan ke dalamcontent
elemen pseudo. Tidak harus 'mobile' dan seterusnya.Sekarang kita dapat membaca informasi ini dari Javascript dengan cara berikut:
Dengan cara ini kami selalu yakin bahwa informasi breakpoint sudah benar, karena itu datang langsung dari CSS dan kami tidak perlu repot mendapatkan lebar layar yang tepat melalui Javascript.
sumber
querySelector()
ataugetPropertyValue()
. Anda dapat mencari penawaran tunggal di regex juga (karena tidak konsisten). Ini:window.getComputedStyle(document.body, ':after').content.replace(/"|'/g, '')
. Dan, untuk membuatnya sedikit lebih murah, Anda dapat membungkusnya dengan underscore / lodash._debounce()
dengan ~ 100ms menunggu. Akhirnya, menambahkan attribs ke <html> membuat output tersedia untuk hal-hal lain seperti klausa tooltip disable yang mencari flag / data mentah di luar vars. Contoh: gist.github.com/dhaupin/f01cd87873092f4fe2fb8d802f9514b1Javascript menyediakan lebih dari satu metode untuk memeriksa lebar viewport. Seperti yang Anda perhatikan, innerWidth tidak termasuk lebar bilah alat, dan lebar bilah alat akan berbeda di seluruh sistem. Ada juga opsi outerWidth , yang akan mencakup lebar toolbar. The Mozilla Javascript API negara:
Keadaan javascript sedemikian rupa sehingga orang tidak dapat mengandalkan makna khusus untuk outerWidth di setiap browser di setiap platform.
outerWidth
adalah tidak didukung pada yang lebih tua browser ponsel , meskipun mendapat dukungan di browser desktop utama dan paling baru browser ponsel pintar.Seperti yang ditunjukkan oleh ausi,
matchMedia
akan menjadi pilihan bagus karena CSS distandarisasi dengan lebih baik (matchMedia menggunakan JS untuk membaca nilai viewport yang terdeteksi oleh CSS). Tetapi bahkan dengan standar yang diterima, browser terbelakang masih ada yang mengabaikannya (IE <10 dalam hal ini, yang membuat matchMedia tidak terlalu berguna setidaknya sampai XP mati).Dalam ringkasan , jika Anda hanya mengembangkan untuk browser desktop dan mobile browser yang lebih baru, outerWidth harus memberikan apa yang Anda cari, dengan beberapa keberatan .
sumber
Berikut adalah trik yang kurang terlibat untuk menangani pertanyaan media. Dukungan lintas browser agak terbatas karena tidak mendukung IE mobile.
Lihat dokumentasi Mozilla untuk lebih jelasnya.
sumber
coba ini
sumber
Solusi yang selalu berfungsi dan disinkronkan dengan kueri media CSS.
Tambahkan div ke badan
Tambahkan gaya dan ubah dengan memasukkan ke dalam kueri media tertentu
Kemudian dalam gaya periksa JS yang Anda ubah dengan memasukkan ke dalam kueri media
Jadi secara umum Anda dapat memeriksa gaya apa pun yang sedang diubah dengan memasukkan ke dalam kueri media tertentu.
sumber
Solusi lintas-browser terbaik adalah dengan menggunakan Modernizr.mq
tautan: https://modernizr.com/docs/#mq
Modernizr.mq memungkinkan Anda untuk memeriksa secara terprogram apakah kondisi jendela browser saat ini cocok dengan kueri media.
Catatan Browser tidak mendukung permintaan media (mis. IE lama) mq akan selalu kembali salah.
sumber
sumber
Apa yang saya lakukan ;
dan memanggil variabel Lebar di mana saja setelahnya.
Anda perlu memasang getWidth () di badan dokumen Anda untuk memastikan bahwa lebar scrollbar dihitung, jika tidak, lebar scrollbar browser dikurangi dari getWidth ().
sumber
Implementasi slider yang licin dan tampilkan jumlah slide yang berbeda di blok tergantung pada resolusi (jQuery)
sumber
Coba ini
Untuk Referensi Lebih Lanjut klik di sini
sumber