Masalahnya adalah ketika Anda harus menggunakan IFrames untuk memasukkan konten ke situs web, maka di dunia web modern diharapkan bahwa IFrame juga akan responsif. Secara teori itu sederhana, hanya orang lain yang menggunakan <iframe width="100%"></iframe>
atau mengatur lebar CSS untuk iframe { width: 100%; }
namun dalam prakteknya tidak sesederhana itu, tetapi bisa jadi.
Jika iframe
konten sepenuhnya responsif dan dapat mengubah ukurannya sendiri tanpa bilah gulir internal, maka iOS Safari akan mengubah ukurannya iframe
tanpa masalah nyata.
Jika Anda mempertimbangkan kode berikut:
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9,10,11" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Iframe Isolation Test</title>
<style type="text/css" rel="stylesheet">
#Main {
padding: 10px;
}
</style>
</head>
<body>
<h1>Iframe Isolation Test 13.17</h1>
<div id="Main">
<iframe height="950" width="100%" src="Content.html"></iframe>
</div>
</body>
</html>
Dengan Content.html :
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9,10,11" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Iframe Isolation Test - Content</title>
<style type="text/css" rel="stylesheet">
#Main {
width: 100%;
background: #ccc;
}
</style>
</head>
<body>
<div id="Main">
<div id="ScrolledArea">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc malesuada purus quis commodo convallis. Fusce consectetur mauris eget purus tristique blandit. Nam nec volutpat augue. Aliquam sit amet augue vitae orci fermentum tempor sit amet gravida augue. Pellentesque convallis velit eu malesuada malesuada. Aliquam erat volutpat. Nam sollicitudin nulla nec neque viverra, non suscipit purus tincidunt. Aenean blandit nisi felis, sit amet ornare mi vestibulum ac. Praesent ultrices varius arcu quis fringilla. In vitae dui consequat, rutrum sapien ut, aliquam metus. Proin sit amet porta velit, suscipit dignissim arcu. Cras bibendum tellus eu facilisis sodales. Vestibulum posuere, magna ut iaculis consequat, tortor erat vulputate diam, ut pharetra sapien massa ut magna. Donec massa purus, pharetra sed pellentesque nec, posuere ut velit. Nam venenatis feugiat odio quis tristique.
</div>
</div>
</body>
</html>
Maka ini berfungsi tanpa masalah di iOS 7.1 Safari. Anda dapat mengubah antara lanskap dan potret tanpa masalah.
Namun dengan hanya mengubah Content.html CSS dengan menambahkan ini:
#ScrolledArea {
width: 100%;
overflow: scroll;
white-space: nowrap;
background: #ff0000;
}
Anda mendapatkan ini:
Seperti yang Anda lihat, meskipun konten Content.html sepenuhnya responsif ( div # ScrolledArea telah overflow: scroll
ditetapkan) dan lebar iframe adalah 100% iframe masih mengambil lebar penuh dari div # ScrolledArea seolah-olah tidak ada luapan yang melimpah. Demo
Dalam kasus seperti ini, apakah iframe
konten memiliki area gulir di atasnya, pertanyaannya menjadi, bagaimana mendapatkan iframe
responsif, ketika konten iframe memiliki area gulir secara horizontal? Masalahnya di sini bukan pada kenyataan bahwa Content.html tidak responsif, tetapi pada kenyataan bahwa Safari iOS hanya mengubah ukuran iframe sehingga div#ScrolledArea
akan sepenuhnya terlihat.
white-space: nowrap
gaya?white-space: nowrap
itu sendiri bukanlah masalahnya. Saya hanya menggunakannya untuk mendapatkan lebar ekstrimdiv#ScrolledArea
. Masalahnya muncul ketika konten IFrame memiliki area yang dapat digulir secara horizontal di dalamnya. Jika itu yang terjadi, iOS Safari mengabaikan pengaturan lebar Anda dan menunjukkan konten lubang dan memecah respons situs.Jawaban:
Solusi untuk masalah ini sebenarnya cukup sederhana dan ada dua cara untuk mengatasinya. Jika Anda memiliki kendali atas Content.html maka cukup ubah
div#ScrolledArea
lebar CSS menjadi:Pada dasarnya ide di sini sederhana, Anda mengatur
width
ke sesuatu yang lebih kecil dari viewport (lebar iframe dalam kasus ini) dan kemudian menimpanya denganmin-width: 100%
untuk memungkinkanwidth: 100%
Safari iOS mana yang secara default ditimpa. Itu*width: 100%;
ada sehingga kode akan tetap kompatibel IE6, tetapi jika Anda tidak peduli untuk IE6 Anda dapat menghilangkannya. DemoSeperti yang Anda lihat sekarang,
div#ScrolledArea
lebarnya sebenarnya 100% danoverflow: scroll;
bisa melakukan itu dan menyembunyikan konten yang meluap. Jika Anda memiliki akses ke konten iframe, maka ini lebih disukai.Namun jika Anda tidak memiliki akses ke konten iframe (untuk alasan apa pun) maka Anda sebenarnya dapat menggunakan teknik yang sama pada iframe itu sendiri. Cukup gunakan CSS yang sama di iframe:
Namun, ada satu batasan dengan ini, Anda harus mematikan scrollbar dengan
scrolling="no"
iframe agar ini berfungsi:Jika bilah gulir diizinkan, maka ini tidak akan berfungsi pada iframe lagi. Yang mengatakan, jika Anda mengubah Content.html, maka Anda dapat mempertahankan gulir di iframe. Demo
sumber
!important
kewidth
atribut untuk mendapatkan iframe responsif-web-desain siap pada iPhone 4 dengan iOS 7width
telah ditetapkan sebelumnya dengan!important
atau CSS prioritas tinggi menimpa itu. Dalam kasus terisolasi di iPhone 4 iOS7 itu tidak diperlukan.scrolling="yes"
sebaliknya, tidak ada cara untuk memperbaikinya, untuk memperbaiki untuk bekerja pada IFRAME saja Anda harus memilikiscrolling="no"
pada IFRAMEMasalahnya, tampaknya, Mobile Safari akan menolak untuk mematuhi lebar iFrame Anda jika dokumen yang dikandungnya lebih luas dari yang Anda tentukan. Contoh:
http://jsbin.com/hapituto/1
Pada browser desktop, Anda akan melihat iFrame dan Div keduanya diatur ke 300px. Konten lebih luas sehingga Anda dapat menggulir iFrame.
Namun, pada safari seluler, Anda akan melihat bahwa iFrame diperluas secara otomatis ke lebar konten.
Dugaan saya adalah bahwa ini adalah solusi untuk masalah lama dengan menggulir konten di dalam halaman. Di masa lalu, jika Anda memiliki iframe gulir besar pada perangkat sentuh, Anda akan 'terjebak' di iframe karena itu akan menggulir bukannya halaman itu sendiri. Tampaknya Apple telah memutuskan bahwa perilaku default sebuah iFrame adalah 'no scroll' dan diperluas untuk mencegahnya.
Salah satu opsi mungkin adalah solusi ini. Alih-alih mengasumsikan iFrame akan menggulir, letakkan iframe dalam DIV yang Anda kendalikan dan biarkan gulir itu.
contoh: http://jsbin.com/zakedaja/1
Markup contoh:
Di safari seluler, kini Anda dapat menggulir konten iFrame yang sekarang diperluas sepenuhnya melalui div yang berisi itu.
Tangkapan: Ini terlihat sangat jelek di browser desktop, karena sekarang Anda memiliki scrollbar ganda. Jadi, Anda mungkin harus melakukan beberapa deteksi browser dengan JS untuk menyiasatinya.
sumber
div#ScrolledArea
(berwarna hijau) dalam contoh saya. Saya hanya salah baca sebelumnya. Tapi iframe tidak boleh bergulir hanya mengubah ukurannya sendiri berdasarkan elemen wadah yaituwidth: 100%;
Saya membutuhkan solusi lintas-browser. Persyaratan adalah:
Membangun apa yang saya pelajari dari @Idra tentang scrolling = "no" di iOS dan posting ini tentang pemasangan konten iFrame ke layar di iOS inilah yang akhirnya saya dapatkan. Semoga ini bisa membantu seseorang =)
HTML
CSS
JS
sumber
Masalah dengan semua solusi ini adalah bahwa ketinggian yang
iframe
tidak pernah benar-benar berubah.Ini berarti Anda tidak akan dapat memusatkan elemen di dalam
iframe
menggunakan Javascriptposition:fixed;
,, atauposition:absolute;
karenaiframe
itu sendiri tidak pernah menggulir.Solusi saya yang dirinci di sini adalah untuk membungkus semua konten iframe di dalam
div
menggunakan CSS ini:Dengan cara ini Safari meyakini konten tidak memiliki ketinggian dan memungkinkan Anda menetapkan ketinggian dengan
iframe
benar. Ini juga memungkinkan Anda untuk memposisikan elemen dengan cara apa pun yang Anda inginkan.Anda dapat melihat demo cepat dan kotor di sini.
sumber
iframe
, tetapi dalam kasus saya, saya lakukan. Bersulang!Masalah ini juga ada di iOS Chrome.
Saya melihat-lihat semua solusi di atas, kebanyakan sangat hacky.
Jika Anda tidak memerlukan dukungan untuk browser lama, cukup atur lebar iframe ke 100vw;
Catatan: Periksa dukungan untuk unit viewport https://caniuse.com/#feat=viewport-units
sumber
Saya bekerja dengan ionic2 dan konfigurasi sistem seperti di bawah ini-
Bagi saya masalah ini diselesaikan dengan kode ini -
untuk tag iframe html -
Lihat css dari
Posisi properti memainkan peran penting di sini dalam kasus saya.
posisi: relatif;
Ini dapat membantu Anda juga !!!
sumber
Solusi hanya CSS
HTML
CSS
DEMO
Demo lain di sini dengan halaman HTML di iframe
sumber
Saya memiliki masalah dengan lebar di panel konten yang membuat bilah gulir horizontal untuk iframe. Ternyata gambar memegang lebar lebih lebar dari yang diharapkan. Saya bisa menyelesaikannya dengan mengatur semua gambar css max-width menjadi persen.
sumber
sebenarnya bagi saya hanya bekerja di ios menonaktifkan scroll
<iframe src="//www.youraddress.com/" scrolling="no"></iframe>
dan memperlakukan OS melalui skrip.
sumber
Bagi saya solusi CSS tidak berfungsi. Tetapi mengatur lebar secara pemrograman berfungsi. Pada beban iframe atur lebar secara terprogram:
sumber