প্রতিক্রিয়ার প্রস্থে একটি YouTube ভিডিও সঙ্কুচিত করুন


125

আমার ওয়েবসাইটে একটি ইউটিউব ভিডিও এম্বেড রয়েছে এবং আমি যখন স্ক্রিনটি ট্যাবলেট বা ফোনের আকারে সঙ্কুচিত করি তখন এটি প্রায় 560px প্রস্থে সঙ্কুচিত হয়ে যায়। ইউটিউব ভিডিওগুলির জন্য এটি কি এই স্ট্যান্ডার্ড বা এমন কিছু আছে যা কোডটি আরও ছোট করার জন্য আমি যুক্ত করতে পারি?


1
আপনার প্রতিক্রিয়াশীল এম্বেড কোড উত্পন্ন করার জন্য ভাল সংস্থান: এম্বেডাসনসিভলি.কম
ক্লার্ক

উত্তর:


268

আপনি সিএসএসের সাথে ইউটিউব ভিডিওগুলিকে প্রতিক্রিয়াশীল করতে পারেন। "ভিডিওর্যাপার" শ্রেণীর সাথে ডিভের মধ্যে iframe মোড়ানো এবং নিম্নলিখিত স্টাইলগুলি প্রয়োগ করুন:

.videowrapper {
    float: none;
    clear: both;
    width: 100%;
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 25px;
    height: 0;
}
.videowrapper iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

.Videowrapper ডিভটি একটি প্রতিক্রিয়াশীল উপাদানের ভিতরে থাকা উচিত। ভিডিওটি ভেঙে ফেলার জন্য .videowrapper এর প্যাডিং প্রয়োজনীয়। আপনার লেআউটের উপর ভিত্তি করে আপনাকে নম্বরগুলি টুইট করতে হতে পারে।


ধন্যবাদ! আমাকে একটি প্রস্থ যোগ করতে হয়েছিল: আমার # কনটেন্টে 100% এটি একটি প্রতিক্রিয়াশীল উপাদান ছিল তা নিশ্চিত করতে।
ম্যাটএম


1
আমার ক্ষেত্রে এই সিএসএস প্রয়োগ করার সময় ভিডিওটি উপস্থিত হয় না।
বাসজিরো

5
সংখ্যার বিস্তারিত ব্যাখ্যা 56.25%এবং alistapart.com/article/creating-intrinsic-ratios-video-25px এ পড়তে পারেন : একটি 16: 9 অনুপাত তৈরি করতে, আমাদের অবশ্যই 9 দ্বারা 16 (0.5625 বা 56.25%) বিভক্ত করতে হবে। : ভাঙা বাক্স মডেলটি নিয়ে সমস্যাগুলি এড়াতে (আইই 5 বা আইক 6 কুইর্কস মোডে) ক্রোমের জন্য জায়গা তৈরি করার জন্য আমরা উচ্চতার চেয়ে প্যাডিং-টপ ব্যবহার করি। padding-bottom: 56.25%padding-top: 25px
টুন

আপনি এখানে ইউটিউব ইফ্রামের উদাহরণটি দেখতে পারেন এখানে @ http://alistapart.com/d/creating-intrinsic-ratios-for-video/example4.html
Vignesh Chinnaiyan

26

আপনি যদি বুটস্ট্র্যাপ ব্যবহার করছেন তবে আপনি একটি প্রতিক্রিয়াশীল এম্বেডও ব্যবহার করতে পারেন। ভিডিও (গুলি) কে প্রতিক্রিয়াশীল করে তুলতে এটি স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয় হবে।

http://getbootstrap.com/components/#responsive-embed

নীচে কিছু উদাহরণ কোড রয়েছে।

<!-- 16:9 aspect ratio -->
<div class="embed-responsive embed-responsive-16by9">
  <iframe class="embed-responsive-item" src="..."></iframe>
</div>

<!-- 4:3 aspect ratio -->
<div class="embed-responsive embed-responsive-4by3">
  <iframe class="embed-responsive-item" src="..."></iframe>
</div>

1
এটি যুক্ত করা দরকার যে ভিডিওর পুরো প্রশস্ততা এড়াতে আপনার কিছু করল-এসএম ... ইত্যাদির ভিতরে sertোকানো উচিত।
ভোর :

এটি আশ্চর্যজনক
জাস্টার

এছাড়াও, ভিডিওটি কেন্দ্রিক রাখতে অফসেট ব্যবহার করতে ভুলবেন না। উদাহরণস্বরূপ:col-sm-8 col-sm-offset-2
নিকোলাস

9

আমি আমার প্রতিক্রিয়াশীল ইউটিউব ভিডিওগুলির জন্য এখানে স্বীকৃত উত্তরে সিএসএস ব্যবহার করেছি - অগাস্ট ২০১৫ এর শুরুতে ইউটিউব তাদের সিস্টেম আপডেট না করা অবধি দুর্দান্ত কাজ করেছে YouTube আমাদের সমস্ত ভিডিও লেটারবক্স। উপরে এবং নীচে জুড়ে কালো ব্যান্ড।

আমি মাপগুলির সাথে চারদিকে টিক্কি দিয়েছি এবং উপরের প্যাডিং থেকে মুক্তি পেয়ে নীচের প্যাডিংটি পরিবর্তন করেছি 56.45%। দেখতে দেখতে ভাল লাগছে।

.videowrapper {
    position: relative;
    padding-bottom: 56.45%;
    height: 0;
}

1
এটির উপর একটি আপডেট - কখনও কখনও ভিডিওগুলিতে ব্যবহৃত পুরানো স্থানধারক চিত্রগুলি দেখতে দেখতে এমনভাবে দেখা যায় যে উপরে এখনও নীচে কালো ব্যান্ডগুলি রয়েছে তবে ভিডিওগুলি যখন আপনি আসলে সেগুলি খেলতে শুরু করেন তখন এই নতুন সেটিংটি দিয়ে ভিডিওগুলি নিজেরাই ভাল দেখায়। গ্রার, ধন্যবাদ ইউটিউব
ম্যাকনব

1
ধন্যবাদ। প্যাডিং-ডাউনটি ব্যবহার করে: আমি যে ভিডিওটি ব্যবহার করছি তার জন্য 50% শীর্ষ এবং নীচের কালো বারগুলি থেকে মুক্তি পেয়েছে, যদিও মনে হচ্ছে যে থাম্বনেইল এবং ভিডিওটিতেই অনুপাতের অনুপাত রয়েছে ...
এমএসসি

8

সংশোধিত জাভাস্ক্রিপ্ট jQuery ব্যবহার করে শুধুমাত্র YouTube এবং Vimeo এর সমাধান।

// -- After the document is ready
$(function() {
  // Find all YouTube and Vimeo videos
  var $allVideos = $("iframe[src*='www.youtube.com'], iframe[src*='player.vimeo.com']");

  // Figure out and save aspect ratio for each video
  $allVideos.each(function() {
    $(this)
      .data('aspectRatio', this.height / this.width)
      // and remove the hard coded width/height
      .removeAttr('height')
      .removeAttr('width');
  });

  // When the window is resized
  $(window).resize(function() {
    // Resize all videos according to their own aspect ratio
    $allVideos.each(function() {
      var $el = $(this);
      // Get parent width of this video
      var newWidth = $el.parent().width();
      $el
        .width(newWidth)
        .height(newWidth * $el.data('aspectRatio'));
    });

  // Kick off one resize to fix all videos on page load
  }).resize();
});

কেবল এম্বেড সহ ব্যবহার করা সহজ:

<iframe width="16" height="9" src="https://www.youtube.com/embed/wH7k5CFp4hI" frameborder="0" allowfullscreen></iframe>

বা বুটস্ট্র্যাপের মতো প্রতিক্রিয়াশীল স্টাইল ফ্রেমওয়ার্ক সহ।

<div class="row">
  <div class="col-sm-6">
    Stroke Awareness
  <div class="col-sm-6>
    <iframe width="16" height="9" src="https://www.youtube.com/embed/wH7k5CFp4hI" frameborder="0" allowfullscreen></iframe>
  </div>
</div>
  • দিক অনুপাত সংরক্ষণ করতে iframe এর প্রস্থ এবং উচ্চতার উপর নির্ভর করে
  • প্রস্থ এবং উচ্চতার জন্য দিক অনুপাত ব্যবহার করতে পারে ( width="16" height="9")
  • আকার পরিবর্তন করার আগে ডকুমেন্ট প্রস্তুত না হওয়া পর্যন্ত অপেক্ষা করুন
  • *=স্ট্রিং শুরু করার পরিবর্তে jQuery সাবস্ট্রিং নির্বাচনকারী ব্যবহার করে^=
  • পূর্বনির্ধারিত উপাদানটির পরিবর্তে ভিডিও iframe পিতামাতার কাছ থেকে রেফারেন্স প্রস্থ পান
  • জাভাস্ক্রিপ্ট সমাধান
  • সিএসএস নেই
  • কোনও মোড়কের দরকার নেই

শুরুর পয়েন্টের জন্য ড্যাম্পাসকে ধন্যবাদ https://stackoverflow.com/a/33354009/1011746


পুরোপুরি কাজ করে! আপনাকে অনেক ধন্যবাদ :)
লরান ইভান্স

এটি সাহায্য করে। বিশেষত এমন ক্ষেত্রে যেখানে আপনার এইচটিএমএল উপাদানগুলির (কিন্তু জেএস) নিয়ন্ত্রণ নেই এবং কোনও ভিডিওরূপ সেট করতে পারবেন না। ধন্যবাদ.
কাই Noack

নোট করুন যে এই সমাধানটি একটি জাভাস্ক্রিপ্ট ফাংশনটির সাথে পুনরায় আকারের ইভেন্টটিকে আবদ্ধ করবে, যা আরও ইভেন্ট যুক্ত হওয়ার সাথে সাথে ব্রাউজারকে চাপ দিতে পারে। মনে রাখবেন যে সিএসএসকে প্রতিক্রিয়াশীল স্টাইলিং পরিচালনা করতে এবং পারফরম্যান্স বাড়াতে আপনি জাফাস্ক্রিপ্টটি একটি র‌্যাপার ডিভিতে আইফ্রেমে মোড়ানোর জন্য ব্যবহার করতে পারেন।
রেলগুন

আমি অনেক সমাধান চেষ্টা করেছি। ইউটিউব ভিডিওগুলিকে প্রতিক্রিয়াশীল করার জন্য এটি ইন্টারনেটে সেরা সমাধান।
ড্যান নিক

1

এটি পুরানো থ্রেড, তবে আমি https://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php এ নতুন উত্তর পেয়েছি I

পূর্ববর্তী সমাধানের সমস্যাটি হ'ল ভিডিও কোডের চারপাশে আপনার বিশেষ ডিভ থাকা দরকার যা বেশিরভাগ ব্যবহারের জন্য উপযুক্ত নয়। সুতরাং এখানে বিশেষ ডিভ ছাড়াই জাভাস্ক্রিপ্ট সমাধান রয়েছে।

// Find all YouTube videos - RESIZE YOUTUBE VIDEOS!!!
var $allVideos = $("iframe[src^='https://www.youtube.com']"),

// The element that is fluid width
$fluidEl = $("body");

// Figure out and save aspect ratio for each video
$allVideos.each(function() {

    $(this)
    .data('aspectRatio', this.height / this.width)

    // and remove the hard coded width/height
    .removeAttr('height')
    .removeAttr('width');

});

// When the window is resized
$(window).resize(function() {

    var newWidth = $fluidEl.width();

    // Resize all videos according to their own aspect ratio
    $allVideos.each(function() {

        var $el = $(this);
        $el
        .width(newWidth)
        .height(newWidth * $el.data('aspectRatio'));

    });

// Kick off one resize to fix all videos on page load
}).resize();

// END RESIZE VIDEOS

1

@ Magi182 এর সমাধানটি শক্ত, তবে এটিতে সর্বোচ্চ প্রস্থ নির্ধারণ করার ক্ষমতা নেই। আমি মনে করি সর্বাধিক প্রস্থ 640px প্রয়োজন কারণ ইউটিউব থাম্বনেইল পিক্সেলটেড দেখায় other

দুটি মোড়কযুক্ত আমার সমাধানটি আমার জন্য কবজির মতো কাজ করে:

.videoWrapperOuter {
  max-width:640px; 
  margin-left:auto;
  margin-right:auto;
}
.videoWrapperInner {
  float: none;
  clear: both;
  width: 100%;
  position: relative;
  padding-bottom: 50%;
  padding-top: 25px;
  height: 0;
}
.videoWrapperInner iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
<div class="videoWrapperOuter">
  <div class="videoWrapperInner">
    <iframe src="//www.youtube.com/embed/C6-TWRn0k4I" 
      frameborder="0" allowfullscreen></iframe>
  </div>
</div>

আমি অভ্যন্তরীণ মোড়কের প্যাডিং-নীচে 50% তেও সেট করেছি, কারণ @ Magi182 এর 56% এর সাথে উপরে এবং নীচে একটি কালো বার উপস্থিত হয়েছিল।


এটি আমার জন্য একটি প্রতিক্রিয়াশীল ভিডিও এম্বেড করার চেষ্টা করার জন্য আরও ভাল কাজ করেছে, তবে একটি প্রস্থ (সর্বোচ্চ-প্রস্থ) নির্দিষ্ট করে।
yougotiger

1

পূর্ববর্তী উত্তরের ক্রেডিট সহ https://stackoverflow.com/a/36549068/7149454

সামঞ্জস্যপূর্ণ বুস্ট্র্যাপ করুন, আপনার ধারক প্রস্থকে অ্যাডাস্ট করুন (এই উদাহরণে 300px) এবং আপনি যেতে ভাল:

<div class="embed-responsive embed-responsive-16by9" style="height: 100 %; width: 300px; ">
<iframe class="embed-responsive-item" src="https://www.youtube.com/embed/LbLB0K-mXMU?start=1841" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0"></iframe>
</div>

0

এখানে সম্পূর্ণ সারাংশ দেখুন এবং এখানে লাইভ উদাহরণ দেখুন

#hero { width:100%;height:100%;background:url('{$img_ps_dir}cms/how-it-works/hero.jpg') no-repeat top center; }
.videoWrapper { position:relative;padding-bottom:56.25%;padding-top:25px;max-width:100%; }

<div id="hero">
    <div class="container">
        <div class="row-fluid">
            <script src="https://www.youtube.com/iframe_api"></script>
            <center>
            <div class="videoWrapper">
                 <div id="player"></div>
            </div>
            </center>
            <script>
            function onYouTubeIframeAPIReady() { 
                player = new YT.Player('player', {
                   videoId:'xxxxxxxxxxx',playerVars: {  controls:0,autoplay:0,disablekb:1,enablejsapi:1,iv_load_policy:3,modestbranding:1,showinfo:0,rel:0,theme:'light' }
                } );
                resizeHeroVideo();
             }
             </script>
        </div>
    </div>
</div>

var player = null;
$( document ).ready(function() {
    resizeHeroVideo();
} );

$(window).resize(function() {
    resizeHeroVideo();
});

function resizeHeroVideo() {
    var content = $('#hero');
    var contentH = viewportSize.getHeight();
    contentH -= 158;
    content.css('height',contentH);

    if(player != null) {
        var iframe = $('.videoWrapper iframe');
        var iframeH = contentH - 150;
        if (isMobile) {
            iframeH = 163; 
        }
        iframe.css('height',iframeH);
        var iframeW = iframeH/9 * 16;
        iframe.css('width',iframeW);
    }
}

ইউটিউব প্লেয়ার সম্পূর্ণরূপে লোড হওয়ার পরে (পৃষ্ঠায় লোড কাজ করে না) এবং ব্রাউজার উইন্ডোটিকে পুনরায় আকার দেওয়ার পরেই পুনরায় আকার হিরোভিডিও বলা হয়। এটি চলতে থাকলে, এটি iframe এর উচ্চতা এবং প্রস্থ গণনা করে এবং সঠিক দিক অনুপাত বজায় রাখার জন্য উপযুক্ত মান নির্ধারণ করে। উইন্ডোটি অনুভূমিকভাবে বা উলম্বভাবে পুনরায় আকার দেওয়া হোক কিনা এটি কাজ করে।


-1

ঠিক আছে, বড় সমাধানের মত দেখাচ্ছে।

কেন width: 100%;আপনার ইফ্রেমে সরাসরি যুক্ত করবেন না। ;)

সুতরাং আপনার কোডটি দেখতে এমন কিছু দেখাচ্ছে <iframe style="width: 100%;" ...></iframe>

এটি চেষ্টা করুন এটি আমার ক্ষেত্রে যেমন কাজ করেছে তেমন কাজ করবে।

উপভোগ করুন! :)


5
যেহেতু এটির জন্য উচ্চতার সঠিকভাবে আকার পরিবর্তন করা যায় না, এবং তাই নিয়ন্ত্রণ এবং কালো স্ট্রিপগুলি দেখায়, গৃহীত উত্তরটি আরও ভাল সমাধান
CᴴᵁᴮᴮʸNᴵᴺᴶᴬ

এম্বেড থাকা আইফ্রেমেস সহ প্রতিক্রিয়াশীল ভিডিও তৈরি করার এটি যেহেতু প্রথম দিক, তাই আমি বিশ্বাস করি যে এই সমাধানটি সঠিকভাবে প্রশ্নের উত্তর দিয়েছে। এটি একটি গ্রিড সিস্টেমের সাথে একত্রিত করুন এবং উচ্চতা হ'ল একমাত্র সমস্যা। => (ধারক প্রস্থ / 12) * 9 = উচ্চতা।
টিম ভার্মেলেন

-2

আমি নিম্নলিখিতটি হিসাবে সহজ সিএসএস দিয়ে এটি তৈরি করি

এইচটিএমএল কোড

<iframe id="vid" src="https://www.youtube.com/embed/RuD7Se9jMag" frameborder="0" allowfullscreen></iframe>

সিএসএস কোড

<style type="text/css">
#vid {

max-width: 100%;
height: auto;

}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.