検索
ホームページウェブフロントエンドhtmlチュートリアルあの頃、素晴らしい聖杯、二枚の翼、そしてマイナスのマージン_html/css_WEB-ITnose

[目次]

はい、タイトルは「あの頃一緒に片付けた山車」をモデルにしています。

素晴らしい聖杯と二重飛行翼

私と同じように、フロントエンドを学んでいるときに聖杯レイアウトと二重飛行翼レイアウトについて聞いたことがある人は多いと思います。名前に関しては、聖杯に似ているというか、鳥に似ているというだけです。いくつかの違いがありますが、主な考え方は基本的に同じです。

これら 2 つのレイアウトで実装されるスタイルは次の形式です。

つまり、聖杯または空飛ぶ小さな部分のように見える中央部分です。 Bird、左右の幅がわかっていて、中央が適応的に埋められます。通常、このようにコードを書けば、当然ながらレイアウトの実装は簡単です。

<div class="head">head</div>    <div class="content">        <div class="left">left</div>        <div class="main">main</div>        <div class="right">right</div>    </div> <div class="foot">foot</div>

ただし、DOM のロード順序に従って、コンテンツ部分は左、メイン、右の順にロードされます。これは潔癖症の人にとっては耐えられないかもしれませんし、理不尽にさえ感じるかもしれません。

通常、最初にメイン部分をロードし、次に左右の 2 つの比較的重要でないもののロードを開始します。したがって、HTML コードは次のように記述する必要があります:

<div class="head">head</div>    <div class="content">        <div class="main">main</div>        <div class="left">left</div>        <div class="right">right</div>    </div><div class="foot">foot</div>

一方、私たちはセマンティック HTML を推奨しています。これは、HTML を記述するときに CSS の干渉を受けないようにする必要があるため、このようにします上記のレイアウトを実現するためにも必要なはずです。

このように書く場合、CSS スタイルはどのように記述すればよいでしょうか?

まず、最初にヘッド コンテンツとフット コンテンツを構築することを考えます。コンテンツについては、フロートをクリアして高さをサポートする必要があります。コードは次のとおりです:

* {    margin: 0;    padding: 0;}.cleanfix {    clear: both;}.cleanfix:after {    content: '.';    clear: both;    display: block;    visibility: hidden;    height: 0;    zoom: 1;}.head, .foot {    width: 100%;    height: 80px;}.head {    background-color: #4eb5f7;}.foot {    background-color: #999999;}.left, .right, .main {    float: left;}.left {    width: 40px;    height: 60px;    background-color: #B9E078;}.right {    width: 60px;    height: 80px;    background-color: #FF9900;}.main {    background-color: crimson;}

この場合、次のレイアウトを実現できます:

私たちが望んでいるのは、メイン レイアウトがアダプティブであることです。この場合、main 100% の幅を与えます:

.main {  100%;}

この場合、レイアウトは次のようになります:

次に、左を実行します。現時点では、素晴らしい ネガティブ マージン を使用できるようになりました。

main、left、right はすべてフローティングストリーム内にあるとみなすことができ、順序も main left right になります。現在、main が 100% を占めているため、左右が main と同じ線上に浮くことができません。このとき、負のマージンを使用して左前に移動できます (つまり、margin-left が正の場合)。左側のボックスはマージンで、マイナスの場合は前に移動します)。次のスタントを追加します

.left {    margin-left: 100%;}

それで、どれくらい動きますか?左端に移動するには、上記と同様に左移動の最大値である-100%に移動します。このようにして、次のレイアウトが得られます。

左が左端に移動したことがわかります。では、右も左を真似て一緒に移動できますか?どれくらい移動しますか? right は右の幅、つまり 60px を前方に移動するだけです

.right {    margin-left: -60px;}

次の結果が得られます

想像どおり、右も上に移動します。そして行きたいところへ走りました。

しかし、よく見てみると、上の結果にはまだ問題があることがわかります。赤い真ん中のメインはどこに行ったのでしょうか?

開発者ツールを開いて要素を調べると、左右が要素上に重なって見えることがわかります。

では、どうやって本体を中に入れるのでしょうか? これは、Holy Horse レイアウトと Double Flying Wing レイアウトの基本的な違いです

Holy Grail レイアウト

Holy Grail レイアウトのアイデアは、パディングを追加することです3つの要素で囲まれたコンテンツに、padding-leftとpadding-rightの値を左右の幅として、相対位置を使用して両側に移動します。

まず、コンテンツにパディングを与えます

.content {    padding: 0 60px 0 40px;}

次に、相対位置を使用して左右に移動します

.left {    position: relative;    left: -40px;}.right {    position: relative;    right: -60px;}

これは完璧な解決策です。 :

最終的な CSS スタイルはすべて次のようになります:

* {    margin: 0;    padding: 0;}.cleanfix {    clear: both;}.cleanfix:after {    content: '.';    clear: both;    display: block;    visibility: hidden;    height: 0;    zoom: 1;}.head, .foot {    width: 100%;    height: 80px;}.head {    background-color: #4eb5f7;}.foot {    background-color: #999999;}.left, .right, .main {    float: left;}.left {    width: 40px;    height: 60px;    background-color: #B9E078;    margin-left: -100%;}.right {    width: 60px;    height: 80px;    background-color: #FF9900;    margin-left: -60px;}.main {    background-color: crimson;    width: 100%;}.content {    padding: 0 60px 0 40px;}.left {    position: relative;    left: -40px;}.right {    position: relative;    right: -60px;}

HTML は次のようになります:

<div class="head">head</div>    <div class="content cleanfix">        <div class="main">main</div>        <div class="left">left</div>        <div class="right">right</div>    </div><div class="foot">foot</div>

Double Flying Wing Layout

上記の状況に引き続き、Holy Horse レイアウトは次のように行われます。

Holy Horse レイアウトのアイデアは、3 つの要素でラップされたコンテンツにパディングを追加することです。 letpadding-left とpadding-right の値は左右の幅であり、相対位置を使用してそれらを両側に移動します。

ダブルウィングレイアウトでは、メイン内に別の div を追加し、この div に対して margin-left と margin-right を実行します。つまり、

<div class="head">head</div>    <div class="content cleanfix">        <div class="main">            <div class="wrap">main</div>        </div>        <div class="left">left</div>        <div class="right">right</div>    </div><div class="foot">foot</div>

Wrap です。 CSS 部分 処理:

.wrap {    background-color: darkmagenta;    margin-left: 40px;    margin-right: 60px;}

最終的に CSS コードは次のようになります:

* {    margin: 0;    padding: 0;}.cleanfix {    clear: both;}.cleanfix:after {    content: '.';    clear: both;    display: block;    visibility: hidden;    height: 0;    zoom: 1;}.head, .foot {    width: 100%;    height: 80px;}.head {    background-color: #4eb5f7;}.foot {    background-color: #999999;}.left, .right, .main {    float: left;}.left {    width: 40px;    height: 60px;    background-color: #B9E078;    margin-left: -100%;}.right {    width: 60px;    height: 80px;    background-color: #FF9900;    margin-left: -60px;}.main {    background-color: crimson;    width: 100%;}.wrap {    background-color: darkmagenta;    margin-left: 40px;    margin-right: 60px;}

概要

要約すると、Holy Horse のレイアウト翼のプロセスは大まかに次のとおりです

  • ヘッドコンテンツフットを構築し、コンテンツ内の 3 つの要素すべてをフローティングのままにし、フットに影響を与えないようにフローティングをクリアします

  • メインが 1 行になるように、メインの幅を 100% にします

  • 给 left -100% 的margin-left 让他移动到最左边,给 right 和他宽度一样的负 margin 让他移动到最右边

  • 针对移动后 main 的两边会被 left 和 right 重合覆盖掉做出不同的改变,这儿也就是两个布局的本质区别

    • 圣杯布局会给 content 内边距,左右分别为 left 和 right的宽度,然后再利用相对定位移动 left 和 right

    • 双飞翼布局会在 main 里面再加一层 wrap ,然后把内容都写在 wrap 里面,正对 wrap 设置他的 margin, 左右外边距和 left 与 right 一样

奇妙的负边距

相信在上面的圣马布局与双飞翼布局中已经见识到了负边距的奇妙之处了,这就是他的第一奇妙之处

浮动元素 VS 负边距

整个浮动可以看是有一个浮动流的存在,利用负边距可以让他在这个流中移动,并且会叠加到相应元素的上面

普通文档流 VS 负边距

普通元素的位置是相对于文档流而发生变化的。负边距也会使元素在文档流中发生位移。不同于相对定位的是,这些元素移动之后不会占据原来的空间。他往前移动之后,文档流也会跟着移动

元素宽度 VS 负边距

负边距可以增加元素的宽度,对于没有 width 的元素,负边距可以加宽他们。

这样就能够很好的利用负边距实现 一寸照片排列 的那种难题了。对于这种问题,比较麻烦的办法是浮动之后 margin-right, 然后对每一行的最后一个元素设置 margin-right: 0。这样就存在一个如何给最后一个元素设定这个margin-right的问题了。

利用负边距,我们可以加大子元素的margin, 然后浮动里面所有的元素,等他们都浮动起来的时候利用 overflow: hidden消除最右边的边距。

绝对定位 VS 负边距

绝对定位就是相对于 父亲系 元素的最近的一个定位元素的边界来决定的,这个边界也就是margin。

如果是负边距的话就能机智的实现元素垂直水平居中了

.con {    width: 100px;    height: 100px;    position: absolute;    top: 50%;    left: 50%    margin-left: -50px;    margin-top: -50px;}
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
&lt; Progress&gt;の目的は何ですか 要素?&lt; Progress&gt;の目的は何ですか 要素?Mar 21, 2025 pm 12:34 PM

この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

&lt; datalist&gt;の目的は何ですか 要素?&lt; datalist&gt;の目的は何ですか 要素?Mar 21, 2025 pm 12:33 PM

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

&lt; meter&gt;の目的は何ですか 要素?&lt; meter&gt;の目的は何ですか 要素?Mar 21, 2025 pm 12:35 PM

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか?ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか?Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

HTML5&lt; time&gt;を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素?HTML5&lt; time&gt;を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素?Mar 12, 2025 pm 04:05 PM

この記事では、html5&lt; time&gt;について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

&lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか?&lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか?Mar 20, 2025 pm 06:05 PM

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか?HTML5のクロスブラウザー互換性のベストプラクティスは何ですか?Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか?HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか?Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

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

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境