Saya ingin menggunakan kueri media untuk mengubah ukuran elemen berdasarkan ukuran div
elemen yang digunakan. Saya tidak bisa menggunakan ukuran layar karena div
hanya digunakan seperti widget di dalam halaman web, dan ukurannya dapat bervariasi.
Memperbarui
Sepertinya ada pekerjaan yang sedang dilakukan sekarang: https://github.com/ResponsiveImagesCG/cq-demos
css
media-queries
Yazz.com
sumber
sumber
Jawaban:
Tidak, kueri media tidak dirancang untuk berfungsi berdasarkan elemen di halaman. Mereka dirancang untuk bekerja berdasarkan perangkat atau jenis media (karenanya mengapa mereka disebut pertanyaan media ).
width
,,height
dan fitur media berbasis dimensi lainnya semuanya mengacu pada dimensi viewport atau layar perangkat dalam media berbasis layar. Mereka tidak dapat digunakan untuk merujuk ke elemen tertentu pada halaman.Jika Anda perlu menerapkan gaya tergantung pada ukuran
div
elemen tertentu pada halaman Anda, Anda harus menggunakan JavaScript untuk mengamati perubahan dalam ukurandiv
elemen itu alih-alih permintaan media.sumber
@element
pertanyaan. W3C memiliki beberapa dokumentasi yang baik tentang sajak / alasan untuk@media
pertanyaan: w3.org/TR/css3-mediaqueries/#width (tautan ini membawa Anda ke bagian yang membahas lebar --- lebar jenis media, bukan elemen yang terkandung di dalamnya)Saya baru saja membuat shav javascript untuk mencapai tujuan ini. Lihatlah jika Anda mau, ini adalah konsep bukti, tapi berhati-hatilah: ini versi awal dan masih perlu beberapa pekerjaan.
https://github.com/marcj/css-element-queries
sumber
min-width
pembaruan atribut; apakah saya perlu menulis daftar kelas css secara manual, elemen yang ditandai, diaktifkan untukmin-width
pembaruan?Kueri Media di dalam iframe dapat berfungsi sebagai kueri elemen. Saya sudah berhasil mengimplementasikan ini. Idenya datang dari posting terbaru tentang Iklan Responsif oleh Zurb. Tanpa Javascript!
sumber
Ini saat ini tidak dimungkinkan dengan CSS saja seperti yang ditulis oleh @BoltClock dalam jawaban yang diterima, tetapi Anda dapat mengatasinya dengan menggunakan JavaScript.
Saya membuat permintaan kontainer (alias permintaan elemen) prolyfill untuk menyelesaikan masalah semacam ini. Kerjanya sedikit berbeda dari skrip lain, jadi Anda tidak perlu mengedit kode HTML elemen Anda. Yang harus Anda lakukan adalah memasukkan skrip dan menggunakannya dalam CSS Anda seperti:
https://github.com/ausi/cq-prolyfill
sumber
Saya mengalami masalah yang sama beberapa tahun yang lalu dan mendanai pengembangan plugin untuk membantu saya dalam pekerjaan saya. Saya telah merilis plugin sebagai sumber terbuka sehingga orang lain dapat memperoleh manfaat darinya juga, dan Anda dapat mengambilnya di Github: https://github.com/eqcss/eqcss
Ada beberapa cara kita dapat menerapkan gaya responsif yang berbeda berdasarkan apa yang dapat kita ketahui tentang suatu elemen pada halaman. Berikut adalah beberapa pertanyaan elemen yang memungkinkan Anda menulis di CSS dengan plugin EQCSS:
Jadi kondisi apa yang didukung untuk gaya responsif dengan EQCSS?
Pertanyaan Berat
px
%
px
%
Kueri Tinggi
px
%
px
%
Hitung Kueri
Selektor Khusus
Di dalam kueri elemen EQCSS Anda juga dapat menggunakan tiga penyeleksi khusus yang memungkinkan Anda untuk menerapkan gaya Anda secara lebih spesifik:
$this
(elemen yang cocok dengan kueri)$parent
(elemen induk dari elemen yang cocok dengan kueri)$root
(elemen dasar dokumen,<html>
)Query elemen memungkinkan Anda untuk menyusun tata letak Anda dari modul desain yang responsif secara individual, masing-masing dengan sedikit 'kesadaran diri' tentang bagaimana mereka ditampilkan pada halaman.
Dengan EQCSS Anda dapat mendesain satu widget agar terlihat bagus dari lebar 150px hingga lebar 1000px, maka Anda dapat dengan percaya diri memasukkan widget itu ke bilah sisi mana pun di halaman mana pun menggunakan templat apa saja (di situs mana pun) dan
sumber
Dari perspektif tata letak, dimungkinkan menggunakan teknik modern.
Itu dibuat (saya percaya) oleh Heydon Pickering. Dia merinci prosesnya di sini: http://www.heydonworks.com/article/the-flexbox-holy-albatross
Chris Coyier mengambilnya dan bekerja melalui demo di sini: https://css-tricks.com/putting-the-flexbox-albatross-to-real-use/
Untuk menyatakan kembali masalah ini, di bawah ini kita melihat 3 dari komponen yang sama, masing-masing terdiri dari tiga div oranye berlabel
a
,b
danc
.Blok dua yang kedua ditampilkan secara vertikal, karena terbatas pada ruang horizontal, sedangkan komponen atas 3 blok diletakkan secara horizontal.
Ini menggunakan
flex-basis
properti CSS dan Variabel CSS untuk membuat efek ini.Demo
Artikel Heydon adalah 1000 kata yang menjelaskannya secara terperinci, dan saya sangat merekomendasikan untuk membacanya.
sumber
Pertanyaannya sangat kabur. Seperti yang dikatakan BoltClock, pertanyaan media hanya mengetahui dimensi perangkat. Namun, Anda dapat menggunakan kueri media dalam kombinasi dengan penyeleksi descender untuk melakukan penyesuaian.
Satu-satunya solusi lain membutuhkan JS.
sumber
Satu-satunya cara saya bisa berpikir bahwa Anda dapat mencapai apa yang Anda inginkan murni dengan css, adalah dengan menggunakan wadah cairan untuk widget Anda. Jika lebar wadah Anda adalah persentase dari layar maka Anda dapat menggunakan kueri media untuk gaya tergantung pada lebar wadah Anda, karena sekarang Anda akan tahu untuk setiap dimensi layar berapa dimensi wadah Anda. Sebagai contoh, katakanlah Anda memutuskan untuk membuat wadah Anda 50% dari lebar layar. Kemudian untuk lebar layar 1200px Anda tahu bahwa wadah Anda adalah 600px
sumber
Saya juga memikirkan pertanyaan media, tetapi kemudian saya menemukan ini:
Cukup buat pembungkus
<div>
dengan nilai persentase untukpadding-bottom
, seperti ini:Ini akan menghasilkan
<div>
dengan tinggi sama dengan 75% dari lebar wadahnya (rasio aspek 4: 3).Teknik ini juga dapat digabungkan dengan pertanyaan media dan sedikit pengetahuan khusus tentang tata letak halaman untuk kontrol yang lebih halus.
Cukup untuk kebutuhan saya. Yang mungkin cukup untuk kebutuhan Anda juga.
sumber
Anda dapat menggunakan API ResizeObserver . Ini masih dalam masa awal sehingga belum didukung oleh semua browser (tetapi ada beberapa polyfill yang dapat membantu Anda dengan itu).
Pada dasarnya API ini memungkinkan Anda untuk melampirkan pendengar acara ke ukuran elemen DOM.
Demo 1 - Demo 2
sumber
Untuk saya, saya melakukannya dengan mengatur lebar maksimum div, maka untuk widget kecil tidak akan terpengaruh dan widget besar diubah ukurannya karena gaya max-width.
sumber
.widget
hanya sampel sebagai kelas untuk widget div.