高さ:100% が機能しないのはなぜですか?

高さ:100% が機能しないのはなぜですか?

高さ:100% が機能しないのはなぜですか?

この知識は不人気ではありませんが、使用する際には混乱するかもしれません。うまくいかないときは検索すれば答えが見つかりますが、本当に理解していますか?フルスクリーン要素を設定するときに、高さが % で制御されないのはなぜですか?

1. 幅と高さのパーセンテージを設定する

w3c の幅と高さの属性によれば、幅と高さは親要素の幅と高さに応じて設定されていることが明確にわかります。
https://www.w3school.com.cn/cssref/pr_dim_width.asp
https://www.w3school.com.cn/cssref/pr_dim_height.asp

2.幅:100%;

このようなコードを記述し、要素を観察しやすくするために背景色をランダムに設定します。次のコードに注意してください。<!DOCTYPE html> を追加することを忘れないでください。そうしないと、結果が異なります。

<本文>
    <div スタイル="幅:100%;高さ:100%;背景色:青紫;">
    幅:100%;高さ:100%;
    </div>
</本文>
// 幅は 100% ですが、表示される高さは 100% ではなく font-size に属します。 

<本文>
    <div style="width:100%;height:200px;background-color:blueviolet;">
    幅:100%;高さ:200px;
    </div>
</本文>
//効果は次のようになります

幅を 100% にするのは簡単ですが、高さを % 比率で設定することはできません (要素が消えてしまいます)。なぜでしょうか?

3. ブラウザは高さと幅をどのように計算しますか?

Web ブラウザは、有効な幅を計算するときにブラウザ ウィンドウの開いた幅を考慮します。幅にデフォルト値を設定しない場合、ブラウザは自動的にページ コンテンツを水平幅全体を埋めるように並べて表示します。つまり、幅を設定しないと、次のように水平方向の幅全体が自動的に埋められます。

<div style="height:100%;">高さ:100%;</div> 

しかし、高さの計算方法はまったく異なります。実際、ブラウザは、コンテンツがビューポートを超えない限り (スクロール バーが表示される場合)、コンテンツの高さをまったく計算しません。または、ページ全体の絶対的な高さを設定します。そうしないと、ブラウザはページの高さをまったく考慮せずにコンテンツをそのまま積み重ねてしまいます。
ページにはデフォルトの高さの値がないため、要素の高さをパーセンテージで設定すると、親要素の高さを取得できず、その要素自体の高さを計算できません。
つまり、親要素の高さは単なるデフォルト値、つまり height: auto; です。height: 100% を設定すると、ブラウザにそのようなデフォルト値に基づいてパーセンテージの高さを計算するように要求し、未定義の結果しか得られません。つまり、null 値であり、ブラウザはこの値に応答しません。
ブラウザによって幅と高さの解釈が異なるため、自分で検索することができます。

4. 解決方法

これで、% は親要素を基準に計算された高さであることがわかりました。これを有効にするには、親要素の高さを設定する必要があります。
注意すべき点は、<body> 内の要素の親要素は <body> だけでなく <html> でもあるということです。
したがって、両方の高さを同時に設定する必要があります。どちらか一方だけを設定しても機能しません。

 html,本文{
            高さ: 100%;
            マージン: 0;
            パディング: 0;
        } 

5.行の高さの中央揃えに関する誤解?

<!DOCTYPE html>
<html lang="ja">

<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <meta http-equiv="X-UA-compatible" content="ie=edge">
    <title>ドキュメント</title>
    <スタイル>
        html,本文{
            高さ: 100%;
            マージン: 0;
            パディング: 0;
        }
        div {
            色: 白;
            テキスト配置: 中央;
            フォントサイズ: 30px;
            行の高さ: 100%;
            背景色: 青紫;
        }
    </スタイル>
</head>

<本文>
    <!-- <div style="width:100%;height:100%;">幅:100%;高さ:100%;</div> -->
    <div style="height:100%;">高さ:100%;</div>
    <!-- <div style="width:100%;height:200px;">幅:100%;高さ:200px;</div> -->
</本文>

</html>

コードはすべて上記のとおりです。行の高さが 100% に設定されているのに、中央に配置されていないことがわかります。これはなぜでしょうか。このときの % はフォント サイズに対する相対値であるためです。したがって、絶対的な高さを持たない要素に直接作用することはできません。

行の高さプロパティの説明: https://www.w3school.com.cn/cssref/pr_dim_line-height.asp

このとき中央揃えにしたい場合は、以下のように高さ用と中央揃え用のdivをネストします。あまり使われていないようですが、中央揃えはやはり効果的です~

<!DOCTYPE html>
<html lang="ja">

<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <meta http-equiv="X-UA-compatible" content="ie=edge">
    <title>ドキュメント</title>
    <スタイル>
        html,
        体 {
            高さ: 100%;
            マージン: 0;
            パディング: 0;
        }

        .div1 {
            背景色: 青紫;
            位置: 相対的;
        }

        .div2 {
            フォントサイズ: 30px;    
            色: 白;
            テキスト配置: 中央;                    
            幅: 400ピクセル;
            位置: 絶対;
            左: 50%;
            上位: 50%;
            変換: translateX(-50%) translateY(-50%);
        }
    </スタイル>
</head>

<本文>
    <!-- <div style="width:100%;height:100%;">幅:100%;高さ:100%;</div> -->
    <div スタイル="高さ:100%;" クラス="div1">
        <div class="div2">高さ:100%;</div>
    </div>
    <!-- <div style="width:100%;height:200px;">幅:100%;高さ:200px;</div> -->
</本文>

</html> 

6. ソースコード

https://github.com/JiaXinYi/ife-study/blob/master/height/height.html

交通機関のリンク:

(...) フロントエンドの知識 - 記述した height:100% が機能しないのはなぜですか? _Know why - フロントエンド - SegmentFault

この記事は、あなたが書いた height:100% が機能しない理由についての説明はこれで終わりです。height:100% が機能しない理由に関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  html-webpack-plugin の使用方法の詳細な説明

>>:  文字列の GBK および GB2312 エンコードとデコードのフロントエンド実装 (概要)

推薦する

MySQLでテーブルを作成し、フィールドコメントを追加する方法

コードと例を直接投稿する #テーブル作成時にコメントを記述する CREATE TABLE useri...

ブラウザの互換モードでボタン内のテキストが垂直方向に中央揃えにならない問題について簡単に説明します。

XML/HTML コードコンテンツをクリップボードにコピー<ボタンスタイル= "カ...

詳細なLinuxインストールチュートリアル

(Win7 システム) VMware 仮想マシンのインストール チュートリアルVMware は仮想マ...

Lua モジュールを使用して WAF を実装する Nginx の原理の分析

目次1. WAFの背景2. WAFとは3. 動作原理4. WAF機能5. WAFと従来のファイアウォ...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.14のインストールと設定のプロセスを記録しています。具体的な内容は...

MySQLデータベースのbinlogクリーンアップコマンドの詳細な説明

概要今日は主に、MySQL データベースから binlog ログを正しく削除する方法を紹介します。ロ...

MySQL でのサブクエリの基本的な使用法

目次1. サブクエリの定義2. サブクエリの分類1. スカラーサブクエリ: 2. MySQLサブクエ...

Tomcat コアコンポーネントとアプリケーションアーキテクチャの詳細な説明

目次Web コンテナとは何ですか? HTTP の性質HTTP リクエスト応答の例クッキーとセッション...

MySQLのストレージエンジンの詳細な説明

MySQL ストレージ エンジンの概要ストレージ エンジンとは何ですか? MySQL のデータは、さ...

Vue バインディング オブジェクト、配列データを動的にレンダリングできないケースの詳細な説明

プロジェクトシナリオ: Dark Horse Vueプロジェクト管理の実践、製品分類の取得、拡張バー...

Nginx レベルで基本的なユーザー認証を構成する手順を完了します。

序文アプリケーション シナリオ: おそらく、内部 Web サイトは外部ユーザーにアクセス可能である必...

ネイティブ JS オブジェクト指向タイピング ゲーム

この記事では、JSオブジェクト指向タイピングゲームの具体的なコードを参考までに紹介します。具体的な内...

HTML onfocus gain focus および onblur lose focus イベントの詳細な説明

HTML onfocus イベント属性定義と使用法onfocus 属性は、要素がフォーカスを受け取っ...

MySQLはカバーインデックスを使用してテーブルリターンを回避し、クエリを最適化します。

序文カバーリング インデックスについて説明する前に、まずそのデータ構造である B+ ツリーを理解する...

Linux CentOS6.5 yum インストール mysql5.6

この記事では、Linux yumを使用してmysql5.6をインストールする簡単な手順を参考までに紹...