検索
ホームページウェブフロントエンドCSSチュートリアル純粋な CSS を使用してフィルター メニュー機能を実装する

この記事では、純粋な CSS を使用して、淘宝網のベビー フィルター メニューのような効果を実現します。この例は淘宝網ほど強力ではありませんが、原理は少し工夫すれば、淘宝網と同じ効果を達成することもできます。 。皆さんのお役に立てれば幸いです。

コンテンツ フィルタリングは、Web、特に電子商取引 Web サイトの一般的な機能であり、ユーザーがコンテンツをフィルタリングして、要件を満たすコンテンツのみを表示できるようにします。この機能は、淘宝網などのスクリーンショットでわかりやすく説明できます:


純粋な CSS を使用してフィルター メニュー機能を実装する



上の図に示すように、ユーザーは 1 着のドレスを購入したいと考えています。 、製品リスト全体に表示される製品が多すぎます。顧客は自分が着たいドレスをどうやって選べばよいのか分かりません。上部にカテゴリがあり、顧客が必要なオプションを選択すると、条件を満たさない製品が除外されます。上の写真では「エレガント」なスカートを選びました。もちろん、さらに多くの条件を選択することもできます。ここではこれ以上多くは言いません。

とはいえ、以前はそのような効果を実現するには JavaScript (または jquery ベースのプラグイン) が必要でした。たとえば、CodyHouse のコンテンツ フィルタリングの例です。しかし、JavaScript を理解していない学生にとって (理解できないことは理由にはなりません)、同様の機能を実装するのは確かに困難です (私自身の経験では、涙が止まらず泣きそうになることがあります。始まり)。

幸いなことに、パペットは JavaScript なしで実装できるようになりました。つまり、純粋な CSS を使用して、より単純な機能を備えたコンテンツ フィルターを実装することは難しくありません。これが今日皆さんと共有したいことです。

まず例を見てみましょう

まず簡単な例を見てみましょう。ページが読み込まれると、女性用の服、男性用の服、子供用の服が一緒に表示されます。次の操作を行うと、予期せぬ効果が得られます。

「婦人服」ボタンをクリックすると、「紳士服」と「子供服」の両方が除外されます

「紳士服」ボタンをクリックすると、「婦人服」と「子供服」の両方が除外されますフィルタリングされます

「子供服」ボタンをクリックすると、「婦人服」と「紳士服」がフィルタリングされます

もちろん、このケースの機能はタオバオのようなNBではなく、Haodaiですも同様のコンテンツフィルタリング機能を完成させています。


実装原理

この機能の実装原理は実際にはそれほど複雑ではありませんが、誰もが注目していません。これは 2 つの側面に要約できます:


強力なセレクター

この機能を実現するには、主にユニバーサル兄弟セレクター (E ~ F) と疑似クラス セレクターに依存します: 強力な CSS セレクターでチェックされます。ラジオ ボタンが選択されると、他のカテゴリのコンテンツが非表示になります:

input[type="radio"]{
    &[id="men"]:checked {
        ~ .women,
        ~ .children{
            ....
        }
    }
}

上記のスタイルを通じて対応する .women 要素と .children 要素を制御するには、要素と input 要素が兄弟要素であることを確認する必要があります。これは、以下で説明する 2 番目の重要なポイントでもあります。


優れた、一致する構造

CSS のみを使用してこの機能を作成するには、構造の乱れが必要な効果に直接影響するため、厳密な構造が必要です。これは欠点でもあります。その 1 つは、ラジオ ボタン「ラジオ」を使用してラベルを一致させることです。見栄えを良くするために、 を表示したくない場合は、ラベルの for 属性を通じて選択した「ラジオ」を制御する必要があります。したがって、入力の id 値はラベルの for 値と一致する必要があります。さらに、すべての入力の名前の値は同じであり、それらがグループに属していることをブラウザーに伝えます。例:

<input type="radio" id="men" name="clothing" />
<label for="men">男装</label>
<input type="radio" id="women" name="clothing"/>
<label for="women">女装</label>
<input type="radio" id="children" name="clothing"/>
<label for="children">童装</label>
<input type="radio" id="reset" name="clothing"/>
<label for="reset">重置</label>

実装手順

実装原理を理解した後は、記事の冒頭の例の効果を完了するのがはるかに簡単になります。


HTML

HTML の構造は実際には非常に単純です。input と label の一致と、フィルター対象の content 要素とその兄弟要素に注意するだけです。たとえば、この例では、コンテンツ要素の 3 つの主要なカテゴリ (紳士服.男性、婦人服.女性、子供服.子供) があります。

<p class="container">
    <!-- 必须保证input和label匹配 -->
    <input type="radio" id="men" name="clothing " />
    <label for="men">男装</label>
    <input type="radio" id="women" name="clothing "/>
    <label for="women">女装</label>
    <input type="radio" id="children" name="clothing "/>
    <label for="children">童装</label>
    <input type="radio" id="reset" name="clothing "/>
    <label for="reset">重置</label>
    <!-- 要被过滤的内容元素需要与input元素是兄弟元素 -->
    <p class="tile men">
        <img src="/static/imghwm/default1.png"  data-src="" alt="  class="lazy"   alt="">
    </p>
    <p class="tile women">
        <img src="/static/imghwm/default1.png"  data-src="" alt="  class="lazy"   alt="">
    </p>
    <p class="tile children">
        <img src="/static/imghwm/default1.png"  data-src="" alt="  class="lazy"   alt="">
    </p>
    <!-- 此处省略N个.men、.women和.children元素 -->
</p>

SCSS

原理を理解していれば、より簡単になります。まず全体のコードを見てみましょう:

body{
  margin:0;
  text-align:center;
  font-family: Verdana;
  background:#f5f5f5;
}
h1 {
  text-align:center;
}
.container {
  width:90%;
  margin:0 auto;
}
input[type="radio"] {
  display:none;
}
label {
  width:23%;
  float:left;
  text-align:center;
  background:#ffffff;
  box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
  color:#222222;
  padding:0.5%;
  margin:0.5%;
  margin-bottom:30px;
  cursor:pointer;
}
input[type="radio"]{
  &[id="men"]:checked {
    * label {
      background:#6666ff;
    }
    ~ .women,
    ~ .children {
      width:0;
      height:0;
      padding:0;
      margin:0;
      opacity:0;
    }
  }
  &[id="women"]:checked {
    * label {
      background:#ff4466;
    }
    ~ .men,
    ~ .children {
      width:0;
      height:0;
      padding:0;
      margin:0;
      opacity:0;
    }
  }
  &[id="children"]:checked {
    * label {
      background:#66dd99;
    }
    ~ .men, 
    ~ .women {
      width:0;
      height:0;
      padding:0;
      margin:0;
      opacity:0;
    }
  }
}
.tile {
  width:23%;
  float:left;
  transition:all 1s;
  margin:0.5%;
  padding:0.5%;
  background:#6666ff;
  img {
      width: 100%;
    }
}

このスタイル コードを簡単に分析します。

ページの見栄えを良くするために、まず を非表示にします:

input[type="radio"] {
  display:none;
}

ラベルの for 属性を使用してラジオが選択されるかどうかを制御します。ラベル スタイルを美しくする:

label {
    width:23%;
    float:left;
    text-align:center;
    background:#ffffff;
    box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
    color:#222222;
    padding:0.5%;
    margin:0.5%;
    margin-bottom:30px;
    cursor:pointer;
}

次のスタイル コードも最も重要な部分です。入力が選択されている場合、ラベル スタイルは次のとおりです:

input[type="radio"]{
  &[id="men"]:checked {
      label {
      background:#6666ff;
    }
  }
  ...
}

上記のコードは 選択すると、チェックすると、隣接するラベルの背景色が変わります。

前の原則の紹介によれば、「紳士服」を選択した場合、「婦人服」と「子供服」を非表示にする必要があることがわかります。ここでは、それらは偽のイメージ、つまり input[type] によって隠されています。 ="radio"] [id="men"] が選択され、その類似の兄弟要素 .women と .children が非表示になります:

input[type="radio"]{
  &[id="men"]:checked {
    ...
    ~ .women,
    ~ .children {
      width:0;
      height:0;
      padding:0;
      margin:0;
      opacity:0;
    }
  }
}

其他两个选项也是类似的,就不在做过多的阐述。

美化的样式,这里就不说了,大家都懂的。

通过这个过程下来,你就能看到前面DEMO展示的效果了。
总结

本文主要介绍了如何依赖于CSS的属性选择器、通用相邻兄弟选择器和伪类选择器来实现一个简单的純粋な CSS を使用してフィルター メニュー機能を実装する的功能。在整个实例当中,要把握的是严谨的HTML结构,因为相邻兄弟选择器对于结构的依赖程度非常的强。也就是说结构修改之后,你的选择器和样式都要做一定的修改。
相关推荐:

最简洁的CSS学习笔记

全面总结css中属性值继承知识

css和js实现弹出登录居中界面教程

以上が純粋な CSS を使用してフィルター メニュー機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
2つの画像とAPI:製品のリクロッキングに必要なすべて2つの画像とAPI:製品のリクロッキングに必要なすべてApr 15, 2025 am 11:27 AM

最近、製品画像の色を動的に更新するソリューションを見つけました。したがって、製品の1つだけで、私たちはそれをさまざまな方法で色付けすることができます

毎週のプラットフォームニュース:サードパーティのコード、パッシブ混合コンテンツ、最も遅い接続のある国の影響毎週のプラットフォームニュース:サードパーティのコード、パッシブ混合コンテンツ、最も遅い接続のある国の影響Apr 15, 2025 am 11:19 AM

今週のラウンドアップでは、灯台はサードパーティのスクリプトに光を当て、安全なリソースが安全なサイトでブロックされ、多くの国の接続速度がブロックされます

独自の非JavaScriptベースの分析をホストするためのオプション独自の非JavaScriptベースの分析をホストするためのオプションApr 15, 2025 am 11:09 AM

サイトの訪問者と使用データを追跡するのに役立つ分析プラットフォームがたくさんあります。おそらく、特にGoogleアナリティクスが広く使用されています

それはすべて頭の中にあります:Reactヘルメットを使用してReact Poweredサイトのドキュメントヘッドを管理するそれはすべて頭の中にあります:Reactヘルメットを使用してReact Poweredサイトのドキュメントヘッドを管理するApr 15, 2025 am 11:01 AM

ドキュメントヘッドはウェブサイトの中で最も魅力的な部分ではないかもしれませんが、それに入るものは間違いなくあなたのウェブサイトの成功にとってそれと同じくらい重要です

JavaScriptのsuper()とは何ですか?JavaScriptのsuper()とは何ですか?Apr 15, 2025 am 10:59 AM

子のクラスでsuper()?を呼び出すJavaScriptを見たときに何が起こっているのか、Super()を使用して親のコンストラクターとSuperを呼び出します。そのアクセス

さまざまな種類のネイティブJavaScriptポップアップを比較しますさまざまな種類のネイティブJavaScriptポップアップを比較しますApr 15, 2025 am 10:48 AM

JavaScriptには、ユーザーインタラクション用の特別なUIを表示するさまざまな内蔵ポップアップAPIがあります。有名:

アクセス可能なWebサイトが構築が難しいのはなぜですか?アクセス可能なWebサイトが構築が難しいのはなぜですか?Apr 15, 2025 am 10:45 AM

先日、私は多くの企業がアクセス可能なウェブサイトを作るのに苦労している理由について、フロントエンドの人々とおしゃべりをしていました。アクセス可能なWebサイトがとても難しいのはなぜですか

「隠された」属性は目に見えて弱いです「隠された」属性は目に見えて弱いですApr 15, 2025 am 10:43 AM

あなたがそれがすべきだと思うことを正確に行うHTML属性があります:

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ヘンタイを無料で生成します。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版

SublimeText3 Mac版

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

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

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

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません