ホームページ ウェブフロントエンド CSSチュートリアル CSS レイアウトやその他の実装における負のマージンの魔法のような使い方

CSS レイアウトやその他の実装における負のマージンの魔法のような使い方

Feb 16, 2017 pm 01:32 PM
css margin レイアウト

プロジェクトの開発中に、X (X>1) 個のブロックを 1 行に配置し、隣接するブロック間の間隔を同じにする必要があるというニーズに誰もが遭遇したことがあると思います。


CSS レイアウトやその他の実装における負のマージンの魔法のような使い方

おそらく上記のようになります。実装する方法はいくつかあります。

1. 負のマージン方法

要素の幅とマージンを親の幅を満たすように設定し、親のマージン左を負のマージンの幅に設定します


CSS コードコンテンツをクリップボードにコピーします

<style type="text/css">    
*{   
 margin: 0;   
 padding: 0;   
}   
img{   
 vertical-align: middle;   
}   
  
ul>li{   
 float: left;   
}   
  
ul>li>img{   
 width: 100%;   
}   
    
.test1{   
padding: 0 2%;   
margin-left: -3.3%;   
}   
    
.test1>li{   
width: 30%;   
margin-left: 3.3%;   
}   
  
</style>   
 <p>1.关于负margin的实现,由于margin是基于父级计算的,会有一定的偏差,但是用于移动端上,误差可以忽略不计</p>   
        <ul class="test1 clearfix">   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
        </ul>
ログイン後にコピー


上記のエラーは、異なる要素に基づいて ul のマージン パーセンテージと li のマージン パーセンテージを計算することによって発生します。ただし、その範囲が限られているためです。モバイル端末のウィンドウでは、この差は非常にわずかであり、PC では一般的に px が使用されるため、無視しても問題ありません。 (以下にその他の方法があります)

2. ボックス サイズを使用して要素内を埋める主要な Web サイトの実装には、


CSS コード コンテンツをクリップボードにコピーすることが必要です。

<style type="text/css">   
*{   
    margin: 0;   
    padding: 0;   
}   
img{   
    vertical-align: middle;   
}   
.test1{   
    padding: 0 2%;   
    margin-left: -3.3%;   
}   
ul>li{   
    float: left;   
}   
.test1>li{   
    width: 30%;   
    margin-left: 3.3%;   
}   
ul>li>img{   
    width: 100%;   
}   
.test2>li{   
    width: 33.3%;   
    padding: 0 2%;   
    box-sizing: border-box;   
}   
.test3{   
    display: flex;   
    justify-content: space-between;   
       
}   
.test3>li{   
    width: 31.3%;   
    padding: 0 2%;   
    float: none;   
}   
.test4{   
    width: 1200px;   
    border: 1px solid red;   
    margin-left: -3.33%;   
}   
.test4>li{   
    width: 30%;   
    margin-left: 3.33%;   
}   
</style>   
<p>2.各大网站的实现,在元素内部进行填充,使用box-sizing,需要ie8及以上才支持</p>   
        <ul class="test2 clearfix">   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
        </ul>
ログイン後にコピー

この実装にはまだ欠点は見つかっておらず、コードはシンプルで理解しやすいです(推奨)

3. フレキシブルボックスモデルフレックスの実装には互換性処理が必要です(古いボックス+新しいボックス) box)


CSS コードコンテンツをクリップボードにコピーします

<style type="text/css">   
*{   
    margin: 0;   
    padding: 0;   
}   
img{   
    vertical-align: middle;   
}   
.test1{   
    padding: 0 2%;   
    margin-left: -3.3%;   
}   
ul>li{   
    float: left;   
}   
.test1>li{   
    width: 30%;   
    margin-left: 3.3%;   
}   
ul>li>img{   
    width: 100%;   
}   
.test2>li{   
    width: 33.3%;   
    padding: 0 2%;   
    box-sizing: border-box;   
}   
.test3{   
    display: flex;   
    justify-content: space-between;   
       
}   
.test3>li{   
    width: 31.3%;   
    padding: 0 2%;   
    float: none;   
}   
.test4{   
    width: 1200px;   
    border: 1px solid red;   
    margin-left: -3.33%;   
}   
.test4>li{   
    width: 30%;   
    margin-left: 3.33%;   
}   
</style>   
<p>3.弹性盒模型flex的实现,需要做兼容处理(旧盒子+新盒子),仅为演示,没做兼容处理</p>   
        <ul class="test3">   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
        </ul>
ログイン後にコピー

この状況でフレックスを使用せずにどうすればよいでしょうか? フレックス ボックス モデルは、この状況を処理できるように特別に設計されている必要がありますが、各ブラウザは、新しいボックス モデルと古いボックス モデルを異なる方法で実装します。したがって、一般に、ボックス モデルの両方のセットの属性を追加する必要があります。 (投げたい人はやるだけで効果は絶大です)

4.classnameの実装

特別な処理が必要な要素には別のクラスを追加し、それに応じて処理します。バックエンドまたはフロントエンドで処理できます (バックエンド処理が推奨されます)


CSS コードコンテンツをクリップボードにコピーします

<style type="text/css">   
*{   
    margin: 0;   
    padding: 0;   
}   
img{   
    vertical-align: middle;   
}   
.test1{   
    padding: 0 2%;   
    margin-left: -3.3%;   
}   
ul>li{   
    float: left;   
}   
.test1>li{   
    width: 30%;   
    margin-left: 3.3%;   
}   
ul>li>img{   
    width: 100%;   
}   
.test2>li{   
    width: 33.3%;   
    padding: 0 2%;   
    box-sizing: border-box;   
}   
.test3{   
    display: flex;   
    justify-content: space-between;   
       
}   
.test3>li{   
    width: 31.3%;   
    padding: 0 2%;   
    float: none;   
}   
.test4{   
    padding: 0 2%;   
}   
.test4>li{   
    width: 30%;   
    margin-left: 5%;   
}   
.test4>li.first{   
    margin: 0;   
}   
.test5{   
    padding: 0 2%;   
}   
.test5>li{   
    width: 30%;   
    margin-left: 5%;   
}   
.test5>li:first-child{   
    margin: 0;   
}   
</style>   
<p>4.classname实现</p>   
        <ul class="test4 clearfix">   
            <li class="first"><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
        </ul>
ログイン後にコピー

5.css セレクターの実装

:first- child :first -type-of :nth-child() これらの実装には技術的な問題はありません。CSS ドキュメントを確認して、CSS コードをクリップボードにコピーしてください

<style type="text/css">   
*{   
    margin: 0;   
    padding: 0;   
}   
img{   
    vertical-align: middle;   
}   
.test1{   
    padding: 0 2%;   
    margin-left: -3.3%;   
}   
ul>li{   
    float: left;   
}   
.test1>li{   
    width: 30%;   
    margin-left: 3.3%;   
}   
ul>li>img{   
    width: 100%;   
}   
.test2>li{   
    width: 33.3%;   
    padding: 0 2%;   
    box-sizing: border-box;   
}   
.test3{   
    display: flex;   
    justify-content: space-between;   
       
}   
.test3>li{   
    width: 31.3%;   
    padding: 0 2%;   
    float: none;   
}   
.test4{   
    padding: 0 2%;   
}   
.test4>li{   
    width: 30%;   
    margin-left: 5%;   
}   
.test4>li.first{   
    margin: 0;   
}   
.test5{   
    padding: 0 2%;   
}   
.test5>li{   
    width: 30%;   
    margin-left: 5%;   
}   
.test5>li:first-child{   
    margin: 0;   
}   
</style>   
<p>5.css选择器实现(注意ie兼容性)</p>   
        <ul class="test5 clearfix">   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
            <li><img  src="/static/imghw/default1.png"  data-src="img/test.jpg"  class="lazy"  / alt="CSS レイアウトやその他の実装における負のマージンの魔法のような使い方" ></li>   
        </ul>
ログイン後にコピー

すべてのデモを投稿しました X=2、幅を設定、左側で左フロート、右側で右フロートの場合に別の状況があることをほとんど忘れていました。 実際、X=3 の場合、これに対処する別の方法があります。左要素と右要素はそれぞれ左と右にフロートし、中央の要素は親を基準にして絶対位置および中央に設定されます。

不可分であるため、ボックスサイジングのように完全に計算することはできませんが、プロジェクトに合理的に適用することは問題ありません。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

CSS レイアウトの負のマージンに関するその他の記事やその他の実装関連の記事については、PHP 中国語 Web サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ブートストラップリストでデフォルトスタイルを削除する方法は? ブートストラップリストでデフォルトスタイルを削除する方法は? Apr 07, 2025 am 10:18 AM

ブートストラップリストのデフォルトスタイルは、CSSオーバーライドで削除できます。より具体的なCSSルールとセレクターを使用し、「近接原理」と「重量原理」に従って、ブートストラップのデフォルトスタイルをオーバーライドします。スタイルの競合を避けるために、よりターゲットを絞ったセレクターを使用できます。オーバーライドが失敗した場合は、カスタムCSSの重量を調整します。同時に、パフォーマンスの最適化に注意を払い、重要な!の過剰使用を避け、簡潔で効率的なCSSコードを書いてください。

ブートストラップのサイズを変更する方法 ブートストラップのサイズを変更する方法 Apr 07, 2025 pm 03:18 PM

Bootstrapの要素のサイズを調整するには、次のものを含むDimensionクラスを使用できます。

ブートストラップボタンの使用方法 ブートストラップボタンの使用方法 Apr 07, 2025 pm 03:09 PM

ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します

ブートストラップにファイルをアップロードする方法 ブートストラップにファイルをアップロードする方法 Apr 07, 2025 pm 01:09 PM

ファイルアップロード機能は、Bootstrapを介して実装できます。手順は次のとおりです。BootstrapCSSおよびJavaScriptファイルを紹介します。ファイル入力フィールドを作成します。ファイルアップロードボタンを作成します。ファイルのアップロードを処理します(FormDataを使用してデータを収集し、サーバーに送信します)。カスタムスタイル(オプション)。

ブートストラップに写真を挿入する方法 ブートストラップに写真を挿入する方法 Apr 07, 2025 pm 03:30 PM

ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

ブートストラップリストのサイズを変更する方法は? ブートストラップリストのサイズを変更する方法は? Apr 07, 2025 am 10:45 AM

ブートストラップリストのサイズは、リスト自体ではなく、リストを含むコンテナのサイズに依存します。 BootstrapのグリッドシステムまたはFlexBoxを使用すると、コンテナのサイズを制御することで、リスト項目を間接的に変更します。

ブートストラップのレイアウト方法 ブートストラップのレイアウト方法 Apr 07, 2025 pm 02:24 PM

Bootstrapを使用してWebサイトをレイアウトするには、グリッドシステムを使用してページをコンテナ、行、列に分割する必要があります。最初にコンテナを追加し、その中の行を追加し、行内の列を追加し、最後に列にコンテンツを追加します。ブートストラップのレスポンシブレイアウト関数は、ブレークポイント(XS、SM、MD、LG、XL)に従ってレイアウトを自動的に調整します。レスポンシブクラスを使用することで、異なる画面サイズの下の異なるレイアウトを実現できます。

ブートストラップリストのネストを実装する方法は? ブートストラップリストのネストを実装する方法は? Apr 07, 2025 am 10:27 AM

ブートストラップのネストされたリストでは、スタイルを制御するためにブートストラップのグリッドシステムを使用する必要があります。まず、外層&lt; ul&gt;を使用します。および&lt; li&gt;リストを作成するには、内側のレイヤーリストを&lt; div class =&quot; row&gt;に巻き付けます。 and&lt; div class =&quot; col-md-6&quot;&gt;内側のレイヤーリストに、内側の層リストが行の幅の半分を占めることを指定します。このように、内側のリストは正しいものを持つことができます

See all articles