搜尋
首頁web前端html教學談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題

開本系列,討論一些有趣的 CSS 題目,拋開實用性而言,一些題目為了拓寬一下解決問題的思路,此外,涉及一些容易忽視的 CSS 細節。

解題不考慮相容性,題目天馬行空,想到什麼說什麼,如果解題中有你感覺到生僻的 CSS 屬性,趕緊去補習一下吧。

不斷更新,不斷更新,不斷更新,重要的事情說三次。

談一些有趣的CSS題目(一)-- 左邊豎條的實作方法

談談一些有趣的CSS題目(二)-- 從條紋邊框的實現談盒子模型

談一些有趣的CSS題目(三)-- 層疊順序與堆疊上下文知多少

談一些有趣的CSS題目(四)-- 從倒影說起,談談 CSS 繼承 inherit

談一些有趣的CSS題目(五)-- 單行居中,兩行居左,超過兩行省略

所有題目總結在我的 Github 。

 

6、全相容的多列均勻佈局問題

如何實現下列這種多列均勻佈局(圖中直線為了展示容器寬度,不算在內):

談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題

法一:display:flex

CSS3 彈性盒子(Flexible Box 或 Flexbox),是一種佈局方式,當頁面需要適應不同的螢幕大小以及裝置類型時,它依然能確保元素擁有更恰當的排布行為。

當然 flex 佈局應用於行動端不錯,PC 端需要全相容的話,相容性不夠,此處略過不談。

 

法二:借助偽元素及 text-align:談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題

定義如下 HTML 樣式:

<div class="container">
    <div class="談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題">
        <i>1</i>
        <i>2</i>
        <i>3</i>
        <i>4</i>
        <i>5</i>
    </div>
</div>

我們知道,有個 text-align:談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 可以實現兩端對齊文字效果。

text-align CSS屬性定義行內內容(例如文字)如何相對它的塊父元素對齊。 text-align 不控制區塊元素自己的對齊,只控制它的行內內容的對齊。

text-align:談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 表示文字向兩側對齊。

一開始我猜測使用它可以實現,採用以下 CSS :

.談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題{
  text-align: 談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題;
}

.談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 i{
  width:24px;
  line-height:24px;
  display:inline-block;
  text-align:center;
  border-radius:50%;
}

结果如下:

談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題

 

Demo戳我

没有得到意料之中的结果,并没有实现所谓的两端对齐,查找原因,在 W3C 找到这样一段解释:

最后一个水平对齐属性是 談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題,它会带来自己的一些问题。CSS 中没有说明如何处理连字符,因为不同的语言有不同的连字符规则。规范没有尝试去调和这样一些很可能不完备的规则,而是干脆不提这个问题。

额,我看完上面一大段解释还是没明白上面意思,再继续查证,才找到原因:

虽然 text-align:談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 属性是全兼容的,但是要使用它实现两端对齐,需要注意在模块之间添加[空格/换行符/制表符]才能起作用。

也就是说每一个 1 间隙,至少需要有一个空格或者换行或者制表符才行。

好的,我们尝试一下更新一下 HTML 结构,采用同样的 CSS:

<div class="container">
    <div class="談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題">
        <i>1</i>

        <i>2</i>

        <i>3</i>

        <i>4</i>

        <i>5</i>

    </div>
</div>

尝试给每一块中间添加一个换行符,结果如下:

談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題

Demo戳我

啊哦,还是不行啊。

再寻找原因,原来是出在最后一个元素上面,然后我找到了 text-align-last 这个属性,text-align-last属性规定如何对齐文本的最后一行,并且 text-align-last 属性只有在 text-align 属性设置为 談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 时才起作用。

尝试给容器添加 text-align-last:談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題

.談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題{
  text-align: 談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題;
  text-align-last: 談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題; // 新增这一行
}

.談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 i{
  width:24px;
  line-height:24px;
  display:inline-block;
  text-align:center;
  border-radius:50%;
}

发现终于可以了,实现了談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題:

o_談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題2

Demo戳我

结束了?没有,查看一下 text-align-last 的兼容性:

談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題

但是一看兼容性,惨不忍睹,只有 IE8+ 和 最新的 chrome 支持 text-align-last 属性,也就是说,如果你不是在使用 IE8+ 或者 最新版的 chrome 观看本文,上面 Demo 里的打开的 codePen 例子还是没有均匀分布。

上面说了要使用 text-align:談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 实现多列布局,要配合 text-align-last ,但是它的兼容性又不好,真的没办法了么,其实还是有的,使用伪元素配合,不需要 text-align-last 属性。

我们给 class="談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題" 的 div 添加一个伪元素:

.談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題{
  text-align: 談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題;
}

.談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 i{
  width:24px;
  line-height:24px;
  display:inline-block;
  text-align:center;
  border-radius:50%;
}

.談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題:after {
  content: "";
  display: inline-block;
  position: relative;
  width: 100%;
}

去掉了 text-align-last: 談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題 了,增加一個偽元素,效果如下:

o_談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題2

Demo戳我,任意列數均勻版面

透過給偽元素 :after 設定 inline-block 設定寬度 100% ,而配合容器的均勻再配合幾句 hack 程式碼,可以實現相容到 IE6+ ,最重要的是程式碼不長,很好理解。

最終實現題目初始所示:

談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題

Demo戳我,任意列數均勻版面

 

此方法初見於這篇文章,得到原博主同意寫入了本系列,非常值得一看:

    別想太多了,只不過是兩端對齊而已
  •  

所有題目總結在我的 Github ,發到博客希望得到更多的交流。

到此本文結束,如果還有什麼疑問或建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
&lt; datalist&gt;的目的是什麼。 元素?&lt; datalist&gt;的目的是什麼。 元素?Mar 21, 2025 pm 12:33 PM

本文討論了html&lt; datalist&gt;元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

&gt; gt;的目的是什麼 元素?&gt; gt;的目的是什麼 元素?Mar 21, 2025 pm 12:34 PM

本文討論了HTML&lt; Progress&gt;元素,其目的,樣式和與&lt; meter&gt;元素。主要重點是使用&lt; progress&gt;為了完成任務和LT;儀表&gt;對於stati

&lt; meter&gt;的目的是什麼。 元素?&lt; meter&gt;的目的是什麼。 元素?Mar 21, 2025 pm 12:35 PM

本文討論了HTML&lt; meter&gt;元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了&lt; meter&gt;從&lt; progress&gt;和前

視口元標籤是什麼?為什麼對響應式設計很重要?視口元標籤是什麼?為什麼對響應式設計很重要?Mar 20, 2025 pm 05:56 PM

本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

&lt; iframe&gt;的目的是什麼。 標籤?使用時的安全考慮是什麼?&lt; iframe&gt;的目的是什麼。 標籤?使用時的安全考慮是什麼?Mar 20, 2025 pm 06:05 PM

本文討論了&lt; iframe&gt;將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。

我如何使用html5&lt; time&gt; 元素以語義表示日期和時間?我如何使用html5&lt; time&gt; 元素以語義表示日期和時間?Mar 12, 2025 pm 04:05 PM

本文解釋了HTML5&lt; time&gt;語義日期/時間表示的元素。 它強調了DateTime屬性對機器可讀性(ISO 8601格式)的重要性,並在人類可讀文本旁邊,增強Accessibilit

HTML5中跨瀏覽器兼容性的最佳實踐是什麼?HTML5中跨瀏覽器兼容性的最佳實踐是什麼?Mar 17, 2025 pm 12:20 PM

文章討論了確保HTML5跨瀏覽器兼容性的最佳實踐,重點是特徵檢測,進行性增強和測試方法。

如何使用HTML5表單驗證屬性來驗證用戶輸入?如何使用HTML5表單驗證屬性來驗證用戶輸入?Mar 17, 2025 pm 12:27 PM

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境