Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 久草国产在线观看,99在线精品视频在线观看,日本亚洲精品色婷婷在线影院

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          css grid 布局的那些事兒

          css grid 布局的那些事兒

          SS Grid 是一種為 Web 開發創建網站布局的方式。它已經存在了很多年,隨著更多瀏覽器的支持,它終于變得越來越流行。

          接下來我們將了解下 CSS Grid 及其工作原理。了解下它如何使用。

          CSS 網格簡介

          隨著布局系統的不斷發展,CSS 也取得了長足的進步。隨著 CSS Grid 的發布,我們終于有了一個強大的工具來創建二維布局。如今,設計師和開發人員正在使用各種布局系統,如 Flexbox 甚至純 CSS 來創建令人驚嘆的響應式網站。但是當涉及到某些任務時,這些方法中的每一種都有其自身的局限性。在這種情況下,CSS Grid 可以派上用場!

          CSS 網格架構

          有兩種使用 CSS 網格布局的方法:隱式和顯式。使用隱式網格,您只需定義所需的列數,瀏覽器將自動創建網格。使用顯式網格,您可以定義列數和行數。這使您可以更好地控制布局,但設置起來可能更復雜。

          它是一個二維布局系統。這意味著它可以處理列和行。然而,與主要是一維的傳統 CSS 布局不同,CSS Grid 旨在同時處理兩個維度。

          它是一個基于容器的布局系統。這意味著它適用于作為容器元素的子元素的元素。容器元素定義網格,子元素放置在網格單元格中。

          它是一個響應式布局系統。這意味著它可以適應不同的屏幕尺寸和分辨率。CSS Grid 也很靈活,這意味著它可以用于從簡單到復雜的各種布局。

          它是在現有的 CSS 盒子模型之上構建的。這意味著它可以與任何現有的 CSS 代碼庫一起使用。但是,它還具有一些使其獨一無二的新功能。

          CSS Grid 獨一無二的功能

          • 提供使用基于行的定位將項目放置在網格上的能力。這使得創建非常復雜的布局成為可能,而無需使用傳統的浮動或絕對定位。
          • 提供跨越列和行的能力。換句話說,您可以擁有跨越多列或多行的項目。
          • 提供通過使用行號和名稱或通過定位網格的特定區域將項目放置在特定位置的能力。還包括一個算法來控制未明確放置在網格上的項目的放置。
          • 提供控制項目放置在網格區域內后如何對齊以及網格整體對齊方式的能力。
          • 提供使用像素創建使用固定軌道大小的網格的能力 - 將網格設置為適合您所需布局的指定像素。您還可以使用百分比或 fr 單位來指定靈活的軌道大小。

          所有這些功能在正確使用時都可以創建在任何屏幕尺寸上都能很好顯示的響應式布局。

          使用 CSS 網格的好處

          在構建網頁時使用 CSS Grid 有很多好處。主要好處之一是它可以更輕松地創建復雜的布局。使用 CSS Grid,您可以創建具有多列和多行的布局,并且可以輕松控制頁面上每個元素的大小和位置。

          CSS Grid 的另一個好處是它有助于保持代碼整潔有序。使用傳統的 CSS,您的代碼很容易變得混亂且難以閱讀。但是,使用 CSS Grid,您的所有樣式都應用于網格,這使您的代碼更易于閱讀和理解。

          創建網格布局

          您需要首先定義一個容器元素并為其分配一個類名。此元素將包含您的所有內容。在容器內部,您將定義一系列子元素,每個子元素將占據網格的特定區域。您可以使用各種屬性來控制這些元素的大小和位置。之后,將以下 CSS 代碼添加到您的樣式表中:

          .container {
              display: grid;
          }

          這將創建一個網格布局,其中一列包含所有子元素。

          網格父屬性

          網格父元素是應用了 display: grid 屬性的元素。它可以是任何類型的元素。

          網格父元素的屬性:

          • grid-template-columns:此屬性定義列數和每列的寬度。
          • grid-template-rows:此屬性定義行數和每行的高度。
          • grid-gap:此屬性定義列和行之間的空間。

          網格子屬性

          CSS Grid 中的子屬性用于定義網格項的大小、位置和其他方面。這些是可以應用于網格元素的一些主要子屬性:

          • grid-column:此屬性用于指定網格中列的大小和位置。此屬性的語法是“ grid-column: ”。
          • grid-row:該屬性用于指定行在網格中的大小和位置。此屬性的語法是“ grid-row: ”。
          • grid-area:該屬性用于指定網格中某個區域的大小和位置。此屬性的語法是“ grid-area: ”。

          使用列和行

          網格允許您指定布局中的列數和行數,然后將元素放置在這些列和行中。

          grid-template-columns 您可以使用和 grid-template-rows 屬性控制列和行的寬度。例如,您可以使用以下代碼創建三列布局:

          .container {
              display: grid;
              grid-template-columns: 100px 200px 300px;
          }

          您還可以使用百分比或分數來控制列寬。例如,以下代碼將創建三列,第一列的寬度是第二列的兩倍,第三列的寬度是第三列的三倍:

          .container {
              display: grid;
              grid-template-columns: 50% 33.33% 25%;
          }

          在布局中指定列數和行數后,您可以使用 grid-column 和 grid-row 屬性將元素放置在這些列和行中。例如,如果您有一個三列布局,您可以使用以下代碼在第一列中放置一個元素:

          .container {
              display: grid;
              grid-template-columns: repeat(3, 1fr); /* 3 columns, each 1/3 width of the container */
              grid-column: 1;
          }

          結論

          如果你沒有使用過 grid 布局,或者使用過,但是用的不多的話,那么我建議您可以多嘗試下,因為當你用的多的時候,你就會發現,它是真的好用。

          原創,翻譯自An Interactive Guide to CSS Grid

          建議結合閱讀原文,原文示例可交互

          介紹

          CSS Grid 是 CSS 語言里最令人贊嘆的部分之一,它為我們提供了許多新型工具,可以用這些工具來創建精致且流暢的布局。

          它還出人意料地復雜。我花了相當長的時間才真正適應 CSS 網格!

          本教程中,我將分享我在學習 CSS 網格布局時獲得的最大 啟發時刻。你將學習這種布局模式的基礎知識,并了解如何用它做一些很酷的事情。?

          瀏覽器支持?

          CSS Grid 是構建 CSS 布局最現代的工具,但它并不是 “前沿” 技術;它自 2017 年以來就受到所有主流瀏覽器的支持!

          根據 caniuse 的數據,CSS Grid 擁有 97.8% 的用戶支持率。支持程度非常高;Flexbox 的支持率也僅高出 0.5% 左右!

          心智模型

          CSS 由多種不同的布局算法組成,每種算法都針對不同類型的用戶界面而設計。默認布局算法流式布局(Flow layout)適用于數字文檔。表格布局(Table layout)適用于表格數據。彈性盒布(Flexbox)局用于沿單個軸分布項目。

          CSS 網格(Grid)是最新且最佳的布局算法。它非常強大:我們可以用它基于一些條件構建靈活調整的復雜布局。

          在我看來,CSS Grid 最不尋常的部分是它僅使用 CSS 定義了網格結構(即行和列):

          使用用 CSS Grid,可以將一個 DOM 節點細分為行與列。在本教程中,我們使用虛線高亮顯示行/列,但實際上它們都是不可見的。

          這真是太奇怪了!在其他所有布局模式中,創建這樣的分隔區域唯一的方法就是增加更多的 DOM 節點。例如,在表格布局中,每一行都是用一個 <tr> 來創建的,而該行內的每個單元格則使用 <td> 或 <th> 來實現:

          <table>
            <tbody>
              <!-- First row -->
              <tr>
                <!-- Cells in the first row -->
                <td></td>
                <td></td>
                <td></td>
              </tr>
              <!-- Second row -->
              <tr>
                <!-- Cells in the second row -->
                <td></td>
                <td></td>
                <td></td>
              </tr>
            </tbody>
          </table>
          

          不同于表格布局,CSS 網格允許我們完全在 CSS 內部管理布局。我們可以按照自己的意愿切割容器,創建出網格子元素可以作為錨點使用的分隔區域。

          Grid 布局

          我們通過 display 屬性選擇進入網格布局模式:

          .wrapper {
            display: grid;
          }

          默認情況下,CSS 網格使用單列,并將根據子項的數量根據需要創建行。這被稱為隱式網格,因為我們沒有明確定義任何結構。

          工作原理如下:

          隱式表格是動態的,會根據子元素的數量添加或移除行。每個子元素都有它自己的行。

          默認情況下,網格容器的高度由其子元素決定。它會動態地增長和縮小。有趣的是,這甚至不是“CSS 網格”的特性;網格容器仍然使用流式布局,而流式布局中的塊級元素會垂直增長以包含它們的內容。只有子元素是使用網格布局來排列的。

          但如果我們給網格設定一個固定的高度呢?在那種情況下,總面積會被劃分成等大小的行:

          Grid 排列

          默認情況下,CSS 網格會創建一個單列布局。我們可以使用 grid-template-columns 屬性來指定列:

          向 grid-template-columns 傳入兩個值 — 25% 和 75% — 我告訴 CSS 網格算法將元素切分成兩列。

          列可以用任何合法的 CSS 值來定義,包括像素、rem、視口單位等等。此外,我們還可以使用一個新的單位,也就是fr單位:

          “fr”表示“fraction”。在這個示例中,我們說第一列應占據 1 個單位的空間,而第二列占據 3 個單位的空間。這意味著共有 4 個單位的空間,這將成為分母。第一列消耗了可用空間的 ?,而第二列消耗了 ?。

          fr 單位為 CSS 網格帶來了 Flexbox 風格的靈活性。百分比和 <length> 值創建固定約束,而 fr 列可以根據需要自由增長和縮小,以包含它們的內容。

          請嘗試增減該容器,以查看差別:

          在這種場景下,我們的第一列有一個毛茸茸的小幽靈,顯示的寬度明確為 55 像素。但如果列太小無法包含它該怎么辦?

          • 基于百分比的列是固定的,因此我們的虛像會“溢出”,溢出到列之外。
          • 基于fr的列是靈活的,即使這意味著破壞了比例,列也不會縮小到其最小內容大小以下。

          更確切地說,fr 分配的是多余空間。首先,列寬將根據其內容進行計算。如果有任何剩余空間,它將根據 fr 值進行分配。這與 flex-grow 非常相似,如我在 Flexbox 交互式指南 中所述。

          總體而言,這種靈活性是一件好事。百分比太死板了。

          我們可以通過 gap 看到這個原理的一個非常好的例子。gap 是一個神奇的 CSS 屬性,它可以在網格中的所有列和行之間添加固定數量的間距。

          看看當我們在百分比和小數間切換時會發生什么:

          當使用百分比時,注意內容是如何溢出網格父元素的嗎?這是因為百分比是使用網格的總面積計算的。兩個列占用了父元素內容區域的 100%,并且不允許它們縮小。當我們添加 16px 的間距時,這些列別無選擇,只能溢出容器。

          相反,fr 單位是根據額外的空間來計算的。在這種情況下,額外的空間因 gap 而減少了 16 像素。CSS 網格算法會在兩個網格列之間分配剩余的空間。

          隱式和顯式行

          如果我們向一個兩列的網格中添加超過兩個子元素會發生什么?

          好吧,我們來嘗試一下:

          有趣!我們的網格產生了新的行。grid算法想要確保每個子項都有它自己的網格單元格。它會根據需要生成新行,以實現這一目標。在項目數量變化的情況下(例如照片網格),且希望網格自動擴展時,這非常方便。

          在其他情況下,我們想要顯式的定義行,創建特定的布局。我們可以使用 grid-template-rows 屬性來完成此操作:

          通過定義 grid-template-rows 和 grid-template-columns,我們創建了一個明確的網格。這是構建頁面布局的完美選擇,例如本教程頂部的“圣杯”布局。

          repeat方法

          想象一下我們要創建一個日歷:

          CSS 網格是用于這種類型事情的非常棒的工具。我們可以將其構建為 7 列網格,每列占用 1 個單位的空間:

          這種方法可行,但不得不數每個 1fr 項有點煩人。想象一下,如果我們有 50 列!

          幸運的是,有一個更優雅的解決方案:

          .calendar {
            display: grid;
            grid-template-columns: repeat(7, 1fr);
          }

          repeat 函數將為我們完成復制/粘貼。我們說我們需要 7 列,每一列的寬度都是 1fr。

          子元素排列

          默認情況下,CSS 網格算法會將每個子元素分配到第一個未占用的網格單元格,很像一個熟練工人在地板上鋪瓷磚一樣。

          不過最棒的是:我們可以把項目分配到我們想要的任何單元格里!孩子們甚至可以在多行/多列中展開。

          這是一個展示此工作原理的交互式演示。點擊/按住并拖動以將孩子放在網格中:

          .parent {
            display: grid;
            grid-template-columns:
              repeat(4, 1fr);
            grid-template-rows:
              repeat(4, 1fr);
          }
          .child {
            grid-row: 2;
            grid-column: 2;
          }

          grid-row 和 grid-column 屬性允許我們指定網格子元素應占據哪個軌道。

          如果我們希望孩子占用單獨一行或列,我們可以通過其編號來指定它。grid-column: 3 會將孩子設置在第三列中。

          網格子組件也可以跨多行/列拉伸。其語法是使用斜杠來定義開始和結束:

          .child {
            grid-column: 1 / 4;
          }

          乍一看,這看起來像一個分數 ?。然而,在 CSS 中,斜杠字符不用于除法,它用于分隔值組。在這種情況下,它允許我們在一個聲明中設置開始和結束列。

          這是一種簡寫,它相當于:

          .child {
            grid-column-start: 1;
            grid-column-end: 4;
          }

          這里有一個狡猾的陷阱:我們提供的值是基于列的“線”而不是列的“索引”。

          從一張圖中,最容易理解這個陷阱:

          .child {
            grid-row: 2 / 4;
            grid-column: 1 / 4;
          }

          雖然令人費解,但一個 4 列的網格實際上有 5 條列線。當我們將一個子元素分配到網格時,我們使用這些線來錨定它們。如果我們想要子元素跨越前 3 列,它需要從第 1 條線開始,并在第 4 條線上結束。

          Grid areas

          好的,現在要談談 CSS Grid 最酷的部分之一。

          假設我們要建立此布局:

          根據我們目前已經學到的東西,我們可以構建如下這種結構:

          .grid {
            display: grid;
            grid-template-columns: 2fr 5fr;
            grid-template-rows: 50px 1fr;
          }
          .sidebar {
            grid-column: 1;
            grid-row: 1 / 3;
          }
          header {
            grid-column: 2;
            grid-row: 1;
          }
          main {
            grid-column: 2;
            grid-row: 2;
          }
          

          這種方法可行,但有一種更符合人體工學的方法可以用:網格區域

          看看它長什么樣:

          .parent {
            display: grid;
            grid-template-columns: 2fr 5fr;
            grid-template-rows: 50px 1fr;
            grid-template-areas:
              'sidebar header'
              'sidebar main';
          }
          .child {
            grid-area: sidebar;
          }

          一如既往,我們使用 grid-template-columns 和 grid-template-rows 定義網格結構。然后,我們有了這個奇怪的聲明:

          .parent {
            grid-template-areas:
              'sidebar header'
              'sidebar main';
          }

          這原理如下:我們正在畫我們想要創建的表格,有點像我們制作 ASCII 藝術一樣。每一行表示一行,每個單詞都是我們給表格特定部分起的名字。明白它為何從視覺上看起來像表格了嗎?

          于是,我們不再為子元素分配 grid-column 和 grid-row,而是為其分配 grid-area!

          當我們希望某個區域跨越多行或多列時,可以在模板中重復此區域的名稱。在此示例中,“sidebar”區域跨越兩行,因此我們為第一列中的兩個單元格都編寫了“sidebar”。

          應該使用區塊還是行/列呢?在構建像這樣明確的布局時,我非常喜歡使用區塊。這可以讓我為我的網格分配賦予語義含義,而不是使用難以理解的行/列編號。話雖如此,只有當網格有固定數量的行和列時,區塊才能發揮最佳作用。grid-column 和 grid-row 可以用于隱式網格。

          鍵盤問題

          網格分配存在一個很大的問題:標簽順序仍將基于 DOM 位置,而非網格位置。

          我們用一個例子來說明一下,在這個 playground 中,我準備了一組按鈕,并用 CSS Grid 進行布局。

          <div class="wrapper">
            <button class="btn one">
              One
            </button>
            <button class="btn four">
              Four
            </button>
            <button class="btn six">
              Six
            </button>
            <button class="btn two">
              Two
            </button>
            <button class="btn five">
              Five
            </button>
            <button class="btn three">
              Three
            </button>
          </div>

          按鈕似乎有順序。從左向右、從上到下閱讀,我們從一到六。

          如果你有帶鍵盤的設備,請嘗試通過這些按鈕來切換。 您可以先點擊左上角的第一個按鈕(“一”),然后連續按 Tab 鍵,逐個切換按鈕。

          您應該看到類似這樣的內容:

          用戶看來,焦點輪廓沒有任何道理地跳躍到頁面的各個部分。發生這種情況是因為按鈕的焦點基于它們在 DOM 中的順序。

          為了修復這個問題,我們應該在 DOM 中重新排列網格的子元素,以便它們與可視順序匹配,這樣我就可以從左到右,從上至下進行制表鍵切換。

          對齊

          在迄今為止的所有示例中,我們的列和行都延伸來填充整個網格容器。但這種情況并非一定要發生!

          例如,我們定義了兩個 90px 寬的列。只要網格父級大于 180px,那么就會在末端產生一些空白:

          通過 justify-content 屬性,我們可以控制列分布:

          如果您熟悉 Flexbox 布局算法,那么這聽起來可能很熟悉。CSS Grid 基于 Flexbox 首次引入的對齊屬性,并將這些屬性發揮到了極致。

          最大的區別是,我們要調整的是 ,而不是元素本身。實質上,justify-content 讓我們可以整理網格的隔間,以我們希望的方式在網格中分布。

          如果我們想在列內對齊項目本身,我們可以使用 justify-items 屬性:

          當我們將一個 DOM 節點放入網格父元素中時,默認行為是使其跨越該列的整個寬度,就像流布局中的 <div> 會水平拉伸以填充其容器一樣。但是使用 justify-items 可以調整這種行為。

          這很有用,因為它允許我們擺脫列的剛性對稱。當我們把 justify-items 設置為 stretch 以外的其他值時,子項將縮小至由其內容確定的默認寬度。結果,同一列中的項目可以具有不同的寬度。

          我們可以使用 justify-self 屬性來控制一個特定的網格子項的對齊方式:

          與用于設置網格父級并控制所有網格子元素對齊方式的 justify-items 不同,justify-self 是在子元素上設置的。我們可以將 justify-items 看作在所有網格子元素上設置 justify-self 的默認值的方式。

          對齊行

          迄今為止,我們一直在談論如何在水平方向上對齊內容。CSS 網格布局提供了一組額外的屬性,用以在垂直方向上對齊內容:

          align-content與justify-content類似,但它影響的是行而不是列。類似地,align-items與justify-items類似,但它處理的是網格區域內項目_垂直_對齊方式,而不是水平對齊方式。

          更進一步分解為:

          • justify——處理列。
          • align — 處理行。
          • content — 處理 網格結構
          • item ——處理網格結構中的 DOM節點。

          最后,除了justify-self,我們還有align-self。該屬性控制單元格內單個網格項的垂直位置。

          水平垂直居中

          還有一件事我必須給你演示一下。這是我喜歡的小技巧之一,用 CSS Grid 實現的。

          使用僅有的兩個 CSS 屬性,我們可以讓子元素在容器中居中,無論水平還是垂直方向:

          .parent {
            display: grid;
            place-content: center;
          }

          place-content 是一個簡寫形式屬性。它等同于以下代碼:

          .parent {
            justify-content: center;
            align-content: center;
          }

          正如我們已經了解的,justify-content 控制了列的位置。align-content 控制了行的位置。在這種情況下,我們有一個具有一個子項的隱式網格,因此我們最終得到一個 1×1 網格。place-content: center 將行和列都推到中心位置。

          在現代 CSS 中有多種方法可以使 div 居中,但是這是我知道的唯一一種只需要兩個 CSS 聲明的方法!

          更多內容

          本教程涵蓋了 CSS 網格布局算法的一些基本內容,但老實說,我們還沒有談論過 很多東西

          如果你覺得這篇博文有幫助,你可能會對這個我精心制作的學習資源感興趣,它非常深入。它叫《 CSS for JavaScript Developers.》。

          本課程使用了與我的博客相同的技術,因此其充滿了交互式說明。但也包含一些小視頻、練習題、靈感源自現實世界的項目,甚至還有一些小游戲。

          如果您覺得此博客文章有幫助,您會喜歡這門課程。它遵循類似的方法,但適用于整個 CSS 語言,并通過動手練習來確保您確實在發展新的技能。

          專為使用 React/Angular/Vue 等 JS 框架的人打造。80% 的課程將教授 CSS 基礎,我們還會學習如何將這些基礎知識集成到現代 JS 應用程序中,如何構建 CSS 等。

          如果你在學習 CSS 的時候遇到困難,我希望你能試試它。尤其在你已經熟悉 HTML 和 JS 的情況下,掌握 CSS 是能夠徹底改變游戲規則的。當你掌握了三者之后,你便可以更容易地進入狀態,真正地享受 Web 應用程序的開發。

          希望這個指南對您有用。??

          最后更新

          2023年11月22日

          . 流式定位

          這是網頁元素默認的定位方式,網頁元素按照其HTML標簽的先后順序,在網頁內依次顯示,就像液體一樣“流動”,所以稱為“流式定位”,這種方式將所有網頁元素的默認顯示方式分為以下幾種類型:

          塊級元素(display: block) 可以設置寬度,默認寬度為100%,但不管多寬都會獨占一行,多個塊級元素按從上到下的順序縱向顯示,默認顯示為塊級元素的包括:段落(p)、層(div)、表單(form)等。

          內聯元素(display: inline) 不會獨占一行,可以多個元素共享一行,按從左至右的順序橫向顯示,默認顯示為內聯元素的包括:文本標簽(label)、鏈接(a)等。

          行內塊元素(display: inline-block) 這種定位方式兼具塊級元素和內聯元素的優勢,既可以像塊級元素一樣設置寬度和高度,又可以一行放置多個,默認顯示為內聯元素的包括:圖片(img)、輸入項(input)、多行文本(textarea)等。

          可以通過設置HTML元素的CSS樣式的display屬性來改變元素默認的流式定位方式,例如將層(div)元素設置為行內塊元素后,就可以跟文本標簽(label)、圖片(img)等元素放在同一行顯示,不再獨占一行。

          流式定位存在一些問題,主要包括:

          l 塊級元素很難被有效利用起來,因為其獨占一行的特性,不能一行顯示多個。

          l 內聯元素無法設置寬度、高度和垂直方向邊距,不好精確控制元素大小和顯示位置。

          l 內聯元素之間水平方向會因為代碼中的空格、換行等產生間隙,垂直方向存在默認的底部間隙,這給水平布局帶來額外的麻煩。

          2. 浮動定位

          浮動定位會讓元素脫離原來的標準文檔流浮動起來,直至它的外邊緣遇到父元素的內邊緣或者另一個兄弟浮動元素的外邊緣。

          任何HTML元素都可以設置為浮動,可以通過設置HTML元素的CSS樣式的float屬性來設置具體的浮動方式,可以選擇向左浮動(float: left)或向右浮動(float: right)。

          相對于網頁默認的流式定位,浮動定位有以下優勢:

          l 多個塊級元素可以共享一行。

          l 內聯元素可以設置寬度和高度。

          l 元素之間的空格、換行不影響元素的顯示位置。

          浮動定位最初被設計出來是為了實現文字環繞圖片顯示的效果,但由于其上述優勢,后來大家也用浮動定位來設置更多網頁元素的位置,代替默認的流式定位,也是TaskBuilder默認的組件定位方式。

          不過,浮動定位也有一些問題,不是所有的場合都適合,大家根據需要選擇,這些問題包括:

          l 居中對齊問題:浮動定位不太好實現垂直和水平居中對齊。

          l 父元素的高度塌陷問題:如果元素不浮動,會自動撐開父元素的高度,浮動后,由于浮動元素已經脫離原來的標準流,如果父元素沒有設置高度,且父元素中沒有其他非浮動元素時,會造成父元素的高度塌陷(高度變成了0)。

          3. 坐標定位

          坐標定位是指為HTML元素設置上下左右的偏移量來確定其具體的顯示位置或大小,通過設置元素CSS的position屬性,可以選擇坐標定位的具體方式,包括:

          相對定位(position: relative)即相對于元素在流式定位時的正常位置進行定位,您可以通過 top、right、bottom、left 這 4 個CSS屬性來設置元素相對于正常位置的偏移量,在此過程中不會對其它元素造成影響。


          相對定位示意圖

          絕對定位(position: absolute)即相對于第一個非靜態定位的父級元素進行定位,可以通過 top、right、bottom、left 這 4 個屬性來設置元素相對于父級元素位置的偏移量。如果沒有滿足條件的父級元素,則會相對于瀏覽器窗口來進行定位。元素使用絕對定位后,其他標準流元素會填補它的位置。絕對定位可以通過設置元素CSS樣式的left和top屬性來精確控制元素的顯示位置,再設置right或bottom這兩個CSS樣式,實現元素的寬度或高度根據父元素的寬度和高度動態設置和變化。


          絕對定位示意圖

          固定定位(position: fixed)即相對于瀏覽器的窗口進行定位,可以使用 top、right、bottom、left 這 4 個CSS屬性來定義元素相對于瀏覽器窗口的位置。使用固定定位的元素無論如何滾動瀏覽器窗口,元素的位置都是固定不變的。

          粘性定位(position: sticky)它是相對定位和固定定位的結合體,能夠實現類似吸附的效果,當滾動頁面時它的效果與相對定位相同,當元素要滾動到屏幕之外時則會自動變成固定定位的效果。用粘性定位很容易實現元素置頂顯示的效果。

          4. 表格定位

          顧名思義,表格定位就是用表格來實現網頁內容的定位,先繪制一個多行多列的表格,并設定表格各列的寬度和各行的高度,然后在表格的單元格里插入相關網頁元素,最終實現這些元素的位置定位。

          這種定位方式比較適合可以將頁面內容清晰明確地劃分為多行多列的場景,例如各種業務單據和數據報表等。

          有兩種方式可以實現表格布局: HTML Table(<table>標簽)和CSS Table(display:table 等相關屬性)。HTML Table是早期網頁設計采用的表格定位方式,由于其渲染性能較低,且有些界面效果較難實現,用的人已經比較少了,現在推薦使用CSS Table,能實現一些HTML Table做不到的效果。

          目前,TaskBuilder只是在報表設計器里集成了一個第三方的表格插件,在前端tfp頁面設計器里,還沒有提供表格定位相應的容器組件,未來會提供。(現有的可編輯表格和數據表格不是用來為其他組件提供定位的,所以不能算作是表格定位的容器組件)

          5. 彈性定位

          彈性定位又叫彈性布局,這種定位方式最大的特點就是可以讓子元素的大小可以根據父元素的大小自動擴張或收縮,從而可以做到自動適應不同終端的屏幕尺寸,或者在用戶改變瀏覽器窗口大小時自動伸縮。

          這種定位方式需要先將一個父元素的CSS屬性display設置為flex,然后該元素里的子元素即可實現彈性定位。

          采用彈性定位的容器元素可以設置以下CSS樣式:

          元素排列方向(flex-direction):用來設置子元素的排列方向,有四種方式可以選擇:從左到右顯示(row)、從右到左顯示(row-reverse)、從上到下顯示(column)、從下到上顯示(column-reverse)。


          元素水平對齊方式(justify-content):用來設置子元素在水平方向的對齊方式,可以選左對齊(flex-start)、右對齊(flex-end)、居中對齊(center)、兩端對齊(space-between)和等距對齊(space-around)。


          元素垂直對齊方式(align-items):用來設置子元素在垂直方向的對齊方式,可以選頂部對齊(flex-start)、底部對齊(flex-end)、居中對齊(center)、基線對齊(baseline)、自動伸展(stretch)。


          內容整體對齊方式(align-content):當有多行子元素時,可以用該屬性設置全部子元素整體的垂直對齊方式,包括自動拉伸(stretch)、在容器的頂部排列(flex-start)、在容器的底部排列(flex-end)、在容器內居中排列(center)、均勻分布,上下靠邊(space-between)、均勻分布,每行等距(space-around)。



          元素是否自動換行(flex-wrap):用來設置子元素是否自動換行。

          彈性定位容器內的子元素可以設置以下CSS樣式:

          擴展量(flex-grow):必須參數,用來設置當前元素相對于其他元素的增長量,默認值為 0,即如果存在剩余空間,也不自動放大。

          如果所有元素的擴展量都設置為1,將等分剩余空間。如果一個元素的擴展量設置為2,其他元素都為1,則前者占據的剩余空間將是其他項的2倍,如下圖所示:

          收縮量(flex-shrink):必須參數,用來設置當彈性容器空間不足時,該元素相對于其他元素的收縮量,默認值為 1。如果所有元素的flex-shrink屬性都為1,當空間不足時,都將等比例縮小。如果一個元素的flex-shrink屬性為0,其他元素都為1,則空間不足時,前者不縮小。

          基準長度(flex-basis):必須參數,元素的基準長度定義了父容器在分配多余空間之前,當前元素占據的主軸空間(main size,如果是橫向排列,則指父容器在水平方向的空間,如果是縱向排列,則指父容器在垂直方向的空間)。瀏覽器根據這個屬性,計算主軸是否有多余空間。合法值為 auto(默認值,表示根據其他情況自動伸縮),或者以具體的值加 "%"、"px"等單位的形式,表示該元素將占據固定空間。

          顯示順序(order):屬性用來設置元素在容器中出現的順序,您可以通過具體的數值來定義元素在容器中的位置,默認值為 0。下圖所示的四個普通的面板組件,在彈性面板里從左至右的正常插入順序是panel1、panel2、panel3、panel4,但通過設置這四個面板的顯示順序,將panel1和panel4的顯示位置進行了調換。

          對齊方式(align-self):該屬性允許您為某個特定的元素設置不同于其它元素的對齊方式,該屬性可以覆蓋父容器組件(彈性面板)里的垂直對齊屬性的值。該屬性的可選頂部對齊(flex-start)、底部對齊(flex-end)、居中對齊(center)、基線對齊(baseline)、自動伸展(stretch)。

          由于彈性定位的自動伸縮特性,且易于實現子元素的水平和垂直對齊,目前很多主流的前端UI框架都大量地采用了該定位方式。


          主站蜘蛛池模板: 精品女同一区二区三区免费播放| 色婷婷一区二区三区四区成人网| 一区二区三区精密机械| 成人乱码一区二区三区av| 在线观看精品视频一区二区三区| 亚洲av高清在线观看一区二区| 亚洲一区二区三区久久久久| 精品无码综合一区| 成人免费一区二区无码视频 | 97人妻无码一区二区精品免费| 亚洲一区二区三区在线播放| 正在播放国产一区| 久久无码AV一区二区三区 | 国模吧一区二区三区精品视频| 中文字幕人妻丝袜乱一区三区 | 人妻内射一区二区在线视频| 亚洲一区二区三区高清不卡| 国精品无码一区二区三区在线蜜臀| 亚洲av无一区二区三区| 一本大道在线无码一区| 在线播放偷拍一区精品| 无码国产精品一区二区免费式影视| 精品无码日韩一区二区三区不卡| 亚洲欧洲一区二区三区| 无码毛片一区二区三区中文字幕| 精品国产一区二区三区不卡| 麻豆天美国产一区在线播放| 亚洲一区二区三区免费视频| 久久无码人妻一区二区三区午夜| 亚洲精品一区二区三区四区乱码| 无码欧精品亚洲日韩一区| 99久久综合狠狠综合久久一区| 91精品国产一区| 久久精品无码一区二区三区免费| 蜜臀AV无码一区二区三区| 精品一区二区三区无码免费直播 | 亚洲av无码一区二区三区人妖| 无码少妇丰满熟妇一区二区| 欧美成人aaa片一区国产精品| 国内精自品线一区91| 一区二区三区电影网|