एक iframe उत्तरदायी बना रहा है


144

मैं इस स्टैकओवरफ़्लो पोस्ट को पढ़ रहा था जिसका शीर्षक था "क्या आप आईफ़्रैम को उत्तरदायी बना सकते हैं?", और टिप्पणियों / उत्तरों में से एक ने मुझे इस jfiddle के लिए प्रेरित किया

लेकिन जब मैंने अपनी आवश्यकताओं को पूरा करने के लिए HTML और CSS को लागू करने की कोशिश की, तो मेरे पास समान परिणाम / सफलता नहीं थी। मैंने अपना खुद का JS Fiddle बनाया ताकि मैं आपको दिखा सकूं कि यह मेरे लिए कैसे काम नहीं करता है। मुझे यकीन है कि इसका उपयोग करने वाले iFrame के प्रकार के साथ कुछ करना है (उदाहरण के लिए, उत्पाद छवियों को बहुत अधिक या कुछ महत्वपूर्ण होना चाहिए?)

मेरी मुख्य चिंता यह है कि जब मेरे ब्लॉग के पाठक अपने iPhone पर मेरे ब्लॉग पर आते हैं, तो मैं नहीं चाहता कि सब कुछ x चौड़ाई पर हो (मेरी सभी सामग्री के लिए 100%) और फिर iFrame दुर्व्यवहार करता है और एकमात्र तत्व व्यापक है (और इसलिए चिपक जाता है) अन्य सभी सामग्री से बाहर है - अगर यह समझ में आता है ??)

वैसे भी, क्या किसी को पता है कि यह काम क्यों नहीं कर रहा है? धन्यवाद।

यहाँ MY JSFIDDLE का HTML और CSS है (यदि आप लिंक पर क्लिक नहीं करना चाहते हैं):

<div class="wrapper">
  <div class="h_iframe">
    <!-- a transparent image is preferable -->
    <img class="ratio" src="http://www.brightontheday.com/wp-content/uploads/2013/07/placeholder300.png" />
    <iframe frameborder='0' height='465px' width='470px' scrolling='no' src='http://currentlyobsessed.me/api/v1/get_widget?wid=30&blog=Brighton+The+Day&widgetid=38585'
      frameborder="0" allowfullscreen></iframe>
  </div>
</div>

और यहाँ सीएसएस के साथ है:

.wrapper {
  width: 100%;
  height: 100%;
  margin: 0 auto;
  background: #ffffff;
}

.h_iframe {
  position: relative;
}

.h_iframe .ratio {
  display: block;
  width: 100%;
  height: auto;
}

.h_iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

6
Iframe ही ('बॉक्स') उत्तरदायी हो सकता है। लेकिन iframe के अंदर सब कुछ एक अलग पेज है, और इसलिए आपके CSS या JS के डोमेन में नहीं है।
डीए।

आप उस पृष्ठ के बीच संचार के लिए ईएक्सएक्सडीएम का उपयोग कर सकते हैं जहां आई-फ्रेम एम्बेडेड है और सर्वर पर दस्तावेज आईफ्रेम इंगित कर रहा है।
जॉन स्मिथ

1
मैं शुद्ध css पसंद करता हूँ: stackoverflow.com/a/26194041/274502
cregox

जवाबों:


107

मैं आपके लिए अतुल्य गायन कैट समाधान प्रस्तुत करता हूं =)

.wrapper {
    position: relative;
    padding-bottom: 56.25%; /* 16:9 */
    padding-top: 25px;
    height: 0;
}
.wrapper iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

jsField: http://jsfiddle.net/omarjuvera/8zkunqxy/2/
जैसे ही आप विंडो बार को आगे बढ़ाते हैं, आपको iframe को जिम्मेदारी से आकार बदलने के लिए दिखाई देगा


वैकल्पिक रूप से, आप आंतरिक अनुपात तकनीक का भी उपयोग कर सकते हैं - यह ऊपर दिए गए एक ही समाधान का एक वैकल्पिक विकल्प है (टमाटर, टमाटर)

.iframe-container {
  overflow: hidden;
  padding-top: 56.25%;
  position: relative;
} 

.iframe-container iframe {
  position: absolute;
  top: 0;
  left: 0;
  border: 0;
  width: 100%;
  height: 100%;
}

4
: इस लेख और अधिक विस्तार में इस तकनीक समझा Seealso smashingmagazine.com/2014/02/...
थॉमस Tempelmann

केवल youtube iframes के लिए काम करता है। इसे देखें: jsfiddle.net/1bd8qw76
csandreas1

2
यह तकनीक सभी iframes के लिए काम करेगी, ट्रिक है, iframe में कंटेंट के साथ-साथ इस पर और अधिक उत्तरदायी होने की आवश्यकता होगी: benmarshall.me/responsive-iframes
Ben Marshall

68

इस कोड का उपयोग करके इसे उत्तरदायी बनाने का प्रयास करें

iframe, object, embed {
    max-width: 100%;
}

37
आप इस कोड के साथ कंटेनर की ऊंचाई समायोजित नहीं कर रहे हैं।
रेगी

46

मुझे डेव रूपर्ट / क्रिस कॉयर से एक समाधान मिला। हालाँकि, मैं स्क्रॉल को उपलब्ध करना चाहता था इसलिए मैं इस पर आया:

// HTML

<div class="myIframe"> 
   <iframe> </iframe> 
</div>

// सीएसएस

.myIframe {
     position: relative;
     padding-bottom: 65.25%;
     padding-top: 30px;
     height: 0;
     overflow: auto; 
     -webkit-overflow-scrolling:touch; //<<--- THIS IS THE KEY 
     border: solid black 1px;
} 
.myIframe iframe {
     position: absolute;
     top: 0;
     left: 0;
     width: 100%;
     height: 100%;
}

2
मेरे लिए भविष्य के नोट यदि सामग्री पैडिंग-तल सामग्री चौड़ाई का अनुपात है, तो 800x600% 75, 800x536% 67 है
nerkn

1
यह एक अच्छा प्रारंभिक बिंदु है जो कि सरफि और सभी उपकरणों के लिए आईफ्रेम स्क्रॉल बनाता है। हालांकि बहुत दुख की बात है ....
klewis

यह वही है जो मुझे iframe को स्क्रॉल करने की अनुमति देने की आवश्यकता थी, क्योंकि यह 5000px से अधिक लंबा था। अन्य कोड ने लंबे iFrame को नीचे दी गई सामग्री को ओवरलैप करने के लिए मजबूर किया।
कलम

16: 9 के लिए, पैडिंग-बॉटम 56.25% होना चाहिए
सेर्गेई स्काइलर

17

आप इस साइट http://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php पर इस ट्रिक का उपयोग कर सकते हैं ।

यह बहुत उपयोगी और समझने में आसान है। बस आपको बनाने की जरूरत है

<div class="videoWrapper">
    <!-- Copy & Pasted from YouTube -->
    <iframe width="560" height="349" src="http://www.youtube.com/embed/n_dZNLr2cME?rel=0&hd=1" frameborder="0" allowfullscreen></iframe>
</div>

.videoWrapper {
    position: relative;
    padding-bottom: 56.25%; /* 16:9 */
    padding-top: 25px;
    height: 0;
}
.videoWrapper iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

यहाँ प्रदर्शन के लिए आपका संपादित js fiddle है।


10

इस समाधान की जाँच करें ... मेरे लिए काम करता है >> https://jsfiddle.net/y49jpdns/

<html lang="en" class="no-js">
   <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1.0">
      <style>
      html body {width: 100%;height: 100%;padding: 0px;margin: 0px;overflow: hidden;font-family: arial;font-size: 10px;color: #6e6e6e;background-color: #000;} #preview-frame {width: 100%;background-color: #fff;}</style>
      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
      <script>
         var calcHeight = function() {
           $('#preview-frame').height($(window).height());
         }

         $(document).ready(function() {
           calcHeight();
         }); 

         $(window).resize(function() {
           calcHeight();
         }).load(function() {
           calcHeight();
         });
      </script>
   </head>
   <body>
      <iframe id="preview-frame" src="http://leowebguy.com/" name="preview-frame" frameborder="0" noresize="noresize">
      </iframe>
   </body>
</html>

मैंने आपकी फ़ेल्ड को अपडेट किया है क्योंकि यहाँ और वहाँ कुछ गलत टुकड़े थे। यह समान है, और यह बिट्स को भ्रमित किए बिना समान काम करता है। jsfiddle.net/6NSX3/263
टेक्नो.शमन

IOS ऊंचाई की सही गणना नहीं करता है, यह नेविगेशन बार को ध्यान में रखता है। इसके अलावा आईओएस पर आईफ्रेम स्क्रॉल करने योग्य नहीं है।
टाइन कोलोनी


6

DA सही है। अपने स्वयं के बेला में, iframe वास्तव में उत्तरदायी है। आप iframe बॉक्स-आकार की जाँच करके फ़ायरबग में सत्यापित कर सकते हैं। लेकिन अंदर के कुछ तत्व iframe उत्तरदायी नहीं हैं, इसलिए वे विंडो के आकार के छोटे होने पर "स्टिक आउट" करते हैं। उदाहरण के लिए, div#products-post-wrapperचौड़ाई 8800px है।


5

iFrames एक छोटी सीएसएस तकनीक के साथ उनके पहलू अनुपात को रखते हुए पूरी तरह से उत्तरदायी हो सकता है जिसे आंतरिक अनुपात तकनीक कहा जाता है । मैंने इस प्रश्न को विशेष रूप से संबोधित करते हुए एक ब्लॉग पोस्ट लिखी: https://benmarshall.me/responsive-iframes/

यह सार है:

.intrinsic-container {
  position: relative;
  height: 0;
  overflow: hidden;
}


/* 16x9 Aspect Ratio */

.intrinsic-container-16x9 {
  padding-bottom: 56.25%;
}


/* 4x3 Aspect Ratio */

.intrinsic-container-4x3 {
  padding-bottom: 75%;
}

.intrinsic-container iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
<div class="intrinsic-container intrinsic-container-16x9">
  <iframe src="//www.youtube.com/embed/KMYrIi_Mt8A" allowfullscreen></iframe>
</div>

पूरी तरह से संवेदनशील!


3

iframes उत्तरदायी नहीं हो सकते। आप iframe कंटेनर को उत्तरदायी बना सकते हैं, लेकिन यह प्रदर्शित होने वाली सामग्री नहीं है क्योंकि यह एक वेबपृष्ठ है, जिसकी अपनी ऊँचाई और चौड़ाई है।

उदाहरण फ़िडल लिंक काम करता है क्योंकि यह एक एम्बेडेड यूट्यूब वीडियो लिंक प्रदर्शित कर रहा है जिसमें एक आकार घोषित नहीं है।


यह भ्रामक है। उदाहरण fiddle लिंक तब काम करता है जब youtube iframe की चौड़ाई और ऊँचाई निर्दिष्ट की जाती है।
फिलिप्पे Phil

14
मैं निराश हूं इसलिए यह बहुत ही कठोर है। वह जो संदेश दे रहा है, वह महत्वपूर्ण है; कि iFrames उत्तरदायी बनाने के लिए खतरनाक हैं क्योंकि आप स्रोत की जवाबदेही की कगार पर हैं। हाँ, Youtube इसका अपवाद है। लेकिन उनकी बात अभी भी मान्य है।
मैटविथोस

3

सीएसएस के साथ सरल:

iframe{
width: 100%;
max-width: 800px /*this can be anything you wish, to show, as default size*/
}

कृपया ध्यान दें : लेकिन यह सामग्री को इसके प्रति संवेदनशील नहीं बनाएगा!

दूसरा संस्करण:: उनके आंतरिक सामग्री के आधार पर, दो प्रकार के उत्तरदायी आइफ्रेम हैं:

एक है कि जब iframe के अंदर केवल एक वीडियो या एक छवि या कई लंबवत स्थित हैं, जिसके लिए CSS कोड के ऊपर की दो पंक्तियाँ लगभग पूरी तरह से पर्याप्त हैं, और पहलू अनुपात का अर्थ है ...

और दूसरा है:

संपर्क / पंजीकरण प्रकार की सामग्री , जहां पहलू अनुपात हमें नहीं रखना है, लेकिन स्क्रॉलबार को प्रदर्शित होने से रोकने के लिए, और कंटेनर के नीचे बहने वाली सामग्री। मोबाइल पर आपको स्क्रॉलबार दिखाई नहीं देता है, आप केवल तब तक स्क्रॉल करते हैं जब तक आपको सामग्री (iframe) नहीं दिखाई देती। बेशक, आप इसे कम से कम किसी प्रकार का heightदेते हैं, सामग्री की ऊँचाई को एक संकीर्ण स्क्रीन पर होने वाली ऊर्ध्वाधर जगह के अनुकूल बनाने के लिए - उदाहरण के लिए, मीडिया के प्रश्नों के साथ, जैसे:

@media (max-width: 640px){
iframe{
height: 1200px /*whatever you need, to make the scrollbar hide on testing, and the content of the iframe reveal (on mobile/phone or other target devices) */
}
}
@media (max-width: 420px){
iframe{
height: 1600px /*and so on until and as needed */
}
}

1
यह सरल और भयानक है
वैशाली कपाड़िया

यह इस्प्रैम के आकार के अनुसार पहलू अनुपात को बनाए नहीं रखता है, अर्थात ऊँचाई वही रहती है जो चौड़ाई नहीं है।
रैन

@ आर्यन मैंने अपना जवाब अपडेट कर दिया है। मैं आंशिक रूप से आपके साथ सहमत हूँ, btw।
सांडोर जुबोली

2

मैंने देखा कि leebebdev की पोस्ट मेरे अंत में काम करती दिख रही थी, हालाँकि, इसने साइट के दो तत्वों को खटखटाया, जिन्हें मैं बनाने की कोशिश कर रहा हूँ: स्क्रॉलिंग और पाद।

स्क्रॉल मैं वापस scrolling="yes" iframe एम्बेड कोड को जोड़कर मिला ।

मुझे यकीन नहीं है कि जवाबदेही की वजह से पाद अपने आप खटखटाया जा सकता है या नहीं, लेकिन उम्मीद है कि कोई और उस जवाब को जानता होगा।


2

पिक्सेल में निर्दिष्ट iframe ऊंचाई और चौड़ाई निकालें और प्रतिशत का उपयोग करें

iframe{  max-width: 100%;}

1
लेकिन, यह सामग्री को उत्तरदायी नहीं बनाता था।
वीर

1
<div class="wrap>
    <iframe src="../path"></iframe>
</div>

.wrap { 
    overflow: auto;
}

iframe, object, embed {
    min-height: 100%;
    min-width: 100%;
    overflow: auto;
}


1
शुरू करना

ब्राउज़र सुरक्षा बाधाओं के कारण, आपको जावास्क्रिप्ट फ़ाइल को "मूल" पृष्ठ में शामिल करना होगा, साथ ही पृष्ठ को एक iframe ("बच्चा") के माध्यम से एम्बेड किया जाना चाहिए।

वर्तमान संस्करण में, मूल पृष्ठ में jQuery का नवीनतम संस्करण शामिल होना चाहिए। चाइल्ड पेज की कार्यक्षमता के लिए jQuery पर कोई निर्भरता नहीं है। भविष्य के संस्करणों में, हम माता-पिता के लिए भी jQuery पर निर्भरता को दूर करना चाहेंगे।

नोट: MakeResponsive () फ़ंक्शन कॉल में "xdomain" पैरामीटर वैकल्पिक है।

कोड नमूना <!-- Activate responsiveness in the "child" page --><script src="/js/jquery.responsiveiframe.js"></script><script> var ri = responsiveIframe(); ri.allowResponsiveEmbedding();</script> <!-- Corresponding code in the "parent" page --><script src="/js/jquery.js"></script><script src="/js/jquery.responsiveiframe.js"></script><script> ;(function($){ $(function(){ $('#myIframeID').responsiveIframe({ xdomain: '*'}); }); })(jQuery);</script>

0

निम्नलिखित मार्कअप के साथ:

<div class="video"><iframe src="https://www.youtube.com/embed/StTqXEQ2l-Y"></iframe></div>

निम्नलिखित सीएसएस वीडियो को पूर्ण-चौड़ाई और 16: 9 बनाता है:

.video {
  position: relative;
  padding-bottom: 56.25%; /* 16:9 */
}

.video > .video__iframe {
    position: absolute;
    width: 100%;
    height: 100%;
    border: none;
  }
}

0

मैं इस विषय के बारे में अधिक खोज रहा हूं और अंत में एक अच्छा जवाब पा सकता हूं। आप इस तरह की कोशिश कर सकते हैं :

.wrapper {
width: 50%;
}
.container {
height: 0;
width: 100%;
padding-bottom: 50%;
overflow: hidden;
position: relative;
}
.container iframe {
top: 0;
left: 0;
width: 100%;
height: 100%;
position: absolute;
}
<div class="wrapper">
  <div class="container">
    <iframe src="there is path of your iframe"></iframe>
   </div>
</div>


0

सभी डिवाइस स्क्रीन के साथ "iframe" उत्तरदायी और फिट बनाने के लिए सबसे अच्छा समाधान, बस इस कोड को लागू करें (गेम साइटों के साथ काम करना):

iframe::-webkit-scrollbar{display:none}
.iframe{background:#fff;overflow:hidden}
.iframe iframe{width:100%;height:540px;border:0;display:block}
.iframe-content{position:absolute;width:100%;height:540px;overflow:auto;top:0;bottom:0;-webkit-overflow-scrolling:touch}

@media screen and (max-width:992px){.iframe iframe{height:720px}}
@media screen and (max-width:768px){.iframe iframe{height:720px}}
@media screen and (max-width:720px){.iframe iframe{height:720px}}
@media screen and (max-width:479px){.iframe iframe{height:480px}}
@media screen and (max-height:400px){.iframe iframe{height:360px}}

यदि आप सभी उपकरणों के साथ एक उत्तरदायी गेम कंटेनर के लिए उपयुक्त हैं, तो यह कोड लागू करें जो उन्नत CSS @media क्वेरीज़ का उपयोग करता है।


नमस्ते वहाँ, iframe html कोड सरल है बस इस तरह दिखता है:
मिज़ो गेम्स

<div class = "iframe"> <iframe src = ""> </ iframe> </ div>
Mizo Games

वास्तव में मैं इसे अपनी वेबसाइट के साथ उपयोग करता हूं: Al3abMizo गेम्स, और आप कभी भी किसी भी डिवाइस पर कोई भी गेम खेलकर इसे आज़मा सकते हैं।
मिजो गेम्स

0

उन स्थितियों के लिए पूरी तरह उत्तरदायी iFrame जहां पहलू अनुपात अज्ञात है और iFrame में सामग्री पूरी तरह से उत्तरदायी है।

उपरोक्त किसी भी समाधान ने मेरी ज़रूरत के लिए काम नहीं किया, जो कि एक पूरी तरह से उत्तरदायी iFrame बनाने के लिए था जिसके अंदर पूरी तरह से उत्तरदायी गतिशील सामग्री थी। किसी भी तरह का पहलू अनुपात बनाए रखना कोई विकल्प नहीं था।

  1. अपने नेविगेशन बार और किसी भी सामग्री की ऊंचाई प्राप्त करें या iFrame को कम करें। मेरे मामले में मुझे केवल शीर्ष नावबार को घटाने की आवश्यकता थी और मैं चाहता था कि iFrame स्क्रीन के निचले भाग में सभी तरह से भर जाए।

कोड:

function getWindowHeight() {
        console.log('Get Window Height Called')
        var currentWindowHeight = $(window).height()

        var iFrame = document.getElementById("myframe")
        var frameHeight = currentWindowHeight - 95

        iFrame.height = frameHeight; 

    }
//Timeout to prevent function from repeatedly firing
    var doit;
    window.onresize = function(){
      clearTimeout(doit);
      doit = setTimeout(resizedw, 100);
    };

मैंने एक टाइमआउट भी बनाया ताकि रिसाइज़ पर फ़ंक्शन को एक मिलियन बार नहीं कहा जा सके।


0
For Example :

<div class="intrinsic-container">
  <iframe src="//www.youtube.com/embed/KMYrIi_Mt8A" allowfullscreen></iframe>
</div>

CSS 

.intrinsic-container {
  position: relative;
  height: 0;
  overflow: hidden;
}

/* 16x9 Aspect Ratio */
.intrinsic-container-16x9 {
  padding-bottom: 56.25%;
}

/* 4x3 Aspect Ratio */
.intrinsic-container-4x3 {
  padding-bottom: 75%;
}

.intrinsic-container iframe {
  position: absolute;
  top:0;
  left: 0;
  width: 100%;
  height: 100%;
}

0

यह पूरा कोड देखें। आप नीचे दिए गए कोड की तरह प्रतिशत में कंटेनरों का उपयोग कर सकते हैं:

<html>
<head>
<title>How to make Iframe Responsive</title>
<style>
html,body        {height:100%;}
.wrapper         {width:80%;height:100%;margin:0 auto;background:#CCC}
.h_iframe        {position:relative;}
.h_iframe .ratio {display:block;width:100%;height:auto;}
.h_iframe iframe {position:absolute;top:0;left:0;width:100%; height:100%;}
</style>
</head>
<body>
<div class="wrapper">
<div class="h_iframe">
<img class="ratio" src=""/>
<iframe src="http://www.sanwebcorner.com" frameborder="0" allowfullscreen></iframe>
</div>
<p>Please scale the "result" window to notice the effect.</p>
</div>
</body>
</html>

इस डेमो पेज को देखें।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.