CSSスプライト技術は複数の背景を1つのPNG画像に統合しますCSSポジショニング

CSSスプライト技術は複数の背景を1つのPNG画像に統合しますCSSポジショニング

アメリカのYAHOOがページ制作で使用している画像統合技術。これらのアイコン、列背景、画像ボタンを定期的に統合してCSS呼び出しを容易にするのは、ある程度の時間がかかりますが、間違いなく費用対効果が高く、必要です。YSlowも強くお勧めします。

実施方法
まず、小さな画像を大きな画像に統合し、大きな画像上の特定のアイコンの位置に合わせて背景を配置します。背景位置:-8px -95px;
CSS スプライト技術と画像の最適化(背景画像の統合)に関する簡単な説明
CSS スプライト テクノロジーをどれだけ最適化し、リクエストの数をどれだけ減らすことができるでしょうか?これは一方的に行うことはできません。すべては XHTML、CSS、および CSS Sprites 画像間の調整に依存します。今のところ、完全に最適化された方法はありません。そのため、私は「適応型 9 マス グリッドを実現する背景」などのプロジェクトで、CSS スプライト画像と XHTML の関係を頻繁に検討します。以下に、画像カットと画像最適化のいくつかの方法をまとめます。

画像の最適化<br />1. アニメーション化されていない GIF の場合、同じ効果が得られ、ファイル サイズを 10% ~ 30% 節約できるため、PNG8 を使用することをお勧めします。
2. Fireworks と比較すると、Photoshop からエクスポートされた同じ品質の PNG 画像のサイズは若干大きくなります。 Fireworks では対応する圧縮の最適化が行われていますが、最適な圧縮は達成されていません。
3. 私の知る限り、PNG 画像を扱うデザイン ソフトウェアは最高の圧縮を実現しておらず、画像サイズを圧縮する余地がまだあります。ロスレス圧縮の最適化には、下記で紹介する「画像最適化ツール」をご利用ください。
4. 画像のサイズと寸法については、サイズを 100K 以内に抑え (これは中国で要求される最適なサイズに近い)、サイズを 800 ピクセル (最適なサイズ) にすることをお勧めします。 (信頼できる情報源から得た情報ですが、詳細は確認できません)

CSS スプライト画像カットテクニック<br />1. CSS スプライト画像の順序と画像は上から下、左から右に追加されます。背景位置は一般的にデジタルの組み合わせの形で配置されており、メンテナンスによる不要なトラブルを軽減できます。
2. ファイル サイズが大きくなるため、CSS スプライト画像に一定の間隔を維持することはお勧めしません。
3. CSS スプライトで類似または同一の色の画像を組み合わせると、色の数を減らすことができます。色の数が少ない画像のファイル サイズは比較的小さくなるためです。
4. 同じサイズの CSS スプライト画像に大きな隙間を残すと、ほとんどの場合、ボリュームがある程度増加するため、CSS スプライト画像には隙間がないようにする必要があります。
5. 同じサイズの CSS スプライト画像のうち、垂直に配置された画像は、水平に配置された画像よりもサイズが大きくなります。
6. CSS スプライト画像では、水平に配置された画像は垂直に配置された画像よりもファイル サイズが大きくなります。
7. 同等の画像を結合する: CSS スプライト画像を使用する場合は、同等の画像を適切に結合して、スペースを節約し、ボリュームを減らします。
8. 結合する必要のない画像を区別する: 現在のユーザーが 1 つの状態または 1 つのレベルのみを表示することを決定した場合、他のレベルまたは状態の画像を結合する必要はありません。
9. 黄金のカット位置: CSS スプライト画像の右端または左端の位置は、最も柔軟な位置であり、アイコンをテキストの前に配置するのに最適です。そのため、他の CSS スプライト画像に干渉されることはなく、特定の線幅を予約する必要もありません。

インターネット上には、次のような関連する画像最適化ツールが多数存在します。
ImageMagick、PNGGauntlet、pngcrush、pngrewrite、Optipng、PNGOut など。
ご存知のとおり、Web サイトの読み込み時間を短縮する最も効果的な方法の 1 つは、Web サイトによって行われる HTTP リクエストの数を減らすことです。この目標を達成する効果的な方法は、CSS スプライトを使用することです。つまり、複数の画像を 1 つの画像に結合し、CSS を使用して配置します。
CSS スプライトの目的は、画像を統合し、サーバーへのリクエスト数を減らすことでページの読み込みを高速化することです。

実施方法
まず、小さな画像を大きな画像に統合します。簡単にするために、複数の画像を同じ列に配置して、x 軸を 0 と定義することができます。
次に、全体像上の特定のアイコンの位置に合わせて背景を配置します。背景位置:-8px -95px;
例:
上の画像の auther.gif を背景として使用する場合、コードは次のようになります。

コードをコピー
コードは次のとおりです。

<div class="max">最大化</div>

両方のクラスは同じ画像を使用します。

コードをコピー
コードは次のとおりです。

.max {
幅:16px;
高さ:16px;
背景画像:url(/images/css-sprites.gif);
background-repeat: no-repeat; // タイル状に表示したくない
text-indent:-999em; //テキストを非表示にする方法
}

その結果、上の画像の tag_icon.gif 内の画像は背景としてしか使用できず、必要な背景をまったく取得できなくなります。 background-position を指定していないため、デフォルトは 00 です。上記の tag_icon.gif の画像をご覧ください。さて、全体像の中で auther.gif を表す画像の位置を見つける必要があります。測定後、ボタンは Y 軸上で 350 ピクセルに配置され、ボタンは X 軸上で 50 ピクセルに配置されます。どうすればそれらを可視化できるでしょうか?明らかにコードは次のようになります。

コードをコピー
コードは次のとおりです。

.max {
背景位置: 50 -350px;
}

やった、やった!
(注: 便宜上、この例ではスタイルを HTML に直接埋め込みます。実際には特別な場合を除き、この方法は使用しないでください)。

メリット<br />前回の記事で、CSSSprites が突然人気になった理由は、Web サイトのパフォーマンスを向上できるためだということを学びました。明らかに、これは大きな利点の 1 つです。通常の方法で生成された多数の画像が 1 つの画像に結合され、HTTP 接続の数が大幅に削減されます。 HTTP 接続の数は、Web サイトの読み込みパフォーマンスに大きな影響を与えます。

デメリット<br />保守性に関しては、これは一般的に諸刃の剣です。画像を変更するたびに、画像のコンテンツを削除したり追加したりする必要があり、少し面倒に思えるため、気に入る人もいれば、気に入らない人もいるかもしれません。そして、画像(特に数千ピクセルの画像)の位置を計算することも非常に不快なことです。もちろん、これらはパフォーマンスというスローガンの下で克服することができます。

画像の位置をある絶対値に固定する必要があるため、中心などの柔軟性が失われます。
前述したように、CSSSprites を使用するにはボックスのサイズを制限する必要があります。そうしないと、画像に干渉する可能性があります。つまり、CSSSprites は、一方向ではないタイリング背景が必要であり、Web ページのスケーリングが必要な状況には適していません。 YUI の解決策は、限られたスケーリングを維持できるように画像間の距離を増やすことです。

要約<br />パフォーマンスがすべてです。 CSSSpirites は推進する価値のある技術です。固定サイズのアイコンの置き換えなどの FIR に特に適しています。互換性を維持するために、画像の各部分の間にある程度の距離を保つことをお勧めします。

<<:  MySQLのロック機構に関する最も包括的な説明

>>:  TypeScriptはvscodeを使用してコードのコンパイルプロセスを監視します

ブログ    

推薦する

開発環境にUbuntu 16をインストール後の初期設定

オフィスでは、Linux 開発環境として Ubuntu システムが必要です。現在、Ubuntu 16...

MySQL curdate() 関数の詳細な例

MySQL CURDATE関数の紹介文字列コンテキストまたは数値コンテキストの YYYMMDD 形式...

Vue の get リクエストと post リクエストの違いのまとめ

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

JavaScript で 2 次元配列を作成するためのヒント

Js での 2 次元配列の作成:まず、JavaScript は 1 次元配列のみをサポートしています...

TypescriptとAxiosに基づくインターフェースリクエスト管理の詳細な説明

目次アイデア傍受を要求するレスポンスインターセプションhttpClient.tsを使用してリクエスト...

Webリクエストと処理のTomcatソースコード分析

目次序文1. エンドポイント2. 接続ハンドラ3. コヨーテ4. コンテナ責任チェーンパターン序文T...

Linux ユーザー状態とカーネル状態間の通信方法の詳細な説明

CPU 権限の制限により、Linux ユーザー状態とカーネル状態間の通信は、プロセス間通信を使用した...

vue3 を使用してカウント関数コンポーネントのカプセル化例を実装する

目次序文1. カプセル化の重要性2. どのようにカプセル化しますか? 1. アイデア2. 準備2. ...

MySQL 8.0 DDLアトミック機能と実装原則

1. DDLアトミック性の概要8.0 より前は、統一されたデータ ディクショナリ dd はありません...

Ubuntu環境でPHPとNginxをコンパイルしてインストールする方法

この記事では、Ubuntu 環境で PHP と Nginx をコンパイルしてインストールする方法につ...

WeChatアプレットがシンプルな計算機機能を実装

この記事では、WeChatアプレットの計算機機能を実装するための具体的なコードを参考までに紹介します...

MySQLトリガーの使用と理解

目次1. トリガーとは何ですか? 2. トリガーを作成するトリガーを作成するための構文は次のとおりで...

MySQL のデータ削除とデータ テーブル メソッドの例

MySQL でデータやテーブルを削除するのは非常に簡単ですが、削除するとすべてのデータが消えてしまう...

React Nativeはモニタリングジェスチャーの上下プル効果を実現します

React Native は、プルアップとプルダウンの監視ジェスチャを実装します。詳細なコアコードは...

JavaScript関数の詳細な紹介

任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...