css使用aspect-ratio制作4:3和9:16和1:1等等比例布局

文章目錄

  • 1. 前言
  • 2. 用法
    • 2.1 基本語法
    • 2.2. 與max-width、max-height等屬性結合使用
    • 2.3. 動態計算比例
  • 3. 應用場景
  • 4. 兼容性和替代方案
  • 5. 總結

1. 前言

在網頁制作過程中,有時候我們只知道寬度,或者只知道高度,這時候需要制作一個4:3和9:16這種類似的盒子,不使用js而使用純css如何實現呢:

aspect-ratio 是 CSS 中用于定義元素寬高比的屬性。它允許開發者指定一個元素的寬度和高度之間的固定比例關系,無論元素的實際尺寸如何變化,都會保持這個比例。這種特性在響應式設計、圖片和視頻布局等場景中非常實用,能夠幫助開發者更輕松地控制元素的外觀和布局,避免因內容尺寸變化導致的布局錯亂問題。

2. 用法

下面列舉了一些常用的用法:

2.1 基本語法

aspect-ratio屬性接受一個由斜杠(/)分隔的兩個數字,表示寬度與高度的比例,其語法如下:

element {aspect-ratio: <width> / <height>;
}

其中,widthheight為非負數字,例如:

.box {aspect-ratio: 16 / 9; /* 常見的視頻寬高比 */width: 500px;background-color: lightblue;
}

在上述代碼中,.box元素的寬度設置為500px,由于aspect-ratio設置為16/9,因此該元素的高度會自動計算為500px * 9 / 16 = 281.25px,從而保持16:9的寬高比。

2.2. 與max-width、max-height等屬性結合使用

aspect-ratio屬性可以與max-width、max-height等屬性配合,實現更靈活的響應式布局。例如:

.image-container {max-width: 800px;aspect-ratio: 4 / 3;overflow: hidden;
}.image-container img {width: 100%;height: 100%;object-fit: cover;
}

在這個例子中,.image-container的最大寬度為800px,并且保持4:3的寬高比。內部的圖片會自動填滿容器,并通過object-fit: cover屬性確保圖片在保持比例的同時,完整顯示內容。

2.3. 動態計算比例

aspect-ratio的值也可以通過 CSS 變量(var())動態計算,以適應不同的布局需求:

:root {--ratio-width: 2;--ratio-height: 1;
}.dynamic-box {aspect-ratio: var(--ratio-width) / var(--ratio-height);background-color: lightcoral;
}

通過修改 CSS 變量的值,可以輕松改變元素的寬高比,而無需修改大量的 CSS 代碼。

3. 應用場景

下面列舉了一些常見的應用場景:

  • 響應式圖片和視頻布局

在響應式設計中,aspect-ratio屬性常用于保持圖片和視頻的比例,防止其在不同設備上拉伸變形。例如,對于視頻播放器:

.video-player {width: 100%;aspect-ratio: 16 / 9;
}

無論設備屏幕寬度如何變化,視頻播放器都會始終保持16:9的比例,確保視頻的正確顯示。

  • 卡片式布局

在卡片式布局中,使用aspect-ratio可以讓卡片在不同屏幕尺寸下保持一致的外觀。例如:

.card {width: 300px;aspect-ratio: 3 / 4;border: 1px solid #ccc;border-radius: 10px;overflow: hidden;
}

這樣,每張卡片都會保持固定的寬高比,即使卡片內容有所不同,整體布局也會顯得整齊有序。

  • 圖表和圖形繪制

在繪制圖表、流程圖等圖形時,aspect-ratio可以幫助開發者精確控制圖形的比例,使其在不同屏幕上都能正確顯示。例如:

.chart {width: 600px;aspect-ratio: 5 / 3;background-color: #f9f9f9;
}

通過設置合適的寬高比,圖表可以更好地展示數據,提升視覺效果。

4. 兼容性和替代方案

雖然aspect-ratio屬性功能強大,但在使用時需要注意其瀏覽器兼容性:

環境版本支持情況
Chrome89+支持
Firefox87+支持
Edge89+(新版本基于Chromium)支持
Safari15.4+支持

對于不支持aspect-ratio屬性的舊版瀏覽器,可以使用 JavaScript 來實現類似的效果。或者利用css里百分比 padding 是相對于父容器寬度計算的這個特性來實現:

  • 通過 JavaScript 監聽窗口大小變化,動態計算并設置元素的高度:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Aspect Ratio Fallback</title><style>.fallback-box {width: 100%;background-color: lightgreen;}</style>
</head><body><div class="fallback-box" id="fallbackBox"></div><script>const fallbackBox = document.getElementById('fallbackBox');const ratio = 16 / 9;function setBoxHeight() {const width = fallbackBox.offsetWidth;fallbackBox.style.height = (width / ratio) + 'px';}window.addEventListener('load', setBoxHeight);window.addEventListener('resize', setBoxHeight);</script>
</body>
</html>
  • css里百分比 padding 是相對于父容器寬度計算的特性
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Aspect Ratio Fallback</title><style>.container {width: 400px; /* 可以根據需要調整寬度 */position: relative;}/* 設置 .box 的 height: 0,然后通過 padding-top: 75% 來創建高度。 因為 padding-top 的百分比是基于父容器的寬度計算 *//* 所以 75% 表示高度是寬度的 75%,即實現了 4:3 的比例(3 ÷ 4 = 0.75)。 */.box {height: 0;padding-top: 75%; /* 3/4 = 0.75 = 75% */background-color: lightblue;position: relative;}/* 如果你想在盒子里放內容,可以用一個絕對定位的子元素 */.box-content {position: absolute;top: 0;left: 0;width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;}</style>
</head><body><div class="container"><div class="box"></div></div>
</body>
</html>

這2種方式可以在不支持aspect-ratio屬性的瀏覽器中,模擬出類似的寬高比效果。

5. 總結

aspect-ratio屬性為 CSS 開發者提供了一種簡單而有效的方式來控制元素的寬高比,極大地簡化了響應式設計和布局的實現過程。盡管存在一定的瀏覽器兼容性問題,但隨著主流瀏覽器的不斷更新,該屬性的應用將會越來越廣泛。在實際項目中,合理運用aspect-ratio屬性,可以提升頁面的視覺效果和用戶體驗,使布局更加靈活和美觀。


本次分享就到這兒啦,我是鵬多多,如果您看了覺得有幫助,歡迎評論,關注,點贊,轉發,我們下次見~

往期文章

  • flutter-使用extended_image操作圖片的加載和狀態處理以及緩存和下載
  • flutter-制作可縮放底部彈出抽屜評論區效果
  • flutter-實現Tabs吸頂的PageView效果
  • Vue2全家桶+Element搭建的PC端在線音樂網站
  • 助你上手Vue3全家桶之Vue3教程
  • 助你上手Vue3全家桶之VueX4教程
  • 助你上手Vue3全家桶之Vue-Router4教程
  • 超詳細!Vue的九種通信方式
  • 超詳細!Vuex手把手教程
  • 使用nvm管理node.js版本以及更換npm淘寶鏡像源
  • vue中利用.env文件存儲全局環境變量,以及配置vue啟動和打包命令

個人主頁

  • CSDN
  • GitHub
  • 簡書
  • 博客園
  • 掘金

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79027.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【國產化】在銀河麒麟ARM環境下離線安裝docker

1、前言 采用離線安裝的方式。 關于離線安裝的方式官網有介紹&#xff0c;但是說的很簡單&#xff0c;網址&#xff1a;Binaries | Docker Docs 官網介紹的有幾種主流linux系統的安裝方式&#xff0c;但是沒有kylin的&#xff0c;所以在此記錄一下。 在安裝過程中也遇到了些…

從一城一云到AI CITY,智慧城市進入新階段

AI將如何改變城市面貌&#xff1f;AI能否為城市創造新的商業價值&#xff1f;AI的落地應用將對日常生活有什么樣的影響&#xff1f; 幾乎在每一場和城市發展相關的論壇上&#xff0c;都會出現以上幾個問題。城市既是AI技術創新融合應用的綜合性載體&#xff0c;普羅大眾對AI產…

鴻蒙知識總結

判斷題 1、 在http模塊中&#xff0c;多個請求可以使用同一個httpRequest對象&#xff0c;httpRequest對象可以復用。&#xff08;錯誤&#xff09; 2、訂閱dataReceiverProgress響應事件是用來接收HTTP流式響應數據。&#xff08;錯誤&#xff09; 3、ArkTS中變量聲明時不需要…

[人機交互]理解用戶

一.解釋什么是認知&#xff0c;以及它對交互設計的重要性 1.1什么是認知 認知是指與knowing相關的能力&#xff0c;行為和過程&#xff08;考填空&#xff09; -如何感知物理刺激&#xff1f;如注意、知覺等 -如何認識自我、他人以及環境&#xff1f;如意識、記憶等 -如何…

微信小程序備案的一些記錄

小程序如果沒有備案是搜索不到小程序的。 小程序備案需要填寫主體負責人的信息&#xff0c;需要主體負責人的手機號驗證碼&#xff0c; 需要填寫管理員的信息&#xff0c;同樣也需要驗證手機號碼&#xff0c; 填寫完畢之后&#xff0c;提交進行初審&#xff0c;初審之后會打…

SpringCloud服務拆分:Nacos服務注冊中心 + LoadBalancer服務負載均衡使用

SpringCloud中Nacos服務注冊中心 LoadBalancer服務負載均衡使用 前言Nacos工作流程nacos安裝docker安裝window安裝 運行nacos微服務集成nacos高級特性1.服務集群配置方法效果圖模擬服務實例宕機 2.權重配置3.環境隔離 如何啟動集群節點本地啟動多個節點方法 LoadBalancer集成L…

網絡安全系列--《文章1:網絡安全基礎與核心概念》

課程1&#xff1a;網絡安全基礎與核心概念 學習內容 1. 網絡安全定義 網絡安全是通過技術、管理及法律手段保護網絡系統的硬件、軟件及數據&#xff0c;使其免受破壞、篡改或泄露&#xff0c;確保系統穩定運行并提供可靠服務。其核心目標包括保密性、完整性、可用性、可控性及…

C++:掃雷游戲

一.掃雷游戲項目設計 1.文件結構設計 首先我們要先定義三個文件 ①test.c //文件中寫游戲的測試邏輯 ②game.c //文件中寫游戲中函數的實現等 ③game.h //文件中寫游戲需要的數據類型和函數聲明等 2.掃雷游戲的主體結構 使?控制臺實現經典的掃雷游戲 ?游戲可以通過菜單…

[人機交互]識別需要和建立需求

*一.需要選擇的產品特征&#xff08;或屬性&#xff09;可概括為兩類 1.1外部特征&#xff08;屬性&#xff09; 對用戶而言&#xff0c;可見及可度量的屬性 1.2內部特征&#xff08;屬性&#xff09; 對用戶而言是不可見或不可度量的 二.什么是需求 需求是有關目標的陳述…

Lua學習筆記

文章目錄 前言1. Lua的數據類型2. Lua的控制結構2.1 循環2.1.1 for2.1.1.1 數值循環2.1.1.2 迭代循環2.1.2 while2.1.3 repeat-until 2.2 條件語句2.3 函數 3. Lua中的變量作用域 前言 Lua是一種輕量級的、高效的、可擴展的腳本語言&#xff0c;由巴西里約熱內盧天主教大學&am…

學習c語言的鏈表的概念、操作(另一篇鏈表的筆記在其他的欄目先看這個)

在學習Linux之間我們先插入一下鏈表的知識 學習鏈表&#xff08;一種數據結構思想&#xff09; 鏈表和數組的區別和實現&#xff1a; 鏈表&#xff08;鏈表是個好東西&#xff09; 鏈表概念&#xff08;什么是鏈表&#xff09;&#xff1f; 鏈表就是數據結構->數據的存儲…

NVM完全指南:安裝、配置與最佳實踐

發布于 2025年5月7日 ? 閱讀時間&#xff1a;10分鐘 &#x1f4a1; TL;DR: 本文詳細介紹了如何完整卸載舊版Node.js&#xff0c;安裝NVM&#xff0c;配置阿里云鏡像源&#xff0c;以及設置node_global與node_cache目錄&#xff0c;打造高效Node.js開發環境。 &#x1f4cb; 目…

轉換算子和行動算子的區別

轉換算子和行動算子主要是在分布式計算框架&#xff08;如 Apache Spark&#xff09;里常用的概念&#xff0c;它們在功能、執行機制、返回結果等方面存在明顯區別&#xff0c;以下為你詳細介紹&#xff1a; 定義與功能 返回結果 如何在使用轉換算子和行動算子時避免出現內存溢…

Windows命令行軟件管理器:Chocolatey

文章目錄 Windows命令行軟件管理器&#xff1a;Chocolatey1.Chocolatey使用1.1 安裝1.2 常用命令1.3 使用流程 2.常用shell命令匯總 Windows命令行軟件管理器&#xff1a;Chocolatey Chocolatey 是一款強大的 Windows 命令行軟件管理器&#xff0c;目前在 GitHub 上已斬獲 10.…

MySQL 8.0 OCP(1Z0-908)英文題庫(11-20)

目錄 第11題題目分析正確答案 第12題題目分析正確答案 第13題題目分析正確答案 第14題題目分析正確答案 第15題題目分析正確答案 第16題題目分析正確答案 第17題題目分析正確答案&#xff1a; 第18題題目分析正確答案 第19題題目分析正確答案 第20題題目分析正確答案 第11題 W…

mac 使用 Docker 安裝向量數據庫Milvus獨立版的保姆級別教程

Milvus 特點&#xff1a;開源的云原生向量數據庫&#xff0c;支持多種索引類型和GPU加速&#xff0c;能夠在億級向量規模下實現低延遲高吞吐。具有靈活的部署選項和強大的社區支持。 適用場景&#xff1a;適合處理超大規模數據和高性能需求的應用&#xff0c;如圖像搜索、推薦…

一款獨立于游戲外的鍵盤源按鍵輔助工具他來了

一款獨立于游戲外的鍵盤源按鍵輔助工具 一&#xff01;不需要安裝&#xff0c;下載即用 二&#xff01;只要熟悉hekili體系 三&#xff01;略懂wa定制 四&#xff01;知道如何循環并且會自行模擬 五&#xff01;會simc最好 直接就上手了&#xff01; 我們的不是一鍵宏&…

python學生作業提交管理系統-在線作業提交系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

Spring Boot + Vue 實現在線視頻教育平臺

一、項目技術選型 前端技術&#xff1a; HTML CSS JavaScript Vue.js 前端框架 后端技術&#xff1a; Spring Boot 輕量級后端框架 MyBatis 持久層框架 數據庫&#xff1a; MySQL 5.x / 8.0 開發環境&#xff1a; IDE&#xff1a;Eclipse / IntelliJ IDEA JDK&…

引文索引數據庫在科研中的應用

如何利用引文索引數據庫高效檢索、分析研究論文&#xff0c;發現高水平論文&#xff0c;鎖定特定領域的經典文獻&#xff1f;如何跟蹤最新研究進展&#xff1f; 回放鏈接 image.png image.png image.png image.png image.png image.png image.png image.png image.png image.pn…