Saya perlu memuat gambar spanduk secara dinamis ke dalam aplikasi HTML5 dan ingin beberapa versi berbeda sesuai dengan lebar layar. Saya tidak dapat menentukan dengan benar lebar layar ponsel, jadi satu-satunya cara saya bisa memikirkan untuk melakukan ini adalah menambahkan gambar latar belakang div dan menggunakan @ media untuk menentukan lebar layar dan menampilkan gambar yang benar.
Sebagai contoh:
<span style="background-image:particular_ad.png; @media (max-width:300px){background-image:particular_ad_small.png;}"></span>
Apakah ini mungkin, atau ada yang punya saran lain?
html
css
media-queries
Penari
sumber
sumber
Jawaban:
Tidak,
@media
aturan dan kueri media tidak dapat ada dalam atribut gaya inline karena hanya dapat berisiproperty: value
deklarasi. Seperti yang dikatakan spek :Satu-satunya cara untuk menerapkan gaya ke elemen hanya di media tertentu adalah dengan aturan terpisah di stylesheet Anda, yang berarti Anda harus membuat pemilih untuk itu.
span
Pemilih dummy akan terlihat seperti ini, tetapi jika Anda menargetkan elemen yang sangat spesifik, Anda akan membutuhkan pemilih yang lebih spesifik:sumber
<style>
tag ke HTML Anda juga. Ini adalah pendekatan yang diperlukan untuk kasus di manabackground-image
secara dinamis ditarik dari database. Jelas di stylesheet eksternal bukan tempat yang tepat untuk itu.<script>
tag sering dilucuti oleh klien email ketika email diteruskan, sehingga orang cenderung menggunakan gaya in-line untuk email. Dan ini berarti tidak ada permintaan media. Saat ini saya sedang mencari praktik terbaik untuk situasi ini, tetapi hanya ramah tamah.em
s, bukan dalampx
. Dengan begitu itu akan tetap berfungsi dengan baik saat Anda memperbesar.Masalah
Tidak, Kueri Media tidak dapat digunakan dengan cara ini
Larutan
Tetapi jika Anda ingin memberikan perilaku tertentu yang dapat digunakan dengan cepat DAN responsif, Anda dapat menggunakan
style
markup dan bukan atributnya.ei
Lihat kode yang aktif di CodePen
Di Blog saya misalnya, saya menyuntikkan
<style>
markup<head>
tepat setelah<link>
deklarasi untuk CSS dan itu berisi konten textarea yang disediakan di samping textarea konten nyata untuk membuat kelas tambahan saat saya menulis artitle.Catatan:
scoped
atribut adalah bagian dari spesifikasi HTML5. Jika Anda tidak menggunakannya, validator akan menyalahkan Anda, tetapi browser saat ini tidak mendukung tujuan sebenarnya: mencakup konten<style>
hanya pada elemen induk dan elemen anak elemen itu. Scoped tidak wajib jika<style>
elemen dalam<head>
markup.UPDATE: Saya menyarankan untuk selalu menggunakan aturan dalam cara seluler terlebih dahulu sehingga kode sebelumnya harus:
sumber
background-image
saat halaman dimuat..on-the-fly-behavior
untuk digunakan di mana pun tetapi jika kata «diabaikan» oleh beberapa navigator tidak menjadi masalah. <style> dapat digunakan di <body> di semua navigator, ini berfungsi. Itu hanya persyaratan validasi w3c.scoped
merupakan solusi yang brilian, itu tidak didukung secara resmi oleh browser apa pun. Semoga itu akan segera berubah.<style>
, ataumedia queries
atau semua fitur HTML / CSS. Jadi sebenarnya masalahnya lebih besar dari itu. Saya hanya tahu Anda dapat membuat email yang ditampilkan dengan cara yang sama di semua Email Klien (termasuk Gmail) dengan hanya fitur HTML4 dan CSS2 (dengan beberapa peretasan Outlook), tetapi tidak ada Pertanyaan Media dalam hal ini.Gaya sebaris saat ini tidak dapat berisi apa pun selain deklarasi (
property: value
pasangan).Anda dapat menggunakan
style
elemen denganmedia
atribut yang sesuai dihead
bagian dokumen Anda.sumber
Ya, Anda dapat menulis kueri media dalam inline-css jika Anda menggunakan tag gambar. Untuk ukuran perangkat yang berbeda, Anda bisa mendapatkan gambar yang berbeda.
sumber
Jika Anda menggunakan Bootstrap Responsive Utilities atau alternatif serupa yang memungkinkan untuk menyembunyikan / menampilkan div tergantung pada break point, dimungkinkan untuk menggunakan beberapa elemen dan menunjukkan yang paling tepat. yaitu
sumber
Query Media dalam style-Attributes tidak dimungkinkan saat ini. Tetapi jika Anda harus mengatur ini secara dinamis melalui Javascript. Anda bisa memasukkan aturan itu melalui JS juga.
Ini seolah-olah gaya itu ada di stylesheet. Jadi waspadai kekhususan.
sumber
Hei aku baru saja menulisnya.
Sekarang Anda dapat menggunakan
<div style="color: red; @media (max-width: 200px) { color: green }">
atau lebih.Nikmati.
sumber
Saya mencoba menguji ini dan sepertinya tidak berhasil tetapi saya ingin tahu mengapa Apple menggunakannya. Saya baru saja menggunakan https://linkmaker.itunes.apple.com/us/ dan melihat dalam kode yang dihasilkannya jika Anda memilih tombol radio 'Tombol Besar', mereka menggunakan kueri media sebaris.
catatan: menambahkan jeda baris untuk keterbacaan, kode asli yang dihasilkan diperkecil
sumber
Anda dapat menggunakan gambar-set ()
sumber
ya, Anda bisa melakukannya dengan javascript di window.matchMedia
desktop untuk teks warna merah
tablet untuk teks warna hijau
sumber
Kueri media sebaris dimungkinkan dengan menggunakan sesuatu seperti Breakpoint untuk Sass
Posting blog ini berfungsi dengan baik menjelaskan bagaimana kueri media sebaris lebih mudah dikelola daripada blok terpisah: Tidak Ada Breakpoint
Terkait dengan kueri media inline adalah gagasan "kueri elemen", beberapa bacaan yang menarik adalah:
sumber
jika Anda menambahkan aturan ke file print.css Anda tidak harus menggunakan @ media.
Saya tidak menyertakannya di smarty foreach yang saya gunakan untuk memberikan beberapa elemen warna latar belakang.
sumber