ホームページ  >  記事  >  ウェブフロントエンド  >  いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

WBOY
WBOYオリジナル
2016-09-29 09:19:08993ブラウズ

このシリーズを開始して、いくつかの興味深い CSS トピックについて説明します。実用性はさておき、いくつかのトピックは、問題を解決するためのアイデアを広げることを目的としています。また、見落とされがちな CSS の詳細も含まれています。

問題を解決する際に互換性は考慮されません。質問は自由で、思いついたことを何でも言ってください。問題を解決する際に馴染みのない CSS プロパティがある場合は、できるだけ早く学習してください。

更新し続けて、更新し続けて、更新し続けて、重要なことは3回言います。

興味深い CSS トピックについて話しましょう (1) -- 左側の垂直バーを実装する方法

CSSの面白い話題について話しましょう(2) – ストライプボーダーの実装からボックスモデルについての話

興味深い CSS トピックについて話しましょう (3) – スタック順序とスタック コンテキストについてどれくらい知っていますか

いくつかの興味深い CSS トピックについて話しましょう (4) – リフレクションから始めて、CSS の継承継承について話しましょう

いくつかの興味深い CSS トピックについて話しましょう (5) - 1 行を中央揃え、2 行を中央揃え、3 行以上を省略する

すべてのトピックは私の Github にまとめられています。

6. 完全に互換性のある複数列の均一なレイアウトの問題

次の複数列の均一なレイアウトを実現する方法 (コンテナの幅を示すために、画像内の直線は含まれていません):

いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

方法 1: display:flex

CSS3 フレキシブル ボックス (フレキシブル ボックスまたはフレックスボックス) は、ページがさまざまな画面サイズやデバイスの種類に適応する必要がある場合でも、要素がより適切に配置されるようにすることができるレイアウト方法です。

もちろん、フレックス レイアウトはモバイル アプリケーションに適しています。PC に完全な互換性が必要な場合は、互換性だけでは十分ではないため、ここでは省略します。

方法 2: 疑似要素と text-align:いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

を使用する

は次のように定義されます HTML スタイル:

リーリー

テキストの両端を揃える効果を実現できる text-align:いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題 があることはわかっています。

text-align CSS プロパティは、インライン コンテンツ (テキストなど) をそのブロックの親要素に対してどのように配置するかを定義します。 text-align は、ブロック要素自体の配置を制御せず、そのインライン コンテンツの配置のみを制御します。

text-align:いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題は、テキストが両側に揃えられていることを意味します。

最初は、次の CSS を使用して実現できるのではないかと考えました:

リーリー

结果如下:

いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

 

Demo戳我

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

最后一个水平对齐属性是 いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題,它会带来自己的一些问题。CSS 中没有说明如何处理连字符,因为不同的语言有不同的连字符规则。规范没有尝试去调和这样一些很可能不完备的规则,而是干脆不提这个问题。

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

虽然 text-align:いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題 属性是全兼容的,但是要使用它实现两端对齐,需要注意在模块之间添加[空格/换行符/制表符]才能起作用。

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

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

<div class="container">
    <div class="いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題">
        <i>1</i>

        <i>2</i>

        <i>3</i>

        <i>4</i>

        <i>5</i>

    </div>
</div>

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

いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

Demo戳我

啊哦,还是不行啊。

再寻找原因,原来是出在最后一个元素上面,然后我找到了 text-align-last 这个属性,text-align-last属性规定如何对齐文本的最后一行,并且 text-align-last 属性只有在 text-align 属性设置为 いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題 时才起作用。

尝试给容器添加 text-align-last:いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

.いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題{
  text-align: いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題;
  text-align-last: いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題; // 新增这一行
}

.いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題 i{
  width:24px;
  line-height:24px;
  display:inline-block;
  text-align:center;
  border-radius:50%;
}

发现终于可以了,实现了いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題:

o_いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題2

Demo戳我

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

いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

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

上面说了要使用 text-align:いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題 实现多列布局,要配合 text-align-last ,但是它的兼容性又不好,真的没办法了么,其实还是有的,使用伪元素配合,不需要 text-align-last 属性。

我们给 class="いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題" 的 div 添加一个伪元素:

.いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題{
  text-align: いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題;
}

.いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題 i{
  width:24px;
  line-height:24px;
  display:inline-block;
  text-align:center;
  border-radius:50%;
}

.いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題:after {
  content: "";
  display: inline-block;
  position: relative;
  width: 100%;
}

が削除され、疑似要素が追加されました。 効果は次のとおりです: text-align-last: いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

o_いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題2

デモをクリックすると、任意の数の列が均等にレイアウトされます

疑似要素 を与えることで、複数の列の均一なレイアウトを簡単に実現できます。さらにいくつかのハック コードを追加することで、IE6 以降と互換性を持たせることができます。最も重要なことは、コードが長くなく、理解しやすいことです。 :after 设置 inline-block 设置宽度 100% ,配合容器的 text-align: いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

問題の最終的な実現は冒頭に示したとおりです:

いくつかの興味深い CSS の問題について話しましょう (6) – 完全に互換性のある複数列の均一レイアウトの問題

デモをクリックすると、任意の数の列が均等にレイアウトされます

この方法は、元のブロガーの同意を得てこのシリーズに初めて記載されました:

  • あまり考えすぎないでください、両端が揃っているだけです

より多くの交流を得るために、すべてのトピックは私の Github にまとめられ、ブログに投稿されます。

この記事はこれで終わりです。まだ質問や提案がある場合は、オリジナルの記事ですので、記事に何か間違っている点があれば、お知らせください。私にお知らせください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。