【方案】前端UI布局的絕技,響應式布局,多端適配

大家好,歡迎來到停止重構的頻道。

本期討論網頁UI布局

網頁UI布局是前端開發中占比較多的部分,做完網頁布局也就差不多完成了一半的工作。

本期視頻,我們不再討論基礎的UI布局。

我們希望滿足響應式布局,一份代碼適配PC/平板/手機等多端設備,希望盡可能適配視窗/內容變化。

我們按以下順序展開討論

  1. 網頁布局核心問題
  2. 視窗變化
  3. 內容變化
  4. 我們的解決方案

網頁布局核心問題

我們先拋開一切解決方案,觀察網頁布局本身。

一個網頁像是一個大盒子,上面整齊放著小盒子或零件,小盒子中又可以放小盒子或零件。

如果所有的零件和盒子尺寸都是固定的,網頁布局將是較為簡單的工作,基本上就是將UI設計圖翻譯為HTML語言,甚至很多UI設計工具都可以直接導出HTML文件。

但是,現實的前端開發工作并不是這么簡單的事情,核心問題是,網頁布局中的這些盒子和零件的尺寸是變化的

尺寸變化的問題又分為視窗變化和內容變化,以下將分別討論其解決方案。

視窗變化

首先是視窗變化

整個網頁的大盒子,也就是網頁的視窗是變化的。

比如僅僅用作PC端的網頁,最終運行的視窗尺寸也是有變化的,因為用戶顯示器的尺寸不是固定的,而且PC瀏覽器的窗口大小也可以隨意調整。

如果一個網頁僅用于PC端或者手機端,即使視窗尺寸有所浮動,網頁的整體布局一般是不需要有太大變化的,一般只需要微調局部,讓內容可以正常顯示。

但是,如果一個網頁需要同時適配手機/平板/PC等多端的話,則可能會引起整體網頁布局的變化

以我們的手冊網頁為例,PC網頁是左目錄右內容,手機網頁是上目錄下內容,且詳細目錄需要隱藏起來。

這里需要特別說明的是,手機/平板/PC多端適配的前提,是網頁結構是類似的

比如僅僅是換一下區域的位置,或者僅僅需要某幾個區域建立分身做特殊適配。

若網頁特別復雜,且PC/手機網頁的設計風格完全不一致的話,則適配工作量會非常大,還不如獨立分開PC/手機端網頁。

針對視窗的變化,我們一般是根據視窗寬度調整CSS樣式。

視窗的寬度我們推薦以下幾個梯度,其中視窗寬度小于768px的話,一般為手機等移動設備。需要考慮是否重新調整網頁整體布局

這里有個點需要注意,移動設備一般是可以橫向、縱向旋轉的

以IPhone為例,豎著的時候,視窗寬度為390px 橫著的時候,視窗寬度為844px。

所以,768px這個移動設備分水嶺并不是絕對的,需要根據具體項目的適配要求而定。

這里需要補充說明的是,屏幕分辨率尺寸和瀏覽器視窗尺寸并不是完全等效的

根據系統設置,一般1-3個物理像素等于1個網頁視窗像素,比如iPhone的橫向分辨率為1170,其瀏覽器視窗寬度為390px。

如果網頁需要在移動設備運行HTML的head中需要添加meta標識,不然網頁會自動縮小。

針對視窗變化,一般是在CSS設置中,通過@media篩選視窗寬度進行樣式覆蓋,在網頁開發調試時,需要測試這些推薦梯度下網頁是否正常。

內容變化

接下來是內容變化

網頁的局部內容并不都是固定的,特別是某些內容是從服務端獲取的。

比如需要做一個信息卡片的布局,左邊的圖片需要固定為25%的寬度,且長寬比為1:1,圖片高度也決定了整個卡片的高度。

標題旁邊需要緊挨著標簽,說明區域占據一行且貼緊底部,內容區域自動占滿剩余高度。

若按照經典的布局方式,比如float、flex等布局方式。

會非常的麻煩,需要一層一層設置下來,且樣式改版時非常麻煩。

那有沒有一種更為直觀的方式,更貼近表格的布局方式呢。

這里推薦使用Grid布局,Grid布局的詳細語法非常豐富,但是我們只推薦這樣的做法:

我們希望先規劃好網格的尺寸,然后通過標識綁定具體的網格區域。

以上面的信息卡片為例子,我們需要先規劃好網格,包括行高、列寬、區域標識。

對應的CSS代碼為,在最外層元素的CSS樣式上開啟grid布局,且通過grid-template設置網格行高、列寬、區域標識,通過gap設置網格間的間隙。

具體的子區域通過區域標識綁定,即可插入對應的位置。

相比于經典的flex、float布局,Grid布局的HTML結構也更加簡潔。

這里需要補充說明的是,在網格設置中 行高、列寬中包含了2個較為特殊的單位:auto和fr

auto指的是自動適配區域內部的寬度或者高度,比如標題title的寬度設置為auto,則標簽的位置會自動根據標題的寬度自動左右移動。

fr指的是自動占滿剩下的區域寬度或者高度,比如內容content高度設置為1fr,則自動填充剩余高度。

若說明區域也設置為1fr,則內容和說明區域平分剩余高度。

若說明區域設置為2fr,則說明區域的高度將會是內容高度的兩倍。

Grid布局的好處十分明顯,可以在一個地方管理網格設置。在修改網格布局時,會非常的清晰方便, HTML結構也更簡單易懂。

比如,信息卡片在手機端需要改變布局方式,可以簡單地設置手機布局樣式,而不需要修改子區域的樣式。

值得一題的是,僅通過調整布局來適配所有視窗是不現實的,某些區域可能需要建立分身進行特殊適配,在不同的視窗寬度顯示不同的分身。

當然,Grid布局也有局限性,就是老舊瀏覽器對其支持有限。

老舊瀏覽器一般也就是IE11及之前版本,若網頁沒有IE的適配要求,則可以放心地使用Grid布局。

我們的解決方案

以上是原生CSS解決方案。

在我們的前端框架Trick2中,也更新了_BoxGrid組件,通過設置組件參數,即可快速實現Grid布局。

另外,為了適配復雜的多層布局,組件參數允許嵌套設置快速實現多層布局

一些時候,若需要給某些區域添加a標簽跳轉,這個組件也提供了_as參數,可以設置為a標簽,并直接設置跳轉路徑。

總結

以上就是我們目前比較推薦的UI布局方式,這種方式最為直觀,更接近直覺中網頁是一個表格的感覺。

這里強調一下,我們并非推薦網頁布局僅使用Grid布局,而是推薦在全局或者大片區域的布局上使用Grid布局,小局部可能使用經典的flex、float等布局方式更為方便。

在兩年前,我們也討論過響應式布局,但在這兩年的實踐中,我們發現Grid布局實現起來更為簡單直觀,維護起來也更加方便。

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

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

相關文章

【鄭大二年級信安小學期】Day4上午:Bool盲注時間盲注堆疊查詢post注入HTTP頭部注入ua字段

目錄 0 錄制文件 1 SQL注入-布爾盲注 1.1 布爾盲注優缺點 1.2 先看一下第八關嗯頁面特征 1.3 步驟 1.4 常用函數 1.5 判斷是否字符型 1.6 判斷閉合 1.7 查詢庫名 1.8 查詢數據表 1.9 獲取字段名 1.10 獲取數據 1.11 布爾盲注缺陷 2 時間盲注 2.1 基礎知識 2.2 判…

如何設計一個“真正可復用”的前端組件?

🧱 如何設計一個“真正可復用”的前端組件?🔧 一個按鈕可以寫10次,也可以封裝一次復用全場;組件是前端的積木,而設計模式才是組裝它們的說明書。你真的在寫“可復用”組件嗎?🧠 什么…

AlpineLinux安裝RabbitMQ及其管理界面

AlpineLinux安裝RabbitMQ及其管理界面 本文以 alpine linux 的 3.21版本為例,演示對于 RabbitMQ 在Linux 下的安裝,其他發行版本大同小異。主要是包管理軟件的命令區別,以及在線倉庫提供的 RabbitMQ 版本差異而已。 (一)安裝 Erlang 因為 RabbitMQ 是用 Erlang 語言編寫…

3S技術+ArcGIS/ENVI全流程實戰:水文、氣象、災害、生態、環境及衛生等領域應用

系統梳理3S技術的核心理論與實戰應用,涵蓋ArcGIS與ENVI軟件操作、空間數據管理、地圖投影轉換、遙感影像解譯、DEM地形分析、空間插值建模等關鍵技能,并結合農業、氣象、生態、災害等跨學科案例,提供從數據獲取到高級可視化的完整解決方案。無…

彈窗中el+table,二次打開彈窗,選擇列會攜帶第一次選擇的數據

1第一次打開彈窗選擇的數據,正確,然后關閉彈窗再次打開彈窗,重新選擇,第二次的數據,錯誤在打開彈窗/關閉彈窗等位置全部做了置空處理,以下是代碼:最后的原因是:el-dailog 自帶緩存&a…

RocketMQ在Spring Boot中的詳細使用指南

?? 目錄 ?? RocketMQ簡介 什么是RocketMQ? 核心概念 ??? 基礎架構組件 ?? 重要概念解釋 ?? 環境搭建 1. RocketMQ服務端安裝 Docker方式(推薦初學者) 手動安裝方式 2. 驗證安裝 ??? Spring Boot集成配置 1. 添加依賴 2. 配置文件 application.y…

基于Java+Springboot的醫院檔案管理系統

源碼編號:S597源碼名稱:基于Springboot的醫院檔案管理系統用戶類型:多角色,用戶、醫護人員、管理員數據庫表數量:11 張表主要技術:Java、Vue、ElementUl 、SpringBoot、Maven運行環境:Windows/M…

Pandas 學習教程

目錄 定義 基本操作 一維數組操作 二維數組操作 數據選擇過濾 數據處理 數據清洗 數據轉換 數據分析 排序 分組聚合 數據透視表 高級操作 合并數據 時間序列處理 自定義函數調用 數據可視化集成 數據導出和導入 大數據分塊處理 定義 全稱: panel da…

QueryWrapper 類的作用與示例詳解

通俗易懂的解釋想象一下你去圖書館找書:QueryWrapper 就像是一個智能的圖書管理員你告訴管理員你的需求:"我要找計算機類、2020年后出版的、作者是張三的書"管理員會根據你的要求組合查詢條件,然后去書庫幫你找書在編程中&#xff…

【PyTorch】PyTorch中torch.nn模塊的循環層

PyTorch深度學習總結 第九章 PyTorch中torch.nn模塊的循環層 文章目錄PyTorch深度學習總結前言一、循環層1. 簡單循環層(RNN)2. 長短期記憶網絡(LSTM)3. 門控循環單元(GRU)4. 雙向循環層二、循環層參數1. …

Ubuntu 24.04 LTS 服務器配置:安裝 JDK、Nginx、Redis。

Ubuntu 24.04 LTS 服務器配置:安裝 JDK、Nginx、Redis。新建用來放置軟件安裝包的目錄 mkdir /home/software 配置目錄所有者為 ubuntu 用戶: chown ubuntu /home/software將軟件安裝包上傳到 /home/software配置 JDK-8 新建 jdk 安裝目錄 mkdir /usr/ja…

工作中用到過哪些設計模式?是怎么實現的?

1. 單例模式(結合 Spring Component)場景:配置中心、全局狀態管理 Spring 實現:java// 自動注冊為Spring Bean(默認單例) Component public class AppConfig {Value("${server.port}")private in…

Leetcode 3609. Minimum Moves to Reach Target in Grid

Leetcode 3609. Minimum Moves to Reach Target in Grid 1. 解題思路2. 代碼實現 題目鏈接:3609. Minimum Moves to Reach Target in Grid 1. 解題思路 這一題我一開始走岔了,走了一個正向遍歷走法的思路,無論怎么剪枝都一直超時。后來看了…

工作流引擎:IDEA沒有actiBPMN插件怎么辦?

文章目錄一、問題描述二、替代方案一、問題描述 我們在學習activiti7工作流引擎的時候,需要設計流程圖。 一般推薦的就是使用IDEA插件actiBPMN進行開發。 但是,這個插件在IDEA2019后的版本都不在支持。 也就是搜不到 那么,怎么辦了&#x…

Android音視頻探索之旅 | CMake基礎語法 創建支持Ffmpeg的Android項目

一.CMake語法 CMake語法非常多,我們知道如何導入靜態庫和動態庫以及最基礎的使用,目前是夠用的。其它方面則根據實際項目同步學習。 1.1.基礎語法-常用 cmake_minimum_required:指定cmake最小版本include_directories:引入&#x…

React Native 初始化項目和模擬器運行

中文官方文檔:https://reactnative.cn/docs/environment-setup 英文官方文檔:https://reactnative.dev/docs/getting-started-without-a-framework#step-1-creating-a-new-application 創建新項目 1、初始化 # 如果你之前全局安裝過舊的react-native-cli…

20250706-5-Docker 快速入門(上)-創建容器常用選項_筆記

一、創建容器常用選項1. 創建容器常用選項1)常用選項創建容器常用選項交互式選項:-i:保持標準輸入打開,允許交互式操作-t:分配偽終端,使容器像傳統終端一…

插值與擬合(3):B樣條曲線

在路徑規劃問題中,通常會用到B樣條來平滑路徑,本文實現并封裝了三次準均勻開放B樣條曲線,供大學學習使用。作者提供了三套代碼方案。可以用于不同平臺:方案1:MATLAB;方案2:標準C;方案…

[免費]基于Python豆瓣電影數據分析及可視化系統(Flask+echarts+pandas)【論文+源碼+SQL腳本】

大家好,我是java1234_小鋒老師,看到一個不錯的于Python豆瓣電影數據分析及可視化系統(Flaskechartpandas)【論文源碼SQL腳本】,分享下哈。項目介紹隨著如今電影越來越多,各種各樣的爛片和撈錢的商業片也層出不窮,而有意…

SQL127 月總刷題數和日均刷題數

SQL127 月總刷題數和日均刷題數 withtemp as (selectDATE_FORMAT(submit_time, "%Y%m") as submit_month,count(question_id) as month_q_cnt,round(count(question_id) / day(last_day(max(submit_time))),3) as avg_day_q_cntfrompractice_recordwhereyear(submit…