web布局02

Web 發展的每個不同時期都有新的技術為 Web 布局提供支持,但不管是哪個時期,Web 布局相關的概念和術語都是相同的。如果你想徹底或者更好地掌握 Web 布局,那么首先需要對 Web 布局相關的技術術語有所了解。

在這一節中,我們一起來探討 Web 布局相關的術語。

Web 坐標軸

坐標軸不只是存在于數學中,它同樣存在于 Web 世界中。在 Web 中,我們常稱之為 Web 坐標軸CSS 坐標系統

在 Web 中,默認原點是給定上下文的左上角,也就是元素盒子的左上角,它分為 x 軸(也稱為水平軸),向右為正值,向左為負值;y 軸(垂直軸),向上為負值,向下為正值:

img

請注意,這與大多數數學模型不同,其中原點位于左下角,正 y 坐標值位于原點上方。

事實上,除了大家熟悉的平面畫布中的 xy 軸之外,還有控制第三維度的 z 軸。比如使用 CSS 的 transform 繪制 3D 圖形或使用第三維度從前往后對對象進行分層:

img

也會在定位元素(顯式使用position 屬性值為非 static 的元素)上使用 z-index 控制其層疊的順序(z 軸上的層疊順序),它表示的是用戶與屏幕的這條看不見的垂直線:

img

上面我們看到的 CSS 坐標系,只是最初的坐標系的定義。隨著 CSS 的邏輯屬性出現,CSS 的坐標系也隨之改變。它分為 內聯軸 (Inline Axis)和 塊軸 (Block Axis)。

眾所周知,在 CSS 中,每個元素都是一個盒子,默認情況之下,盒子會根據元素類型分為塊盒子(比如塊元素 div )和 內聯盒子(比如span)。其中塊盒會在垂直方向從上往下堆疊,內聯盒子將會按照書寫方式從左往右排列:

img

當我們的書寫方式改變時,塊盒子和內聯盒子也會有相應的變化,就拿內聯盒子為例,書寫模式改變之后,它的方向也會隨之改變:

img

簡而言之,塊元素遵循流方向,內聯元素遵循寫入方向

img

也就是說,隨著 CSS 的邏輯屬性的出現,CSS 的坐標系就不再以 x 軸 和 y 軸來定義,而是以 內聯 (Inline)和 (Block)來區分,并且內聯方向的稱之為 內聯軸 (Inline Axis),也就是書寫模式的方向;塊方向的稱之為 塊軸 (Block Axis),也就是塊盒子自然流的方向。它們隨著 CSS 的書寫模式改變,如下圖所示:

fig-02-07.jpg

如此一來,在 CSS 中就有物理坐標系邏輯坐標系 之分,它們的對應關系如下:

物理屬性邏輯屬性(horizontal-tb)邏輯屬性(vertical-lr)邏輯屬性(vertical-rl)
x 軸(水平軸)Inline 軸(內聯軸)Block 軸(塊軸)Block 軸(塊軸)
y 軸(垂直軸)Block 軸(塊軸)Inline 軸(內聯軸)Inline 軸(內聯軸)

注意 ,不管是在物理坐標系還是邏輯坐標系中,z 軸是不變的!

容器和容器空間

容器這個概念很簡單。熟悉 CSS 的同學都知道,HTML 的每一個元素在 CSS 中都是一個盒子,這個盒子又被稱為 容器 。只不過,這個容器會隨著盒子的類型不同,容器的稱呼也會有不同。它主要由 CSS 的 display 屬性的值來決定,比如:

  • block 時稱為塊容器;
  • inline 時稱為內聯容器;
  • flexinline-flex 時稱為Flexbox容器;
  • gridinline-grid 時稱為 Grid 容器(網格容器)。

每個容器就像生活中的器皿一樣,不管是什么類型的容器,它都有空間。只不過這個空間的大小是由 CSS 盒模型相關的屬性來決定的:

img

只不過,Web 開發者習慣性以 widthheightmin-*max-* 以及它們對應的邏輯屬性來顯式指定一個容器空間的大小:

fig-02-09.png

而且容器大小計算方式也會受 CSS 的 box-sizing 屬性的值影響:

img

每個容器中都有可能會放置內容(文本內容或其他元素),隨著容器中放置的內容多少,可能會造成指定大小的容器無法容納嵌套的內容,造成內容溢出(超出指定容器的大小);也有可能放置的內容較少,無法填充滿整個容器。

按此呈現模式,每個容器的大小(空間)又有可用空間 (也稱為 剩余空間 )和 不可用空間 (也稱為 不足空間 ):

img

間距

Web 是由很多個元素堆疊而成的,為了讓 Web 頁面給用戶提供更好的體驗,Web 設計師在設計時,會根據美學相關的理論來設計元素與元素之間,元素內容與元素盒子邊緣之間的間距:

img

只不過,在 Web 布局中,我們常常是使用 CSS 的 marginpaddinggap 三個屬性來設置間距。不同的是:

  • 框與框(也就是元素與元素)之間的間距一般采用 margingap 屬性來設置,也常稱為 外距
  • 內容與框的邊緣(元素內容與元素框邊緣)之間的間距一般采用 padding 來設置,也常稱為 內距

如下圖所示:

img

特別要提出來的是,CSS 中的 margingap 表現形式是有較大差異的,它們之間的差異用下圖來闡述:

img

書寫模式

世界上有很多種語言(簡稱世界語言),比如漢語、英語、印度斯坦語、西班牙語、阿拉伯語、俄語、葡萄牙語、德語和法語等。在互聯中也有一些常用語言,比如英語、漢語、西班牙語、葡萄牙語、印尼語(馬來語)、法語、日語、俄語和德語等。

img

不同的語系,它們的書寫模式(閱讀模式)是有差異的:

  • 拉丁語體系 是從左往右,比如英語、西班牙語、德語、法語等;
  • 阿拉伯語體系 是從右往左,比如阿拉伯語、希伯來語等;
  • 漢語體系 有兩種方式,有可能是從左往右,也有從上向往下,比如中文、日文、韓文等。

正因為語言的書寫方式不同,在 Web 中呈現不同語系時,CSS 中的塊(Block)和 內聯(Inline)表現的方式也會不同。

img

在 Web 布局中,尤其是針對多語言的 Web 布局,我們可以通過 HTML 元素的 dir 屬性或 CSS 的 direction 屬性來控制書寫模式,比如 ltr (Left-To-Right,也就是從左往右的書寫方式),rtl (Right-To-Left,也就是從右往左的書寫方式)。除此之外,還可以使用 CSS 的 writing-mode 屬性來控制:

img

正因為語系不同書寫模式不同,也將造成 CSS 中布局相關屬性最終呈現給用戶的效果有所差異,比如 Flexbox 中的 flex-direction 屬性,CSS Box Alignment 模塊中的屬性以及 Grid 布局等。

邏輯屬性

我們構建的 Web 頁面不僅是局限于單語種中,你負責的業務有可能是國際業務。這樣一來,你構建的 Web 頁面是一個多語種的 Web 頁面,那么你的布局會因為語種不同有所差異。比如 Facebook 的登錄頁面:

img

上圖中左側是漢語體系的布局效果,右側是阿拉伯語體系的布局效果。

眾所周知,CSS 中有很多屬性和值是遵循 TRBL (Top、Right、Bottom 和 Left ) 模式的:

img

比如,我們熟悉的元素位置會映射到 toprightbottomleft,除此之外,像 bordermarginpaddingborder-radius等屬性的子屬性也會映射到 TRBL 上,如 margin-topmargin-rightmargin-bottommargin-left 。它們帶有明確的方向性。只不過,針對多語言布局時,它給布局帶來很大的局限性,比如下面這個簡單地示例:

.thumb {margin-right: 1rem;
}

ltr 模式(比如英文)和 rtl 模式(比如阿拉伯文),效果將會是像下圖一樣:

img

這個效果并不是我們所期待的,如果希望達到預期的效果,在以往編碼的時候,需要做額外的處理:

.thumb {margin-right: 1rem;
}
?
[dir="rtl"] .thumb {margin-left: 1rem;
}

img

為了解決類似上圖這樣的問題,2017 年 5 月 18 日,W3C 的 CSS 工作組(CSS Working Group) 發布了 CSS邏輯屬性和值(CSS Logical Properties and Values Level 1) 的首份工作草案(First Public Working Draft)。

在這個模塊中并沒有方向性的概念,只有開始(start )、結束(end)、塊(block)和 內聯(inline )的概念。這樣一來,在從左到右的(ltr)中,start 對應的是 left ,但在從右到左(rtl)中,start 對應的是 right 。也就是說,邏輯屬性更易于適應不同的書寫模式。

當然,邏輯屬性出現之后,很多 CSS 屬性和屬性值也隨之有了變化,在原有的物理屬性的基礎上映射了一份邏輯屬性。尤其是 CSS 的盒模型相關的屬性(比如 widthheightmin-*max-*bordermarginpadding)、定位位移相關的屬性(比如 toprightbottomleft)、排版方面的(比如float 屬性的值 leftright)以及圓角 border-radius 等:

img

而且映射關系與 CSS 的 writing-mode 屬性值也有關系,對應關系如下圖所示:

fig-02-23.png

有了邏輯屬性之后,構建多語言 Web 的布局就要方便得多:

.thumb {margin-inline-end: 1rem;
}

img

對齊方式

這里所說的對齊方式指的是 CSS Box Alignment 模塊,該模塊的出現可以說改善了 CSS 中非常有限的對齊能力。在以往,我們控制對齊方式主要是依賴于 CSS 的 text-align (水平方向文本對齊)和 vertical-align (垂直方向文本對齊)兩個屬性,對于塊的對齊方式主要依賴于 float 屬性。它們是無法滿足 Web 布局中的對齊控制。

慶幸的是,隨著 CSS Flexbox 特性出現之后,CSS 新增了像 justify-contentalign-contentalign-itemsjustify-itemsjustify-self 以及 align-self 等屬性,用來控制 Web 布局上的對齊方式。最初這些屬性是在 Flexbox 相關規范中定義的,但隨著 CSS Grid 布局出現之后,W3C 的 CSS 工作組將這些屬性單獨劃分到一個模塊中,即 CSS Box Alignment 模塊。

正如 @Pratham 發的 Twitter 信息上所說:

CSS Box Alignment 模塊是 Web 布局不可或缺的部分,而且其中有很多概念是極易于混淆的。

img

CSS Box Alignment 模塊中,取不同的值時,能得到不同的對齊結果,比如靠左(開始)、靠右(結束)、中間對齊、兩端對齊等:

img

注意,上圖由 @Pratham 繪制!

需要注意的是, CSS Box Alignment 模塊中的屬性同時可以運用于 CSS Flexbox 和 CSS Grid 布局中,在運用于 CSS Flexbox 和 CSS Grid 布局中時略有差異,具體我們會在后面介紹 Flexbox 和 Grid 布局中會提到,在這里不詳細闡述,大家只要知道,在現代 Web 布局技術中,對齊方式新增了該模塊!

小結

在這篇文章中,我們主要和大家一起探討了 Web 布局相關的概念和術語。從我們最為熟悉的坐標系統開始,到我們熟悉的容器以及容器空間,再到新增的書寫模式、邏輯屬性以及對齊方式等。我們花一個節課來介紹這方面,主要是為了和大家把布局相關的概念統一起來,為后續布局打下基礎。

有了這些基礎和認識之后,就可以開啟現代布局中的 Flexbox 布局了 !Let’s Go! (_)

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

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

相關文章

Mac電腦 窗口分屏管理 Magnet Pro

Magnet Pro Mac,是一款功能強大的窗口分屏管理工具,具有多種布局模式、窗口布局功能和其他工具,可以幫助您高效地進行多任務處理和管理工作。 拖動窗口到邊緣,可將窗口大小調整到屏幕的一半。拖動窗口到角落,可將窗口…

http2與websocket關系

HTTP/2 和 WebSocket 協議本身確實不兼容,不能像在 HTTP/1.1 中那樣用標準 WebSocket 協議(ws:// / wss://)進行升級握手。但這事兒細節比較多,下面詳細講講: ? HTTP/2 與 WebSocket 的關系 HTTP/2 不直接支持 WebSo…

LoRA 與 CoT 沖突嗎

對于一個具有CoT 能力的模型來說,采用普通的數據對其進行LoRA 微調可能會使原模型丟失CoT 能力,從而我們進行思考如下 CoT 與 LoRA 的“沖突”理解 目標不完全一致 導致的效果優化方向: CoT 側重于提高推理能力和可解釋性,它鼓勵…

Python爬蟲-爬取票牛明星演唱會數據,進行數據分析

前言 本文是該專欄的第61篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文,筆者以“票牛”平臺為例。基于Python爬蟲,采集“票牛”平臺的明星演唱會(包含“演出城市,演出票價,演出時間”等等)的數據。 廢話不多說,具體實現思路和詳細邏輯,筆者將在正文結合完整…

uniapp的video遮蓋了popup

video的默認層級太高,導致popup彈出的時候,部分被video遮擋了 可以利用cover-view,將popup以及內部所有的標簽,全都換成cover-view,然后用一個變量控制其顯隱 比如原始: 現在:

java面試題02訪問修飾符有哪些?區別是什么?

訪問修飾符是面向對象編程中實現封裝的核心機制,用于控制類、屬性、方法等成員的可見性(可訪問范圍)。不同的訪問修飾符決定了其他類或代碼在何處可以訪問這些成員。 主要的訪問修飾符及其區別如下(以 Java 和 C# 為代表&#xf…

在小程序中實現上下左右拖動表格

在小程序的開發中,不可避免會出現上下左右拖動表格的類似需求,下面將把這個簡單實現一下 其中主要使用到了overflow: scroll;來使得橫向和縱向可以滾動,并且使用負邊距 父容器截斷的方法來同時隱藏橫向和縱向滾動條,從而實現該效…

[MSPM0開發]之九 MSPM0G3507的ADC

[MSPM0開發]之九 MSPM0G3507的ADC 一、 MSPM0G3507 ADC概述二、 MSPM0G3507 ADC系統框圖2.1 電壓基準2.2 分辨率2.3 硬件均值計算2.4 采樣觸發源和采樣模式2.5 轉換模式2.6 轉換結果數據格式2.7 高級特性2.7.1 非FIFO模式下的ADC操作(單次轉換和重復單次轉換&#x…

門鎖開關;與我們生活中緊密聯系!

門鎖開關作為日常生活的核心安全組件,其設計與應用直接影響家居安全、使用便捷性及設備壽命,以下是其關鍵價值與技術要點的系統分析: 🔒 ?一、基礎功能:安全與便利的平衡? ?物理防護核心? ?鎖體結構?&#xff1…

WRF-Hydro分布式水文模型:洪水預報、水資源管理與規劃、生態水文研究、氣候變化影響評估、流域綜合管理、水電工程規劃與運行

目錄 第一部分:WRF-Hydro模型功能及運行流程、依賴庫準備 第二部分:WRF-Hydro模式編譯、離線運行及案例實踐 第三部分:結合多案例進行模式數據制備及實踐應用 【內容簡述】: WRF-Hydro模型是一個分布式水文模型,?…

OCRBench:評估多模態大模型的OCR能力

論文地址:OCRBench: On The Hidden Mystery of OCR In Large Multimodal Models:2305.07895 OCRBench在10個文本相關任務上測評多模態大模型(LMM)的OCR能力,包含1000個問題-答案對,每個問題-答案對包含以下…

servlet前后端交互

前后端交互目錄 servlet流程servlet請求JSON格式實現表格效果完整代碼 servlet流程 流程圖: 客戶端(瀏覽器): 技術棧:使用 jQuery Ajax 發起異步請求。請求配置: 請求路徑:指定目標Servlet的…

4. 時間序列預測的自回歸和自動方法(2)

ar_model.AutoReg 模型通過應用以下元素來估計參數 條件最大似然(CML)估計量:這是一種涉及條件對數似然函數最大化的方法,據此認為已知的參數要么由理論假設固定,要么更常見地由估計值代替(LewiseBeck&…

MySQL(84)如何配置MySQL防火墻?

MySQL防火墻(MySQL Enterprise Firewall)是一種MySQL企業版特性,用于保護數據庫免受SQL注入和其他惡意活動的攻擊。它通過學習和監控合法SQL語句,創建一個允許列表,從而阻止未在列表中的SQL語句。 1. 啟用MySQL防火墻…

優化 Python 爬蟲性能:異步爬取新浪財經大數據

一、同步爬蟲的瓶頸 傳統的同步爬蟲(如requestsBeautifulSoup)在請求網頁時,必須等待服務器返回響應后才能繼續下一個請求。這種阻塞式I/O操作在面對大量數據時存在以下問題: 速度慢:每個請求必須串行執行&#xff0…

Visual Studio Code (VSCode) Python 開發環境配置完整指南

一、安裝準備 1. 安裝 VSCode 官網下載: Visual Studio Code - Code Editing. Redefined安裝時建議勾選: "添加到PATH" (方便終端調用)"注冊為受支持的文件類型編輯器"2. 安裝 Python 官網下載: Download Python | Python.org安裝時勾選: "Add Pytho…

智能數據標簽引擎:企業級分類分級與動態管控實踐

在數字化轉型浪潮中,企業數據量呈爆發式增長,數據的多樣性和復雜性也不斷提升。如何對海量數據進行高效分類分級,并實施動態管控,成為企業釋放數據價值、保障數據安全的關鍵挑戰。智能數據標簽引擎應運而生,它通過引入…

Redis(1)——RDB持久化

在追求極致性能的 Redis 世界里,數據安全是永恒的主題。作為內存數據庫,Redis 重啟或宕機意味著數據丟失的風險。RDB (Redis Database) 持久化,又稱快照持久化,是 Redis 提供的最經典、最高效的數據落地方案之一。它通過生成某個時…

深度剖析無感刷新Token:領碼SPARK平臺賦能微服務認證的智能實踐

摘要 在現代微服務架構與數字化轉型大潮中,用戶身份認證的連續性與安全性尤為關鍵。無感刷新Token技術通過智能的雙Token機制,確保用戶訪問憑證在不打擾用戶的前提下自動續期,避免因Token過期導致的頻繁登錄中斷。本文結合領碼SPARK融合平臺的…

聲網對話式 AI:開啟我的編程進階之旅

轉行學習編程時,復雜的代碼邏輯常讓我無從下手,直到遇見聲網對話式AI。它像一位耐心的導師,不僅用通俗易懂的語言幫我理解Python循環嵌套等難點,還提供實際代碼示例。當我開發學生成績管理系統時,它甚至直接生成框架代…