CSS でインラインブロック要素間のギャップを削除するいくつかの方法の詳細な説明

CSS でインラインブロック要素間のギャップを削除するいくつかの方法の詳細な説明

最近、モバイルページを制作する際には、レイアウトにインラインブロック要素がよく使われますが、インラインブロック要素間の隙間がどうしても生じてしまうという問題があります。これらのギャップはレイアウト上の問題を引き起こす可能性があるため、削除する必要があります。ここでは、インライン ブロック要素とギャップを削除する方法について簡単に説明します。

インラインブロックとは何か

inline-block またはインライン ブロックは、CSS 要素の分類では、インライン要素またはインライン要素、ブロックレベル要素、およびインライン ブロック要素の 3 つのタイプに分けられます。

インラインブロック要素は、インライン要素とブロックレベル要素の両方の特性を持ちます。(1)要素を水平に配置でき、(2)ブロックレベル要素として扱い、幅、高さ、パディングなどのさまざまな属性を設定できます。

例1: インライン要素スパンをインラインブロック要素として定義する

<div id="デモ">
    <span>私はspanです</span>
    <span>私はスパンです</span>
    <span>私はスパンです</span>
    <span>私はスパンです</span>
</div>
#デモスパン{
    表示:インラインブロック;
  背景:#ddd;
}

効果画像:

インラインブロックの互換性

(1)インラインレベルの要素

インライン要素の場合、すべての主要ブラウザは、display 値を inline-block に直接設定して、インライン ブロックとして定義することをサポートしています。

(2)ブロックレベル要素

IE7 以下のブラウザは、ブロックレベル要素を完全にはサポートしていません。インラインレベル要素をインラインブロックとして定義するために display:inline-block を使用することのみをサポートしています。

IE7 以下のブラウザは、インライン レベル要素をインライン ブロックに直接設定することをサポートしているため、最初にブロック レベル要素をインラインに設定し、次に要素の hasLayout をトリガーしてインライン ブロックと同様の機能を付与することで、回避策として実装できます。次のように記述できます:

例2:

<div id="デモ">
    <div>私はdivです</div>
    <div>私はdivです</div>
    <div>私はdivです</div>
    <div>私はdivです</div>
</div>
#デモ div{
    表示:インラインブロック;
    *display:inline; /*IE7 ハック*/
    *zoom:1; /*トリガーhasLayout*/
}

IE7 以下: ブロック レベル要素はインライン ブロックに変換され、IE7 以下では要素間に隙間が表示されません。インライン レベル要素はインライン ブロックに変換され、IE7 以下では要素間に隙間が表示されます。ブロック レベルからインライン ブロックに変換された要素の直後に、インライン レベルからインライン ブロックに変換された要素があり、IE7 以下では 2 つの要素間に隙間が表示されません。インライン レベルからインライン ブロックに変換された要素の直後に、ブロック レベルからインライン ブロックに変換された要素があり、IE7 以下では 2 つの要素間に隙間が表示されます。その他のすべてのブラウザーでは隙間が表示されます。

インラインブロック要素ギャップの起源

例 1 では、inline-block として定義された要素によってギャップが生成されます。display:inline-block が設定されていない場合はどのような効果がありますか?次のように:

例3:

<div class="demo">
        <span>私はスパンです</span>
        <span>私はスパンです</span>
        <span>私はスパンです</span>
        <span>私はスパンです</span>
</div>

.demo span{
     背景:#ddd;
}

効果画像:

上記の例では、スパンに処理がされていないため、ギャップが残っています。これはなぜでしょうか?構造上の問題でしょうか?すべての span タグを 1 行に記述した場合の効果を見てみましょう。

<div class="demo">
        <span>私は span です</span><span>私は span です</span><span>私は span です</span><span>私は span です</span>
    </div>
.demo span{
         背景:#ddd;
}

効果画像:

改行や復帰によってギャップが発生していることがわかります。タグを 1 行に記述するか、タグ間にスペースを入れずに直接記述する限り、ギャップは発生しません。ただし、この方法はあまり信頼性が高くありません。コード生成ツール、コードのフォーマット、他の人によるコードの変更など、失敗の原因となる制御不能な要因が多すぎるためです。ギャップを除去するさまざまな方法を以下に示します。これらが適切かどうかは、特定のアプリケーション シナリオによって異なります。

インラインブロック要素間の隙間を削除する

(1)タグ間のスペースを削除する

要素間のギャップは、要素タグ間のスペースによって発生します。スペースを削除すると、ギャップは消えます。次の書き方を見てみましょう。

*書き方1:

<div class="demo">
        <span>私は span です</span><span>私は span です</span><span>私は span です</span><span>私は span です</span>
    </div>

*書き方2:

<div class="demo">
        <span>私はspanです
        </span><span>私はspanです
        </span><span>私はspanです
        </span><span>私は</span>
    </div>

*書き方3: HTMLコメントタグを使う

<div class="demo">
        <span>私は span です</span><!-- 
        --><span>私は span です</span><!-- 
        --><span>私は span です</span><!-- 
        --><span>私はspanです</span>
    </div>

(2)タグクローズをキャンセルする

<div class="demo">
        <span>私はspanです
        <span>私はspanです
        <span>私はspanです
        <span>私はspanです
    </div>

.demo span{
	     背景:#ddd;
	     表示: インラインブロック;
		}

隙間ができないようにspanタグの終了タグを削除します。 IE6/IE7 と互換性を持たせるには、最後のタグを閉じる必要があります。

<div class="demo">
        <span>私はspanです
        <span>私はspanです
        <span>私はspanです
        <span>私はスパンです</span>
    </div>
.デモスパン{
         背景:#ddd;
         表示: インラインブロック;
        }

この方法は Meituan ウェブアプリ ページで使用されているようです。以下が見られます:

ソースコード:

(3)font-size:0を使用する

親コンテナで font-size:0; を使用すると、ギャップをなくすことができます。次のように記述します。

<div class="demo">
        <span>私はspanです
        <span>私はspanです
        <span>私はspanです
        <span>私はスパンです</span>
    </div>
    .demo {フォントサイズ: 0;}
    .デモスパン{
         背景:#ddd;
         表示: インラインブロック;
         font-size: 14px; /*対応するフォントサイズを設定します*/
    }

Chrome では、デフォルトで最小フォントサイズ制限があります。互換性を考慮すると、フォントサイズ制限を解除する必要があります。次のように記述します。

<div class="demo">
        <span>私はspanです
        <span>私はspanです
        <span>私はspanです
        <span>私はspanです</span>
    </div>
    .demo {フォントサイズ: 0;-webkit-テキストサイズ調整:なし;}
    .デモスパン{
         背景:#ddd;
         表示: インラインブロック;
         font-size: 14px; /*対応するフォントサイズを設定します*/
    }

上記は仕事で遭遇したいくつかの問題に関する知識のまとめです。皆様の勉強のお役に立てれば幸いです。また、皆様が 123WORDPRESS.COM を応援していただければ幸いです。

<<:  nginx をベースにリロードなしでアップストリーム サーバーの動的な自動起動と停止を実装する方法

>>:  Vue の計算プロパティ

推薦する

1つの記事でJavaScriptのクロージャ関数について学ぶ

目次変数のスコープ閉鎖の概念クロージャの使用クロージャのデメリット最後に、クロージャのメリットとデメ...

ウェブデザインでテキストのサイズを合わせる方法: 小さなテキスト、大きな体験

iPadなどのモバイル端末の普及により、人々がモバイル端末で読書に費やす時間はますます長くなり、読...

Vueは新しいウィンドウを開き、パラメータ転送のグラフィック例を実装します。

私が実現したい機能は、新しいウィンドウを開いて新しいページを表示することですが、パラメータを渡す必要...

MySQL SQL ステートメントが遅い場合の一般的な原因と解決策

1. インデックス不足または無効なインデックスによるクエリの遅延数千万件のデータを含むテーブルで、イ...

Windows (コミュニティ エディション) に MySQL 8.0.18 をインストールするためのチュートリアル

この記事では、Windows で MySQL をインストールする方法について簡単に説明します。他にご...

CSS トランジションを使用した円形ホバー効果のサンプルコード

この記事では ソースコードのオンラインプレビューとダウンロード今日のチュートリアルでは、円のホバー効...

MySQLイベント計画タスクに関する簡単な説明

1. イベントが有効になっているかどうかを確認する'%sche%' のような変数を表...

CentOS7 のシステム サービスに Nginx を追加する方法

導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...

マウスを動かしたときにセカンダリメニューバーを実装するために HTML+CSS を使用する例

この記事では、マウスを動かしたときにセカンダリ メニュー バーを実装するために HTML+CSS を...

CSS3 クリアフロートメソッドの例

1. 目的この記事を通じて、誰もがフロートをクリアする原理と方法を理解し、最終的にこの記事が最良であ...

HTML テーブル マークアップ チュートリアル (6): 暗い境界線の色属性 BORDERCOLORDARK

表では、右下の境界線の色を個別に定義したり、セルの左上の境界線の色を定義したりできます。これら 2 ...

JavaScript 配列メソッド - 体系的な概要と詳細な説明

目次一般的な配列メソッド配列要素の追加と削除配列ヘッダーの操作配列の末尾を操作する任意の場所に追加ま...

MySQL データベースの基礎: 基本コマンドの概要

目次1. ヘルプ情報を使用する2. データベースの作成、削除、表示3. データベースに接続する4. ...

JavaScriptにおけるこれの深い理解

Jsでのこれの深い理解JavaScriptスコープはstatic scopeスコープですが、 Jsの...

HTML チュートリアル、HTML デフォルト スタイル

html 、アドレス、引用、本文、 dd 、 div 、 dl 、 dt 、フィールドセット、フォ...