ホームページ ウェブフロントエンド jsチュートリアル アダプティブ画像レイアウトを作成するための CSS パーセンテージ パディングの詳細な説明

アダプティブ画像レイアウトを作成するための CSS パーセンテージ パディングの詳細な説明

Dec 26, 2017 am 09:39 AM
padding 割合

<p>この記事では主に、アダプティブ画像レイアウトを作成するための CSS パーセンテージ パディングの詳細な説明を共有します。 CSS 知識ポイント: パディング/マージンが、左/右または上/下にかかわらず、パーセンテージの形式で値を取る場合、参考として、親要素の幅に基づいています。

<p>1. CSS のパディングのパーセンテージは、幅に対して相対的に計算されます

<p> デフォルトの水平方向のドキュメント フロー方向では、CSS の margin 属性と padding 属性の垂直方向のパーセンテージ値が計算されます。幅に対して相対的に計算され、topbottom などの属性のパーセンテージ値とは異なります。 marginpadding属性的垂直方向的百分比值都是相对于宽度计算的,这个和top, bottom等属性的百分比值不一样。

<p>这么设计的原因在我的新书(应该不出几个月就要出版了)中会有说明,这里不展开。

<p>对于padding属性而言,任意方向的百分比padding都现对于宽度计算可以让我们轻松实现固定比例的块级容器,举个例子,假设现在有个<p>元素:

p { padding: 50%; }
ログイン後にコピー
<p>

<p>或者:

p { padding: 100% 0 0; }
ログイン後にコピー
<p>

<p>或者:

p { padding-bottom: 100%; }
ログイン後にコピー
<p>

<p>则这个<p>元素尺寸就是一个宽高1:1的正方形,无论其父容器宽度是多少,这个<p>元素总能保持比例不变。

<p>这种能固定比例的特性什么作用呢?

<p>对于绝大多数都布局,我们并不要求非要比例固定,但是有一种情况例外,那就是图片,因为图片原始尺寸它是固定的。在传统的固定宽度的布局下,我们会通过给图片设定具体的宽度和高度值,来保证我们的图片占据区域稳固;但是在移动端或者在响应式开发情况下,图片最终展现的宽度很可能是不确定的,例如手机端的一个通栏广告,iPhone7下宽度是375,iPhone7 Plus下是414,还有360等尺寸,此时需要的不是对图片进行固定尺寸设定,而是比例设定。

<p>通常有如下一些实现:

<p>

<p>

<p>1. 固定一个高度,然后使用background-size属性控制,如下:

.banner {
 height: 40px;
 background-size: cover;
}
ログイン後にコピー
<p>

<p>实时效果如下:

<p>可以看到随着宽度的变化,总会有部分图片区域(宽度或高度)无法显示,并不是完美的做法。

<p>2. 使用视区宽度单位vw,如下:

.banner {
 height: 15.15vw;
 background-size: cover;
}
ログイン後にコピー
<p>

<p>如果对兼容性要求不是很高,使用vw也是一个不错的做法,至少理解起来要更轻松一点。

<p>但是,如果我们的图片不是通栏,而是需要离左右各1rem的距离,此时,我们的CSS代码就要啰嗦点了,想要保持完美比例,就使用借助CSS3 calc()计算:

.banner {
 height: calc(0.1515 * (100vw - 2rem));
 background-size: cover;
}
ログイン後にコピー
<p>

<p>如果,图片距离两侧的宽度是动态不确定的,则,此时calc()也捉襟见肘了,但,恰恰是普普通通其貌不扬的padding属性,其兼容性和适应性都一级棒。

<p>3. 使用百分比padding,如下:

.banner {
 padding: 15.15% 0 0;
 background-size: cover;
}
ログイン後にコピー
<p>

<p>此时无论图片的外部元素怎么变动,比例都是恒定不变的。

<p>二、CSS百分比padding与宽度自适应图片布局

<p>但是有时候我们的图片是不方便作为背景图呈现的,而是内联的<img>,百分比padding也是可以轻松应对的,求套路是比较固定的,图片元素外面需要一个固定比例的容器元素,例如下面的HTML结构:

<br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

<p class="banner">
 <img src=""banner.jpg>
</p>
ログイン後にコピー
<p>

<p>.banner元素同样负责控制比例,然后图片填充.banner元素即可,CSS代码如下:

.banner {
 padding: 15.15% 0 0;
 position: relative;
}
.banner > img {
 position: absolute;
 width: 100%; height: 100%;
 left: 0; top: 0;
}
ログイン後にコピー
<p>

<p>效果就达成了!

<p>眼见为实,去年起点中文网手机版诸多页面的通栏广告就都是这么实现的,最终的效果参见下面的gif截图(如果图无法显示,可以评论反馈):

<p>

<p>可以看到,无论屏幕宽度多宽,我们的广告图片比例都是固定的,不会有任何剪裁,不会有任何区域缺失,布局就显得非常有弹性,也更健壮。

<p>————-

<p>其实,我之前一直低估百分比padding的实际应用价值,因为有vw单位的存在,毕竟理解vw看上去要更简单一些,所以,一直就没做相关技巧的介绍。但是,随着图片相关布局处理越来越多,我发现,百分比padding的实用价值要比想象的大,要比vw

このデザインの理由については、私の新しい本 (数か月以内に出版される予定です) で説明するので、ここでは説明しません。 <p>

padding 属性の場合、任意の方向の padding の割合が幅に対して計算され、固定比率のブロックレベルのコンテナーを簡単に実装できます。 <p> 要素があるとします。 p>< /code>要素のサイズは、親コンテナの幅に関係なく、幅と高さが 1:1 の正方形です。この <p> 要素は常に同じ割合。

比率を固定できるこの機能の機能は何ですか? <p>

ほとんどのレイアウトでは、比率を固定する必要はありませんが、例外が 1 つあります。それは、画像の元のサイズが固定されているためです。従来の固定幅レイアウトでは、画像が安定した領域を占めるように画像の特定の幅と高さの値を設定しますが、モバイル端末やレスポンシブ開発の場合は、画像の最終的な幅が決まります。非常に小さいです。不確実かもしれません。たとえば、携帯電話のバナー広告の場合、iPhone 7 の下の幅は 375、iPhone 7 Plus の下の幅は 414、その他にも 360 などのサイズがあります。時間は画像の固定サイズ設定ではなく、比率設定です。 🎜🎜通常、次のような実装があります: 🎜🎜🎜🎜🎜🎜 1. 高さを固定し、次のように background-size 属性を使用して制御します。 🎜リアルタイム効果は次のとおりです: 🎜🎜 幅が変化すると、表示できない画像領域の一部 (幅または高さ) が常に存在することがわかりますが、これは完璧なアプローチではありません。 🎜🎜2. 次のようにビューポート幅の単位 vw を使用します: 🎜🎜🎜
img { width: 100%; }
ログイン後にコピー
🎜🎜🎜 互換性要件がそれほど高くない場合は、vw を使用することも良いです。少なくとももう少し理解しやすくなるように練習してください。 🎜🎜ただし、画像がバナーではなく、左側と右側から 1rem 離れている必要がある場合、現時点で CSS コードを維持する必要がある場合は少し面倒になります。完璧な比率を求めるには、CSS3 calc() 計算を使用します: 🎜🎜🎜
<br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜 画像の両側からの幅が動的に不確実な場合は、calc()</このとき code> も引き伸ばされますが、これは <code>padding 属性が平凡で目立たないだけであり、互換性と適応性は優れています。 🎜🎜3. 次のように、パーセンテージ padding を使用します。 🎜🎜🎜
<p class="works-item-t">
  <img src="./150x200.png">
</p>
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜 このとき、画像の外部要素がどのように変化しても、比率は一定です。 🎜🎜2. CSS パーセンテージ パディングと幅適応型画像レイアウト🎜🎜 ただし、画像が背景画像として表示するには都合が悪い場合もありますが、インライン <img>、パーセンテージ padding</code > ルーチンも比較的固定されています。次の HTML 構造のように、固定比率のコンテナ要素が必要です。 code> 要素も比率を制御し、画像は <code>.banner 要素で埋められます。CSS コードは次のとおりです。 🎜🎜🎜
.works-item-t {
 padding-bottom: 133%;
 position: relative;
}
.works-item-t > img {
 position: absolute;
 width: 100%; height: 100%;
}
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜 効果が得られます。 🎜🎜百聞は一見に如かず。昨年、Qidian 中国語 Web サイトのモバイル版の多くのページにバナー広告が実装されました。最終的な効果については、下の gif スクリーンショットをご覧ください (画像が表示できない場合は、そのままにしておいてください)。コメントしてフィードバックを送信してください): 🎜🎜 🎜🎜画面の幅がどんなに広くても、広告画像の比率は同じであり、クリッピングや欠落がなく、レイアウトが非常に柔軟で堅牢であることがわかります。 🎜🎜————-🎜🎜実際、私は vw ユニットの存在により、padding の実際の適用値を常に過小評価していました。 code>vw< /code> の方が簡単そうなので、関連するテクニックは紹介していません。しかし、処理される画像関連のレイアウトが増えるにつれて、padding の割合の実際的な値は想像よりも大きく、vw よりも多くのシナリオに適用できることがわかりました。互換性の向上 (パーセント機能 IE6+ サポート、画像カバー率 100% IE8+ サポート)。 🎜🎜複雑なレイアウトの場合、画像の幅が固定されておらず適応的でない場合、通常は画像の幅のみを設定するというトリックを考えます。例: 🎜🎜🎜
.img-box {
 padding: 0 50% 66.66% 0;
}
ログイン後にコピー
ログイン後にコピー
🎜🎜<p>此时浏览器默认会保持图片比例显示,图片宽度大了,高度也跟着一起变大;图片宽度小了,高度也跟着一起变小。开发人员似乎无需关心图片真实比例是怎样的。

<p>然而这种技巧有一个非常不好的体验问题,那就是随着页面加载的进行,图片占据的高度会有一个从0到计算高度的图片变化,视觉上会有明显的元素跳动,代码层面会有布局重计算。

<p>所以对图片高宽进行同时约定还是有必要的,但是同时要保证宽度自适应,似乎有点难度。记住,如果遇到这种需求场景,没有比百分比padding布局更好的做法!

<p>缩小浏览器宽度可以看到不同宽度下的布局效果,Gif效果截图如下:

<p>

<p>此demo难点就是图片自适应同时保持比例,以及页面刷新的时候没有布局稳固不晃动,其核心HTML和CSS代码如下:

<br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

<p class="works-item-t">
  <img src="./150x200.png">
</p>
ログイン後にコピー
ログイン後にコピー
<p>

.works-item-t {
 padding-bottom: 133%;
 position: relative;
}
.works-item-t > img {
 position: absolute;
 width: 100%; height: 100%;
}
ログイン後にコピー
ログイン後にコピー
<p>

<p>可以看到,当把垂直方向padding值只使用padding-bottom表示的时候,如果没有text-align属性干扰,<img>元素的left:0;top:0是可以省略的。

<p>对于这种图片宽度100%容器,高度按比例的场景,padding-bottom的百分比值大小就是图片元素的高宽比,就这么简单。

<p>但,有时候,图片宽度并不是100%容器的,例如,图片宽度50%容器宽度,图片高宽比4:3,此时,CSS垂直方向百分比就666了,如下:

.img-box {
 padding: 0 50% 66.66% 0;
}
ログイン後にコピー
ログイン後にコピー
<p>相关推荐:

<p>一个CSS+div高度自适应布局模型_html/css_WEB-ITnose

<p>CSS3自适应全屏焦点图切换的特效怎么做

<p>响应式和自适应有什么区别

<p>

以上がアダプティブ画像レイアウトを作成するための 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)

Pythonで分数をパーセントに変換するにはどうすればよいですか? Pythonで分数をパーセントに変換するにはどうすればよいですか? Aug 25, 2023 pm 01:25 PM

分数とパーセンテージは、金融、データ分析、統計などのさまざまな分野で使用される 2 つの基本的な数学概念です。分数をパーセンテージに変換することは、分数の値をよりわかりやすい方法で表現できるようにするための単純ですが必要な操作です。最も人気のあるプログラミング言語の 1 つである Python には、分数をパーセントに変換するためのいくつかの方法が用意されており、これらの方法を理解することは、Python でデータを扱う人にとって非常に重要です。この記事では、Python での分数からパーセントへの変換について詳しく説明します。これを行うさまざまな方法を検討し、それぞれの方法を理解するのに役立つ例を示します。初心者でも経験豊富な Python プログラマでも、この記事では Python でこれを行うための鍵を提供します。

CSS ボーダー プロパティの詳細な説明: パディング、マージン、ボーダー CSS ボーダー プロパティの詳細な説明: パディング、マージン、ボーダー Oct 21, 2023 am 11:07 AM

CSS ボーダー プロパティの詳細説明: パディング、マージン、ボーダーCSS は、Web ページ要素の制御とレイアウトに使用されるスタイル シート言語です。 Web デザインにおいて、ボーダー属性は最も重要な部分の 1 つです。この記事では、CSSのborder属性の使い方と具体的なコード例を詳しく紹介します。 padding padding プロパティは、要素のパディング (要素のコンテンツと要素の境界線の間のスペース) を設定するために使用されます。正の数値またはパーセンテージ値を使用してパディングを設定できます

単語の出現頻度を取得するPythonプログラム 単語の出現頻度を取得するPythonプログラム Sep 08, 2023 pm 06:29 PM

この記事では、Python で単語の出現頻度をパーセンテージとして取得する方法を学びます。文字列入力のリストを取得したとします。ここで、指定された入力文字列リスト内の各単語の割合を見つけます。式 (OccurrenceofXword/Totalwords)*100 では、sum()、Counter()、join()、split() 関数を使用します。join()、split()、count() 関数を使用します。オペレーターモジュール。方法 1: sum()、Counter()、join()、split() 関数を使用する join() は Py

CSS テキスト レイアウト プロパティの詳細な説明: テキスト オーバーフローと空白 CSS テキスト レイアウト プロパティの詳細な説明: テキスト オーバーフローと空白 Oct 20, 2023 am 11:19 AM

CSS のテキスト レイアウト プロパティの詳細説明: テキスト オーバーフローとホワイト スペース Web デザインにおいて、テキスト レイアウトは非常に重要な要素であり、合理的なレイアウトにより、テキストはより読みやすく、美しくなります。 CSS には、テキスト オーバーフローや空白など、テキストの表示方法を制御するいくつかのプロパティが用意されています。この記事では、これら 2 つのプロパティの使用法とサンプル コードについて詳しく説明します。 1. text-overflow 属性テキスト

CSSでpadding属性を使用する方法 CSSでpadding属性を使用する方法 Dec 07, 2023 pm 02:58 PM

CSS では、要素のパディングを設定するために、padding プロパティが使用されます。これは、要素のコンテンツとその境界線の間のスペースを定義することを意味します。基本的な構文は「padding: value;」です。

Linuxのtopコマンドの詳しい説明 Linuxのtopコマンドの詳しい説明 Feb 20, 2024 am 09:20 AM

各 CPU の使用状況を確認するには、1 を押します。最初の行は現在時刻です。実行時間は現在ログインしているユーザーです。負荷分散 (1 分、5 分、10 分)。負荷平均データはアクティブなプロセスの数を確認します。 5 秒ごとに値を計算します。論理 CPU の数で割った数が 5 を超えると、システムは過負荷になります。 2 行目は、合計 248 のプロセス、1 実行中、247 スリープ、0 停止、0 ゾンビプロセスを持っています。 3 行目 us (userspace): ユーザー空間によって占有されている CPU の割合 sy (sysctl): ユーザー空間によって占有されている CPU の割合カーネル スペース ni() - 優先順位 ID を変更したプロセスによって占有されている CPU の割合 (idolt): アイドル CPU の割合 wa (wait): IO 待機占有 CP

iPhoneでバッテリーのパーセント表示を有効にするにはどうすればよいですか? iPhoneでバッテリーのパーセント表示を有効にするにはどうすればよいですか? May 08, 2023 pm 12:07 PM

iPhone でバッテリーの割合を表示する方法 以前は、バッテリー残量の正確な割合を確認するには、下にスワイプしてコントロール センターを開く必要がありました。ただし、ロック画面の上端に正確なバッテリーの割合を表示するオプションが戻ってきました。 iPhone でバッテリーの割合を表示するには: iPhone のホーム画面から設定アプリを開きます。 [設定] メニューを下にスワイプし、リストから [バッテリー] をタップします。次に、バッテリーパーセントボタンをオンの位置に切り替えます。最後に、画面右上隅のバッテリー アイコンの上に、正確な残量の割合が表示されます。この機能が有効になっている場合、ロック画面、ホーム画面、およびほとんどのアプリを参照すると、パーセンテージの数値が表示されます。バッテリーのパーセンテージが表示されない場合表示されない場合は、

CSS ボックス モデルのプロパティの探索: パディング、マージン、ボーダー CSS ボックス モデルのプロパティの探索: パディング、マージン、ボーダー Oct 20, 2023 pm 03:09 PM

CSS ボックス モデルのプロパティの調査: パディング、マージン、ボーダー CSS ボックス モデルは、Web ページ レイアウトにおける重要な概念の 1 つです。フロントエンド開発では、padding、margin、border 属性を理解し、正しく使用することが重要です。この記事では、これら 3 つのプロパティの使用法と相関関係を詳しく説明し、具体的なコード例を示します。 1. ボックス モデルの概要 ボックス モデルは、content、padding、bo の 4 つの部分で構成されます。

See all articles