複数列の均一レイアウトの問題に対する CSS 完全互換のソリューション
問題を解決する際に互換性は考慮されません。質問は自由で、思いついたことを何でも言ってください。問題を解決する際に馴染みのない CSS プロパティがある場合は、できるだけ早く学習してください。
更新し続けて、更新し続けて、更新し続けて、重要なことは3回言います。
6. 完全に互換性のある複数列の均一なレイアウトの問題
次の複数列の均一なレイアウトを実現する方法 (図内の直線はコンテナの幅を示すためのものであり、含まれていません):
方法 1: display:flex
display:flex
CSS3 弹性盒子(Flexible Box 或 Flexbox),是一种布局方式,当页面需要适应不同的屏幕大小以及设备类型时,它依然能确保元素拥有更恰当的排布行为。
当然 flex 布局应用于移动端不错,PC 端需要全兼容的话,兼容性不够,此处略过不谈。
法二:借助伪元素及 text-align:justify
定义如下 HTML
样式:
<p class="container"> <p class="justify"> <i>1</i> <i>2</i> <i>3</i> <i>4</i> <i>5</i> </p> </p>
我们知道,有个 text-align:justify 可以实现两端对齐文本效果。
text-align
CSS属性定义行内内容(例如文字)如何相对它的块父元素对齐。text-align 并不控制块元素自己的对齐,只控制它的行内内容的对齐。
text-align:justify
表示文字向两侧对齐。
一开始我猜测使用它可以实现,采用如下 CSS :
.justify{ text-align: justify; } .justify i{ width:24px; line-height:24px; display:inline-block; text-align:center; border-radius:50%; }
结果如下:
Demo戳我
没有得到意料之中的结果,并没有实现所谓的两端对齐,查找原因,在 W3C 找到这样一段解释:
最后一个水平对齐属性是
justify
,它会带来自己的一些问题。CSS 中没有说明如何处理连字符,因为不同的语言有不同的连字符规则。规范没有尝试去调和这样一些很可能不完备的规则,而是干脆不提这个问题。
额,我看完上面一大段解释还是没明白上面意思,再继续查证,才找到原因:
虽然 text-align:justify
属性是全兼容的,但是要使用它实现两端对齐,需要注意在模块之间添加[空格/换行符/制表符]才能起作用。
也就是说每一个 1 间隙,至少需要有一个空格或者换行或者制表符才行。
好的,我们尝试一下更新一下 HTML
CSS3 フレキシブル ボックス (フレキシブル ボックスまたはフレックスボックス) は、ページをさまざまなレイアウトに適応させる必要がある場合のレイアウト方法です。画面サイズとデバイスの種類にかかわらず、要素の配置動作がより適切になることが保証されます。
🎜方法 2: 疑似要素と
text-align:justify
を使用します🎜🎜🎜 は次のように定義されます HTML</code > style: 🎜🎜🎜 🎜🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><p class="container">
<p class="justify">
<i>1</i>
<i>2</i>
<i>3</i>
<i>4</i>
<i>5</i>
</p>
</p></pre><div class="contentsignin">ログイン後にコピー</div></div>🎜🎜 テキストの両端を揃える効果を実現できる text-align:justify があることはわかっています。 🎜🎜<blockquote>🎜🎜<code>text-align
CSS プロパティは、インライン コンテンツ (テキストなど) をそのブロックの親要素に対してどのように配置するかを定義します。 text-align は、ブロック要素自体の配置を制御せず、そのインライン コンテンツの配置のみを制御します。 🎜🎜🎜🎜text-align:justify
は、テキストが両側に揃えられることを意味します。 🎜🎜🎜🎜最初は、次の CSS を使用して実現できるのではないかと考えました: 🎜🎜🎜🎜🎜.justify{ text-align: justify; text-align-last: justify; // 新增这一行 } .justify i{ width:24px; line-height:24px; display:inline-block; text-align:center; border-radius:50%; }
![CSS 完全互換複数列との互換性 均一な列レイアウトの問題の解決策」/>🎜🎜🎜🎜デモで突っ込まれました🎜🎜🎜🎜🎜🎜🎜🎜 期待した結果が得られず、いわゆる両端の位置合わせを実装していませんでした理由を探していると、W3C で次の説明を見つけました:🎜🎜<blockquote>🎜🎜 最後の水平方向の配置属性は <code>justify</code> ですが、これが独自の問題を引き起こします。言語ごとにハイフンのルールが異なるため、CSS にはハイフンの処理方法についての説明がありません。このような不完全な可能性のあるルールを調整しようとするのではなく、仕様は単にその問題を無視しています。 🎜🎜</blockquote>🎜🎜 さて、上記の説明を読んだ後も意味が分かりませんでしたが、調べ続けた結果、次の理由が見つかりました。 🎜🎜🎜🎜 <code>text-align:justify </code> 属性は完全に互換性がありますが、両端の位置合わせを行うために使用するには、機能させるためにモジュール間に [スペース/改行/タブ] を追加することに注意する必要があります。 🎜🎜🎜🎜つまり、<em>1</em> 個のギャップには少なくとも 1 つのスペース、改行、またはタブ文字が必要です。 🎜🎜🎜🎜それでは、同じ CSS を使用して <code>HTML</code> 構造を更新してみましょう: 🎜🎜🎜🎜🎜<div class= 複数列の均一レイアウトの問題に対する CSS 完全互換のソリューション](https://img.php.cn/upload/article/000/000/013/d084b49a2e0f7de01971d92c91d6ce18-1.png)
.justify{ text-align: justify; } .justify i{ width:24px; line-height:24px; display:inline-block; text-align:center; border-radius:50%; } .justify:after { content: ""; display: inline-block; position: relative; width: 100%; }
啊哦,还是不行啊。
再寻找原因,原来是出在最后一个元素上面,然后我找到了 text-align-last
这个属性,text-align-last
属性规定如何对齐文本的最后一行,并且 text-align-last
属性只有在 text-align
属性设置为 justify
时才起作用。
尝试给容器添加 text-align-last:justify
:
.justify{ text-align: justify; text-align-last: justify; // 新增这一行 } .justify i{ width:24px; line-height:24px; display:inline-block; text-align:center; border-radius:50%; }
发现终于可以了,实现了多列均匀布局:
结束了?没有,查看一下 text-align-last
的兼容性:
但是一看兼容性,惨不忍睹,只有 IE8+ 和 最新的 chrome 支持 text-align-last
属性,也就是说,如果你不是在使用 IE8+ 或者 最新版的 chrome 观看本文,上面 Demo 里的打开的 codePen 例子还是没有均匀分布。
上面说了要使用 text-align:justify
实现多列布局,要配合 text-align-last
,但是它的兼容性又不好,真的没办法了么,其实还是有的,使用伪元素配合,不需要 text-align-last
属性。
我们给 class="justify"
的 p
添加一个伪元素:
.justify{ text-align: justify; } .justify i{ width:24px; line-height:24px; display:inline-block; text-align:center; border-radius:50%; } .justify:after { content: ""; display: inline-block; position: relative; width: 100%; }
去掉了 text-align-last: justify
了,增加一个伪元素,效果如下:
通过给伪元素 :after
设置 inline-block
设置宽度 100%
,配合容器的 text-align: justify
就可以轻松实现多列均匀布局了。再多配合几句 hack 代码,可以实现兼容到 IE6+ ,最重要的是代码不长,很好理解。
那么为什么使用了 :after 伪元素之后就可以实现对齐了呢?
原因在于 justify 只有在存在第二行的情况下,第一行才两端对齐,所以在这里,我们需要制造一个假的第二行,而 :after 伪元素正好再适合不过。
最终实现题目初始所示:
以上が複数列の均一レイアウトの問題に対する CSS 完全互換のソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します

回答:ブートストラップの日付ピッカーコンポーネントを使用して、ページで日付を表示できます。手順:ブートストラップフレームワークを紹介します。 HTMLで日付セレクター入力ボックスを作成します。ブートストラップは、セレクターにスタイルを自動的に追加します。 JavaScriptを使用して、選択した日付を取得します。

ブートストラップスプリットラインを作成するには2つの方法があります。タグを使用して、水平方向のスプリットラインを作成します。 CSS Borderプロパティを使用して、カスタムスタイルのスプリットラインを作成します。

Bootstrapフレームワークをセットアップするには、次の手順に従う必要があります。1。CDNを介してブートストラップファイルを参照してください。 2。独自のサーバーでファイルをダウンロードしてホストします。 3。HTMLにブートストラップファイルを含めます。 4.必要に応じてSASS/LESSをコンパイルします。 5。カスタムファイルをインポートします(オプション)。セットアップが完了したら、Bootstrapのグリッドシステム、コンポーネント、スタイルを使用して、レスポンシブWebサイトとアプリケーションを作成できます。

ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

ブートストラップの日付を確認するには、次の手順に従ってください。必要なスクリプトとスタイルを紹介します。日付セレクターコンポーネントを初期化します。 Data-BV-Date属性を設定して、検証を有効にします。検証ルール(日付形式、エラーメッセージなどなど)を構成します。ブートストラップ検証フレームワークを統合し、フォームが送信されたときに日付入力を自動的に検証します。

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。
