目錄
但是……縱橫比、舊內容、非技術用戶等等
這就是FitVids.js 的由來
改為使用純JavaScript
首頁 web前端 css教學 流體寬度視頻

流體寬度視頻

Apr 09, 2025 am 09:13 AM

Fluid Width Video

在響應式和流體網頁佈局盛行的今天,有一種媒體類型阻礙了完美的和諧:視頻。網站上視頻的顯示方式有很多種。您可能自行託管視頻,並通過HTML5<video></video>標籤顯示;也可能使用YouTube、Vimeo 或其他提供<iframe></iframe>代碼來顯示視頻的視頻提供商。讓我們來看看如何在保持適當的縱橫比的同時,使所有視頻都具有流體寬度。

在這些視頻嵌入場景中,聲明靜態寬度和高度非常常見。

<video ...="" controls="" height="300" width="400"></video>
<iframe ...="" height="300" width="400"></iframe>
<object ...="" height="300" width="400"></object>
<embed ...="" height="300" width="400"></embed>
登入後複製

猜猜看?在流體寬度環境中聲明靜態寬度不是一個好主意。如果該視頻的父容器縮小到小於聲明的400 像素,會發生什麼?它會溢出,看起來可能很荒謬和尷尬。

那麼我們不能只這樣做嗎?

<video ...="" width="100%"></video>
登入後複製

是的,您可以!如果您使用的是標準HTML5 視頻,這將使視頻適應容器的寬度。重要的是,當您這樣做時,請刪除高度聲明,以便在視頻增長和縮小時保持其縱橫比,以免出現填充空白空間的尷尬“條形”(與圖像不同,無論元素的大小如何,實際視頻都會保持其縱橫比)。

您可以通過CSS(而不必擔心HTML 中聲明的內容)來實現這一點:

 video {
  /* 覆蓋其他樣式以實現響應式*/
  width: 100% !important;
  height: auto !important;
}
登入後複製

<iframe></iframe>視頻(YouTube、Vimeo 等)

當處理通過<iframe></iframe>傳送的視頻時,我們上面的技巧將無濟於事。強制寬度為100% 是有效的,但是當我們設置height: auto時,我們最終會得到150 像素1的靜態高度,這對於大多數視頻來說都太矮了,並且會造成更多R&E(荒謬和尷尬)。

幸運的是,這裡有幾個可能的解決方案。其中一個是由Thierry Koblentz 首創的,並在2009 年的A List Apart 上發表:為視頻創建固有比例。使用此技術,您將視頻包裝在另一個具有固有縱橫比的元素中,然後在該元素內絕對定位視頻。這使我們能夠獲得流體寬度和我們可以依靠的合理高度。

<div class="videoWrapper">
  <iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/n_dZNLr2cME?rel=0&hd=1" width="560"></iframe>
</div>
登入後複製
.videoWrapper {
  position: relative;
  padding-bottom: 56.25%; /* 16:9 */
  height: 0;
}
.videoWrapper iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
登入後複製

有一個巧妙的改編方法允許您直接從HTML 調整縱橫比,例如:

<div style="--aspect-ratio: 3 / 4;">
  <iframe ...></iframe>
</div>
登入後複製
.videoWrapper {
  ...
  /* 回退到16/9,否則使用來自HTML 的比例*/
  padding-bottom: calc(var(--aspect-ratio, .5625) * 100%);
}
登入後複製
 .videoWrapper iframe,
.videoWrapper embed,
.videoWrapper object { }
登入後複製

但是……縱橫比、舊內容、非技術用戶等等

上述技術很棒,但它有一些可能的局限性:

  1. 它需要一個包裝器元素,因此直接從YouTube 複製和粘貼代碼是不行的。用戶需要更精明一些。
  2. 如果您有舊內容並且正在重新設計為流體,則所有舊視頻都需要進行HTML 調整。
  3. 所有視頻都需要相同的縱橫比。否則,它們將被強制轉換為不同的縱橫比,您將得到“條形”。或者,您將需要一個可以應用的類名工具箱來進行調整,這會增加額外的複雜性。

如果這些限制中的任何一個適用於您,您可能需要考慮使用JavaScript 解決方案。

想像一下:頁面加載時,會查看所有視頻並保存其縱橫比。立即執行一次,以及每當窗口大小調整時,所有視頻都會調整大小以填充可用寬度並保持其縱橫比。使用jQuery JavaScript 庫,它看起來像這樣:

 // 查找所有YouTube 視頻// 為Vimeo 和任何其他內容擴展該選擇器var $allVideos = $("iframe[src^='//www.youtube.com']"),

  // 流體寬度的元素$fluidEl = $("body");

// 計算並保存每個視頻的縱橫比$allVideos.each(function() {

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

    // 並刪除硬編碼的寬度/高度.removeAttr('height')
    .removeAttr('width');

});

// 當窗口大小調整時$(window).resize(function() {

  var newWidth = $fluidEl.width();

  // 根據每個視頻的縱橫比調整所有視頻的大小$allVideos.each(function() {

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

  });

// 啟動一次調整大小以修復頁面加載時的所有視頻}).resize();
登入後複製

這就是FitVids.js 的由來

除了處理所有這些調整大小的工作之外,FitVids.js 還會循環遍歷所有視頻,並添加啟用縱橫比的HTML 包裝器和必要的CSS。這比需要綁定到窗口大小調整處理程序要高效得多

改為使用純JavaScript

如今,jQuery 已經不太流行了。幸運的是,Dave 有一個Vanilla 版本(需要自備CSS):

  1. 實際上,如果未另行聲明,所有瀏覽器都會將iframe、canvas、embed 和object 標籤呈現為300 像素× 150 像素。即使這不在UA 樣式表中。

The output maintains the original image and its format. The text has been paraphrased and reorganized for improved flow and readability while preserving the original meaning.

以上是流體寬度視頻的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1226
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

如何通過CSS選擇第一個類名為item的子元素? 如何通過CSS選擇第一個類名為item的子元素? Apr 05, 2025 pm 11:24 PM

在元素個數不固定的情況下如何通過CSS選擇第一個指定類名的子元素在處理HTML結構時,常常會遇到元素個數不�...

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? 在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? Apr 05, 2025 pm 10:21 PM

在前端開發中如何實現類似Windows...

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

See all articles