検索
ホームページウェブフロントエンドhtmlチュートリアルCSS Secret Garden: 隣接要素 Style_html/css_WEB-ITnose

『CSS Secrets』は @Lea Verou による最新の本で、CSS に関する小さな秘密がいくつか説明されています。これは CSSers にとって読む価値のある本です。一定期間読んだ後、私、@全域と @彦子は、関連する読書感想文を W3cplus で公開し、皆さんと共有します。

問題

多くの場合、要素の兄弟要素を異なるスタイルで表示する必要があります。主な使用例は、ユーザー エクスペリエンスを向上させ、大画面での推奨事項のリストを増やすことです。以下にいくつかの使用シナリオを示します。

メール リストまたは同様のテキストベースのリスト表示。リスト項目が少数しかない場合は、それらを個別に表示できます。リスト項目が大きくなるにつれて、リスト内のプレビュー項目の数を減らすことができます。リストの高さがウィンドウの高さよりも高い場合、一部のリスト項目を非表示にしたり、ユーザーがスクロール バーをスクロールせずにリストを参照できるように最後に「さらに表示」ボタンを追加したりすることもできます。

アプリ内のTo-Doリスト(やることリスト)では、いくつかのリスト項目に大きな文字スタイルを設定できますが、リスト項目の数が増えると、リスト項目は大きな文字スタイルに設定されます。フォントサイズが小さくなります。

色を表示するために使用されるパレットアプリ。下図のように、色数が増えるにつれてそのスペースを利用してカラーコントロールパネルをコンパクトにしたい場合があります。

色数が増えるにつれてカラーコントロールポートを縮小し、使用可能なスペースを減らします。特別な場合、色が 1 つしかない場合、削除ボタンは非表示になることに注意してください。

複数の

ただし、隣接する兄弟に対してターゲット要素を選択することは、単純な CSS セレクターではありません。たとえば、リストの合計数が 4 の場合、リストに異なるスタイルを与えます。 :nth-child(4) を使用してリストの 4 番目の項目を選択できますが、これはリストの合計数が 4 の場合にリスト内のすべての項目を選択する必要があるわけではありません。

1 つのアイデアは、li:nth-child(4),li:nth-child(4)~li のように、ユニバーサル セレクター ( ~ ) を :nth-child() セレクターと組み合わせて使用​​することです。 。次の図に示すように、リスト項目の総数に関係なく、4 番目の項目とそれ以降のすべてのリスト項目のみが選択されます。

「後方セレクター」がないため、選択要素 兄弟要素用の以前のセレクターでは、CSS は必要なターゲット要素を選択できない運命にあるのでしょうか?私たちは信仰を失ってはなりません。何でも可能です。

解決策

列項目が 1 つだけあるという特殊なケースがあり、明白な解決策があります::only-child セレクター。このセレクターはこのケース専用です。これは非常に便利なので、仕様に追加されました。たとえば、前述のカラー コントロール パネル APP は、色が 1 つしかない場合に削除ボタンを非表示にするため、:only-child セレクターを使用してこれを実現できます。

li:only-child {    /* 当只有一个列表项时的样式 */}

このセクションでは :nth-child() セレクターについて説明しますが、この説明はすべて :nth-of-type() セレクターにも同様に当てはまります。通常、このタイプのセレクターを使用すると、コンテナー内に異なるタイプの兄弟要素が存在するため、1 つのタイプのみを考慮する必要があります。この説明では例としてリスト要素を使用しますが、説明した内容はすべて任意のタイプの要素に当てはまります。

ただし、 :only-child は :first-child:last-child と同等であり、最初と最後の項目であり、論理的にはそれが唯一の項目であることになります。実際、:last-child は :nth-last-child(1) の省略形です。

li:first-child:nth-last-child(1) {    /* 和li:only-child等同 */}

もちろん、ここで 1 はパラメータであり、このパラメータは好みに応じて調整できます。 li:first-child:nth-last-child(4) で選択されたターゲットを推測できますか?リストの総数が 4 個の場合、:only-child の対象要素が選択されると答えるのは、少し楽観的すぎるかもしれません。実際にはそうではありませんが、正しい選択の目標にどんどん近づいています。それぞれ :first-child と :nth-last-child(4) という 2 つのセレクターを考えてみましょう。したがって、要素の最初の子からカウントが開始され、同時に 4 番目の子から最後の子までカウントされます。では、どの要素がこの範囲を満たすのでしょうか?

正解は、以下に示すように、4 要素リストの最初の要素のみが選択されていることです。

これは私たちが望む結果ではありませんが、必要な効果に非常に近いです。リスト内の最初の子要素を選択したので、ユニバーサル セレクター ( ~ ) を使用して、最初の子要素の後に隣接する兄弟要素を選択できます。このようにして、リストにリスト項目が 4 つしかない場合、すべてのリスト項目が選択されます。これはまさに私たちが達成しようとしていることです:

li:first-child:nth-last-child(4),li:first-child:nth-last-child(4) ~ li {    /* 目标选择了仅有四个列表项的列表所有列表项 */}

コードの長くて反復的な解決策を回避するには、SCSS などのプリプロセッサを使用できます。既存のプリプロセッサ構文は図よりも不格好ですが:

/* 定义mixin */@mixin n-items($n) {    &:first-child:nth-last-child(#{$n}),    &:first-child:nth-last-child(#{$n}) ~ & {@content; }}/* 像这样使用 */li {    @include n-items(4) {        /* 这里写样式 */    }}

选择兄弟元素范围

在大多数实际运用中,我们并不希望瞄准特定数量的列表,而是希望在一个范围内。有一个小技巧,我们可以使用 :nth-child() 选择器来指定一个选择范围。例如选择第四个之后的列表项。除了使用简单的数字作为参数之外,还可以使用 an+b 表达式作为参数(例如: :nth-child(2n+1) ),其中 n 是一个变量,范围是从 0 到 +∞ (实际上,值在某点不会选择任何东西,因为我们元素的数量是有限的)。如果我们使用一个表达式 n+b ( a 默认下是 1 ),那么,如果 n 不是一个正整数时可以给我们一个小于 b 值的范围。因此,表达式 n+b 可以用来第 b 个值为第一个子元素所有子元素。例如: :nth-child(n+4) 选择除了第一、第二、第三的所有子元素。如下图所示:

如果你不想为 :nth-* 选择器做过多的思考,你可以使用一个测试工具,我写了一个 在线的工具 ,足够你做测试。

我们可以利用这个功能来选择列表项是四个或更多的列表子元素,如下图所示:

在这种情况下,我们可以在 :nth-last-child() 使用 n+4 这个表达式:

li:first-child:nth-last-child(n+4),li:first-child:nth-last-child(n+4) ~ li {    /* 目标列表选择最少包含四个列表项 */}

同样,表达式 -n+b 可以用来选择第 b 个元素。因此,选择仅有四个或更少的列表项的列表的所有子元素时,就可以使用这种表达式。

如上图所示,我们代码可以这样写:

li:first-child:nth-last-child(-n+4),li:first-child:nth-last-child(-n+4) ~ li {    /* 选择列表项最多只有四个的列表所有子元素 */}

当然,我们可以结合这两个,但现在的代码变得更加笨拙。假设我们列表包含 2~6 项的列表所有子元素:

li:first-child:nth-last-child(n+2):nth-last-child(-n+6),li:first-child:nth-last-child(n+2):nth-last-child(-n+6) ~ li{    /*选择包含2-6个列表项的列表所有子元素*/}
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTMLの未来:ウェブデザインの進化とトレンドHTMLの未来:ウェブデザインの進化とトレンドApr 17, 2025 am 12:12 AM

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

HTML対CSS対JavaScript:比較概要HTML対CSS対JavaScript:比較概要Apr 16, 2025 am 12:04 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

HTML:それはプログラミング言語か何か他のものですか?HTML:それはプログラミング言語か何か他のものですか?Apr 15, 2025 am 12:13 AM

htmlisnotaprogramminglanguage; itisamarkuplanguage.1)htmlStructuresandformatswebcontentusingtags.2)ItworkswithcsssssssssdjavascriptforInteractivity、強化を促進します。

HTML:Webページの構造の構築HTML:Webページの構造の構築Apr 14, 2025 am 12:14 AM

HTMLは、Webページ構造の構築の基礎です。 1。HTMLは、コンテンツ構造とセマンティクス、および使用などを定義します。タグ。 2. SEO効果を改善するために、などのセマンティックマーカーを提供します。 3.タグを介したユーザーの相互作用を実現するには、フォーム検証に注意してください。 4. JavaScriptと組み合わせて、動的効果を実現するなどの高度な要素を使用します。 5.一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれ、検証ツールが必要です。 6.最適化戦略には、HTTP要求の削減、HTMLの圧縮、セマンティックタグの使用などが含まれます。

テキストからウェブサイトへ:HTMLの力テキストからウェブサイトへ:HTMLの力Apr 13, 2025 am 12:07 AM

HTMLは、Webページを構築するために使用される言語であり、タグと属性を使用してWebページの構造とコンテンツを定義します。 1)htmlは、などのタグを介してドキュメント構造を整理します。 2)ブラウザはHTMLを分析してDOMを構築し、Webページをレンダリングします。 3)マルチメディア関数を強化するなど、HTML5の新機能。 4)一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれます。 5)最適化の提案には、セマンティックタグの使用とファイルサイズの削減が含まれます。

HTML、CSS、およびJavaScriptの理解:初心者向けガイドHTML、CSS、およびJavaScriptの理解:初心者向けガイドApr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割:Webコンテンツの構造HTMLの役割:Webコンテンツの構造Apr 11, 2025 am 12:12 AM

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

HTMLとコード:用語を詳しく見るHTMLとコード:用語を詳しく見るApr 10, 2025 am 09:28 AM

htmlisaspecifictypeofcodefocuseduructuringwebcontent

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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