JavaScript offsetParent のケーススタディ

JavaScript offsetParent のケーススタディ

1. offsetParentの定義: offsetParentは子要素に最も近い位置に配置された親要素です(位置:絶対相対固定)。親要素に位置指定がない場合、offsetParentは: body要素

2. 定義によれば、次のような状況がある。

  1. 要素自体の配置が固定で、親要素の配置が固定でない場合、offsetParent の結果は null になります (Firefox では body、他のブラウザでは null)
  2. 要素自体には固定の位置がなく、親要素にも位置がなく、offsetParentは<body>要素です。
  3. 要素自体には固定の位置はなく、親要素に位置があり、offsetParent は、配置された自身に最も近い親要素です。
  4. <body> 要素の offsetParent が null です
<!DOCTYPE html>
<html lang="ja">
 
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>ドキュメント</title>
</head>
 
<本文>
 <div id="test1" style="position:fixed"></div>
 
 <div id="test2"></div>
 
 <div id="div0" style="position:absolute;">
    <div id="div1" style="position:absolute;">
        <div id='test3'></div>    
    </div>    
</div>
 
<スクリプト>
    /*
    [1] 要素自体の位置が固定で、親要素の位置が固定でない場合、offsetParentの結果はnull(Firefoxではbody、他のブラウザではnull)になります。
    */
    var test1 = document.getElementById('test1');
    console.log('test1 offsetParent: ' + test1.offsetParent);
    /*
    【2】要素自体には固定の位置がなく、親要素にも位置がなく、offsetParentが<body>要素である*/
    var test2 = document.getElementById('test2');
    console.log('test2 offsetParent: ' + test2.offsetParent);
    /*
    【3】要素自体には固定の位置がなく、親要素にも位置がなく、offsetParentが<body>要素である*/
    var test3 = document.getElementById('test3');
    console.log('test3 offsetParent: ' + test3.offsetParent);
    /*
    【4】<body>要素のoffsetParentがnullである
    */
     */
    console.log('body offsetParent: ' + document.body.offsetParent);//null
 
</スクリプト>
</本文>
 
</html>

3. IE7では、positioningのoffsetParentに関して次のようなバグがあります。

[1] 要素自体が絶対位置または相対位置に配置され、親要素に位置指定された要素がない場合、IE7ブラウザではoffsetParentは<html>です。

<div id="test1" style="position:absolute;"></div>    
<スクリプト>
//IE7 ブラウザは <html> を返し、他のブラウザは <body> を返します
コンソールにログ出力します。
</スクリプト>
<div id="test2" style="position:relative;"></div>    
<スクリプト>
//IE7 ブラウザは <html> を返し、他のブラウザは <body> を返します
コンソールにログ出力します。
</スクリプト>
<div id="test3" style="position:fixed;"></div>    
<スクリプト>
//Firefox は固定位置の問題を考慮せず <body> を返しますが、他のブラウザは null を返します
コンソールにログ出力します。
</スクリプト>

【2】親要素にhaslayoutをトリガーする要素または配置された要素があり、offsetParentの結果が要素に最も近い親要素であり、配置されたかhaslayoutをトリガーする場合

<div id="div0" style="display:inline-block;">
    <div id='テスト'></div>    
</div>
<スクリプト>
//IE7 ブラウザは <div id="div0"> を返し、他のブラウザは <body> を返します
コンソールにログ出力します。
</スクリプト>
<div id="div0" style="position:absolute;">
    <div id="div1" style="display:inline-block;">
        <div id='テスト'></div>    
    </div>    
</div>
<スクリプト>
//IE7 ブラウザは <div id="div1"> を返し、他のブラウザは <div id="div0"> を返します
コンソールにログ出力します。
</スクリプト>
<div id="div0" style="display:inline-block;">
    <div id="div1" style="position:absolute;">
        <div id='テスト'></div>    
    </div>    
</div>
<スクリプト>
//すべてのブラウザは <div id="div1"> を返します
コンソールにログ出力します。
</スクリプト>

JavaScript offsetParent ケースの詳細な説明については、これで終わりです。JavaScript offsetParent に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JS OffsetParentプロパティの詳細な分析
  • jsのparentElementとoffsetParentの違い
  • Javascript ドラッグ シリーズ記事 1 offsetParent プロパティ

<<:  Mysql8.0はソート問題を解決するためにウィンドウ関数を使用する

>>:  Nginxは特定のページへのIPアクセスを制限します

推薦する

MySQL ページング制限の実用的な最適化

序文クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要があり...

mysql ルートユーザーを認証できず、Navicat リモート認証プロンプト 1044 の問題を解決します

まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...

画面なしで無線ネットワークに接続しているときに Raspberry Pi の IP アドレスを見つける方法

あなたがlinuxerだと仮定すると、 windowserだとは想定しません。Windows ユーザ...

vue+elementui+vuex+sessionStorage を使用して履歴タグ メニューを実装するためのサンプル コード

一般的には、左側にメニューがあった後、ページの上部に履歴タブ メニューを追加する必要があります。他の...

CentOS 8 システム FTP サーバーのインストールとパッシブ モードの設定の詳細なチュートリアル

目次1. 基本を理解する2. システム環境を確認する3. ftpコマンドをインストールする[オプショ...

Vue の状態管理: Vuex の代わりに Pinia を使用する

目次1. ピニアとは何ですか? 2. Piniaは使いやすい3. ユーザーエクスペリエンス1. ピニ...

Linux および CentOS (サーバー) に zip および unzip コマンド機能をインストールする

Linux に zip 解凍機能をインストールする通常、 zip コマンドは Linux サーバーに...

JavaScript の基礎: スコープ

目次範囲グローバルスコープ関数のスコープもし、スイッチ、のために、その間ブロックスコープスコープチェ...

Vue3とTypeScriptを組み合わせたプロジェクト開発の実践の概要

目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...

react-virtualized を使用して、動的な高さを持つ画像の長いリストを実装する

目次開発中に発生した問題解決具体的な実装実績まとめバーチャルリストは、スクロールコンテナ要素の表示領...

YUMを使用してdockerをインストールする方法

次の図に示すように: Centos 7.0以上であれば問題ありません。現在のシステム カーネル バー...

画像をMySQLデータベースに保存し、フロントエンドページに表示するための実装コード

目次1. まず、pycharmを使用してDjangoプロジェクトを作成し、関連する環境を設定します。...

単一行関数と文字計算日付プロセス制御を説明する MySQL の例

目次1. キャラクター機能1. ケースコントロール機能2. キャラクターコントロール機能2. 数学関...

HTML でナンバープレート番号と州の略語を入力するためのサンプルコード

原理としては、まずボタン付きの div を記述し、次に画面のサイズに応じて自動的に適応してキーボード...