Googleが構造を2つのDIVに分解し、1つのDIVにはすべての画像セルが含まれており、もう1つのDIVは拡大領域用です。画像がクリックされ(および拡張された)、JavaScriptは、クリックされたDivの行に最後の画像セルの後にスペーサーDivを挿入します。 JavaScriptは、高さを拡張Divと同じに設定し、拡張されたDivをスペーサーDivが占める位置に完全に配置します。これは賢いですが、JavaScriptに大きく依存しているため理想的ではありません。
すべてのレイアウトとボックスモデルのプロパティにCSSを使用して、作業デモに発展することができたという基本的なアイデアがありました。必要な唯一のJavaScriptは、拡張トグルに基づいてクラス名を変更することです。
基本的なマークアップ
まず、.image __cellとともに.image-gridコンテナを構築する必要があります。これがHTMLです:
<span><span><span><section</span> class<span>="image-grid"</span>></span> </span> <span><span><span><div</span> class<span>="image__cell is-collapsed"</span>></span> </span> <span><span><span><div</span> class<span>="image--basic"</span>></span> </span> <span><span><span><a</span> href<span>="#expand-jump-1"</span>></span> </span> <span><span><span><img</span> id<span>="expand-jump-1"</span> </span></span><span> <span>class<span>="basic__img"</span> </span></span><span> <span>src<span>="https://lorempixel.com/250/250/fashion/1"</span> alt<span>="Fashion 1"</span>></span> </span> <span><span><span></a</span>></span> </span> <span><span><span><div</span> class<span>="arrow--up"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="image--expand"</span>></span> </span> <span><span><span><a</span> href<span>="#close-jump-1"</span> class<span>="expand__close"</span>></span><span><span></a</span>></span> </span> <span><span><span><img</span> class<span>="image--large"</span> </span></span><span> <span>src<span>="https://lorempixel.com/400/400/fashion/1"</span> alt<span>="Fashion 1"</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> ... <span><span><span></section</span>></span></span>
上記のマークアップには、グリッド内の各画像に対して複製する必要があるイメージセル要素の1つの例が含まれています。 #close-jump-1および#endax-jump-1の識別子に注意してください。その後のHREF属性は、.image__cellに固有のものである必要があります。次のようなハッシュリンク:href = "#Expand-JUMP-1"を使用すると、ブラウザが押されたときにアクティブな画像セルにジャンプできます。
css.image-grid要素にはclearfixオーバーフローが与えられます:hidden;画像セルフロートに基づいてレイアウトを維持するため
<span>/* apply a natural box layout model to all elements, </span><span> but allowing components to change */ </span> <span>html { </span> <span>box-sizing: border-box; </span><span>} </span> <span>*<span>, *:before, *:after</span> { </span> <span>box-sizing: inherit; </span><span>}</span>
画像セルに与えられる幅は、100に相当して、1列あたりのアイテム数で割って、パーセンテージとして表されます。この例では、行ごとに5つのアイテムがあります。つまり、各.image__cellの幅は20%です。
<span><span>.image-grid</span> { </span> <span>width: 100%; </span> <span>max-width: 1310px; </span> <span>margin: 0 auto; </span> <span>overflow: hidden; </span> <span>padding: 10px 5px 0; </span><span>} </span> <span><span>.image__cell</span> { </span> <span>float: left; </span> <span>position: relative; </span> <span>width: 20%; </span><span>} </span> <span><span>.image--basic</span> { </span> <span>padding: 0 5px; </span><span>} </span> <span><span>.basic__img</span> { </span> <span>display: block; </span> <span>max-width: 100%; </span> <span>height: auto; </span> <span>margin: 0 auto; </span><span>} </span> <span><span>.image__cell.is-collapsed .arrow--up</span> { </span> <span>display: block; </span> <span>height: 10px; </span> <span>width: 100%; </span><span>} </span> <span><span>.image--large</span> { </span> <span>max-width: 100%; </span> <span>height: auto; </span> <span>display: block; </span> <span>padding: 40px; </span> <span>margin: 0 auto; </span> <span>box-sizing: border-box; </span><span>}</span>
最後に、.basic__img画像要素に表示されます:ブロック;間隔の問題を防ぐため。 himax-width:100%;および高さ:自動;宣言により、画像はコンテナの幅にスケーリングできますが、独自の幅を超えないようにします。
以下のCSSは、拡張可能な領域のレイアウトを提供します。
上記のコードから奪うメモが次のとおりです。
カーソルは、崩壊した状態のみである場合に、.imageの上でホバリングするときにポインターに変化します。これにより、画像をクリックすると何かが行われるという視覚的なインジケーターがユーザーに与えられます。
<span><span>.image__cell.is-collapsed .image--basic</span> { </span> <span>cursor: pointer; </span><span>} </span> <span><span>.image__cell.is-expanded .image--expand</span> { </span> <span>max-height: 500px; </span> <span>margin-bottom: 10px; </span><span>} </span> <span><span>.image--expand</span> { </span> <span>position: relative; </span> <span>left: -5px; </span> <span>padding: 0 5px; </span> <span>box-sizing: content-box; </span> <span>overflow: hidden; </span> <span>background: #222; </span> <span>max-height: 0; </span> <span>transition: max-height .3s ease-in-out, </span> margin-bottom <span>.1s .2s; </span> <span>width: 500%; </span><span>}</span>
<span><span><span><section</span> class<span>="image-grid"</span>></span> </span> <span><span><span><div</span> class<span>="image__cell is-collapsed"</span>></span> </span> <span><span><span><div</span> class<span>="image--basic"</span>></span> </span> <span><span><span><a</span> href<span>="#expand-jump-1"</span>></span> </span> <span><span><span><img</span> id<span>="expand-jump-1"</span> </span></span><span> <span>class<span>="basic__img"</span> </span></span><span> <span>src<span>="https://lorempixel.com/250/250/fashion/1"</span> alt<span>="Fashion 1"</span>></span> </span> <span><span><span></a</span>></span> </span> <span><span><span><div</span> class<span>="arrow--up"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="image--expand"</span>></span> </span> <span><span><span><a</span> href<span>="#close-jump-1"</span> class<span>="expand__close"</span>></span><span><span></a</span>></span> </span> <span><span><span><img</span> class<span>="image--large"</span> </span></span><span> <span>src<span>="https://lorempixel.com/400/400/fashion/1"</span> alt<span>="Fashion 1"</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> ... <span><span><span></section</span>></span></span>
基本的なレイアウトが整っているので、ユーザーエクスペリエンスを向上させるためにいくつかのスタイルを追加できます。
最初に、拡張ブロックがどの画像に属しているかを示すための上流の矢印:
矢印スタイルは、CSSトライアングルを作成することで実現されるため、HTTPリクエストを保存することに注意してください。この効果は、境界を巧みに使用し、高さと幅を0に設定することで簡単に実現できます。
また、.image__cell要素が展開されている場合にのみ矢印が表示されたいと思います。これは、.IS拡張クラスの追加によって行われます。最後に、矢印を.image__cell要素の水平中心に留まるようにしたいので、マージン:0 auto;適用されます。
<span><span><span><section</span> class<span>="image-grid"</span>></span> </span> <span><span><span><div</span> class<span>="image__cell is-collapsed"</span>></span> </span> <span><span><span><div</span> class<span>="image--basic"</span>></span> </span> <span><span><span><a</span> href<span>="#expand-jump-1"</span>></span> </span> <span><span><span><img</span> id<span>="expand-jump-1"</span> </span></span><span> <span>class<span>="basic__img"</span> </span></span><span> <span>src<span>="https://lorempixel.com/250/250/fashion/1"</span> alt<span>="Fashion 1"</span>></span> </span> <span><span><span></a</span>></span> </span> <span><span><span><div</span> class<span>="arrow--up"</span>></span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="image--expand"</span>></span> </span> <span><span><span><a</span> href<span>="#close-jump-1"</span> class<span>="expand__close"</span>></span><span><span></a</span>></span> </span> <span><span><span><img</span> class<span>="image--large"</span> </span></span><span> <span>src<span>="https://lorempixel.com/400/400/fashion/1"</span> alt<span>="Fashion 1"</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> ... <span><span><span></section</span>></span></span>
a:pseudo-elementの前に、domに表示されずに「×」文字をページに挿入し、再び1つのHTTPリクエストを保存することができることに注意してください。挿入された特別な文字は、Boostrapも使用する乗算文字です。
jqueryにします
<span>/* apply a natural box layout model to all elements, </span><span> but allowing components to change */ </span> <span>html { </span> <span>box-sizing: border-box; </span><span>} </span> <span>*<span>, *:before, *:after</span> { </span> <span>box-sizing: inherit; </span><span>}</span>
<span><span>.image-grid</span> { </span> <span>width: 100%; </span> <span>max-width: 1310px; </span> <span>margin: 0 auto; </span> <span>overflow: hidden; </span> <span>padding: 10px 5px 0; </span><span>} </span> <span><span>.image__cell</span> { </span> <span>float: left; </span> <span>position: relative; </span> <span>width: 20%; </span><span>} </span> <span><span>.image--basic</span> { </span> <span>padding: 0 5px; </span><span>} </span> <span><span>.basic__img</span> { </span> <span>display: block; </span> <span>max-width: 100%; </span> <span>height: auto; </span> <span>margin: 0 auto; </span><span>} </span> <span><span>.image__cell.is-collapsed .arrow--up</span> { </span> <span>display: block; </span> <span>height: 10px; </span> <span>width: 100%; </span><span>} </span> <span><span>.image--large</span> { </span> <span>max-width: 100%; </span> <span>height: auto; </span> <span>display: block; </span> <span>padding: 40px; </span> <span>margin: 0 auto; </span> <span>box-sizing: border-box; </span><span>}</span>
この記事を書くときにSASSを使用しない読者を除外したくありませんでしたが、私もそれらを割引したくありませんでした。このプロジェクトは、行あたりのアイテムの数が非常に多くの異なるプロパティに関連しているため、開発のSASSの優れたユースケースとして自分自身を貸します。
次の代替Codepenデモをご覧ください。そのデモでは、CSSの上部にSASS変数を使用していることに注意してください。これにより、画像、最大画像幅、および行ごとの最小および最大画像の間のギャップを指定できることに注意してください。さまざまな計算を使用して、SASSは提供されたオプションに基づいてCSSにコンパイルされます。行ごとのアイテムの最大数に基づいて最適なメディアクエリを自動的に計算します。これにより、画像は最大寸法内に保持されます。このSASSバージョンは実験的ですが、通常のバージョンまたはSASSバージョンのいずれかでバグまたは潜在的なコードの改善に気付いた場合はお知らせください。Google画像の再作成に関するよくある質問(FAQ)CSSを使用してレイアウトを検索することについて
Google画像レイアウトの再作成に使用される重要なCSSプロパティには、ディスプレイ、グリッドテンプレートコラム、グリッドギャップ、オブジェクトフィットが含まれます。ディスプレイプロパティはグリッドに設定されており、グリッドレイアウトを作成します。 Grid-Template-Columnsプロパティは、グリッド内の列の数とサイズを指定するために使用されます。グリッドギャッププロパティは、グリッドセル間のギャップを設定するために使用されます。オブジェクトフィットプロパティは、コンテナに適合するように画像のサイズをどのように変更するかを指定するために使用されます。
レイアウトがGoogleイメージのレイアウトのように見えないのはなぜですか?いくつかの理由があります。まず、CSSプロパティを正しく実装していることを確認してください。次に、画像が同じアスペクト比であるかどうかを確認します。 Google画像では、同じアスペクト比の画像を使用して均一なレイアウトを作成します。画像のアスペクト比が異なる場合、レイアウトは同じように見えない場合があります。
グリッドセルに画像が適切に適合していない場合、画像のアスペクト比がグリッドセルのアスペクト比と同じではないためかもしれません。これは、CSSのオブジェクトフィットプロパティを使用して、コンテナに合わせて画像のサイズを変更する方法を指定して修正できます。はい、WordPressのようなCMSでこのレイアウトを使用できます。 CSSをテーマのstyle.cssファイルに追加し、HTMLを適切なテンプレートファイルに追加する必要があります。また、WordPressサイトのセットアップに応じて、画像のHTMLを動的に生成するためにPHPコードを追加する必要があります。
以上がCSSを使用してGoogle画像検索レイアウトを再作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。