「position:absolute」を親コンテナではなくドキュメントを基準にして強制します


93

divを本文の任意の部分に挿入しposition: absoluteposition: relative。を持つ親要素ではなく、ドキュメント全体を基準にしてdivを作成しようとしています。


その位置がドキュメントに対して絶対的である場合、それは<body>タグの子として属しますね。
ジム・ギャリソン

以下の私の解決策を見ましたか?
tw16 2011

うん。私は多くのページで使用され、時には相対的に配置された要素の内部で使用されるテンプレートを作成しています(これは制御できません。今では不可能であることがわかりました。助けてくれてありがとう。私から+1して、マークを付けます正しいあなたがあなたの答えでその不可能と言うなら。
ティモシーRuhle

回答:


36

要素のdiv外側をに配置するposition:relative必要がありbodyます。


1
^^これ。絶対に配置されている場合は、とにかく比較的配置された要素の内部に配置する理由は実際にはありません。
DOOManiac 2011

7
@ DOOManiac-マウスオーバースクリプトを実行したり、親によってトリガーされたマウスアウトスクリプトを実行したりしないため、比較的配置された要素内に配置することをお勧めします。私の答えはそのような状況を考慮に入れています。
Michael.Lumley 2014

1
@DOOManiac絶対要素を相対要素に配置する理由は、絶対divを相対要素に対して相対的に配置するためです。ボディに対して相対的な位置に配置する場合、ボディは、そのように設定されていなくても、デフォルトでは相対的です。
ジェイソンフォグリア2015

18
コンテナを別のコンテナの子にする必要がある理由は何百もありますが、位置はドキュメントに対して絶対的である必要があります。体に直接入れるような答えは間違っています。正解は位置です:固定。反対票を投じた。
walv 2017年

3
@walv:position:fixedそしてposition:absolute同じ振る舞いはありません。固定はビューポート(ドキュメントではない)に関連しており、スクロールした後でもアイテムが常に表示されるため、オーバーラップなどが発生する可能性があります。html構造には正当な理由があることは理解していますが、質問は特にhtmlとcss、私の答えは正しいです。JSを使用せずにドキュメントに対して相対的なものにする唯一の方法は、position:relative要素の外に移動することです。
tw16 2017年

95

あなたが探しているposition: fixed

MDNから

固定配置は、要素を含むブロックがビューポートであることを除いて、絶対配置に似ています。これは、ページをスクロールした後でも同じ位置にとどまるフローティング要素を作成するためによく使用されます。


28
この回答の問題は、固定要素はスクロールで移動せず、絶対要素は移動するため、ユーザーが絶対を使用したかったことです:)
友人

3
あなたは絶対的な伝説です。
ベニスバーガー

6
質問があったかの相対位置に文書ではなく、ビューポート
ポール・ハンフリーズ

これは、潜在的理由スタッキングコンテキストのバグのため、IE11で問題を引き起こす可能性があります
ジェームズウエストゲートに

32

私の解決策は、jQueryを使用してdivを親の外に移動することでした。

<script>
    jQuery(document).ready(function(){
        jQuery('#loadingouter').appendTo("body");
    });
</script>

<div id="loadingouter"></div>

1
マスターページを使用していたため、要素をbody要素内に直接配置できなかったため、これで問題が解決しました。ありがとう!
オスプレイ2013年

9

要素をにアタッチしたくない場合bodyは、次の解決策が機能します。

マウスが新しい要素とそれを生成した要素の両方の上にあるときに実行したいマウスオーバースクリプトがあったので、divを本体にアタッチしなくても機能する解決策を探してこの質問に行きました。jQueryを使用する意思があり、@ Liam Williamの回答に触発されている限り:

var leftOffset = <<VALUE>>;
var topOffset = <<VALUE>>;
$(element).css("left", leftOffset - element.offset().left);
$(element).css("top", topOffset - element.offset().top);

このソリューションは、要素の現在の左右の位置(ボディに対して)を減算して、要素を0、0に移動することで機能します。ボディに対して必要な場所に要素を配置するのは、左右のオフセットを追加するのと同じくらい簡単です。値。


2
また、jQueryUIの位置関数も言及する価値があります。
Michael.Lumley 2014年

8

これは、CSSとHTMLだけでは不可能です。

Javascript / jQueryを使用すると、要素jQuery.offset()をDOMに取得し、それを比較してjQuery.position()、ページのどこに表示するかを計算できる可能性があります。


私見この答えは最も役に立ちます-要素を本体の真下に移動せずに(常に可能であるとは限りません)、位置を固定して下にスクロールしても要素が常に表示されるようにすることなく、JSに頼ることしかできません。jQuery.offset({ left: 0 })勝利のために!
BornToCode
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.