フィルターと固定間の競合の原因と解決策の詳細な説明

フィルターと固定間の競合の原因と解決策の詳細な説明

問題の説明

body内でfilter属性を使用すると、 fixed要素の位置が不正確になります。つまり、 viewportを基準に配置されるのではなく、Web ページ全体 ( body要素) を基準に配置されることになります。

<html>
  <ヘッド>
    <title>CSS フィルターの問題</title>
    <スタイル>
      体 {
        高さ: 600px;
        背景: 赤;
        filter: grayscale(1); /* キーコード*/
      }

      。修理済み {
        色: 黄色;
        位置: 固定;
        上: 0;
        右: 0;
      }
    </スタイル>
  </head>
  <本文>
    <div class="fixed">修正された項目</div>
  </本文>
</html>

効果図は次のようになります。右上隅のfixed item要素が、画面ビューの右上隅を基準に配置されなくなったことに注意してください。

解決

この問題の原因は、 filternoneでない場合、要素またはその子要素にabsoluteまたはfixed属性があると、新しい包含ブロック/コンテナーが作成され、それによってabsolute要素またはfixed要素の位置が変更されることです (つまり、 absolute要素またはfixed要素の位置 <parent> 要素が、新しく作成された要素に変更されます)。

上記の例では、 bodyタグでfilter属性を使用すると、 filter bodyと同じ位置とサイズの新しい包含ブロックを生成し、この包含ブロックに従ってfixed要素が配置されるため、 fixed要素が元の特性を失っていることがわかります。

ただし、フィルターがルート要素 (つまり、HTML タグ) に作用する場合、絶対または固定の子要素に対して新しい包含ブロックは作成されません。

参考: https://drafts.fxtf.org/filter-effects/#FilterProperty

解決策は非常に簡単で、 htmlタグにfilter属性を追加するだけです。

html{
	フィルター: グレースケール(1);
}

拡張機能

1. position: fixed

要素にfixed属性が含まれている場合、画面viewport 、その要素に対してviewportと同じサイズのcontaining blockを作成し、その包含ブロックに基づいてfixed要素が配置されます。したがって、通常、 fixed要素はviewportに対して相対的に配置されると言われます。

さらに、 fixed属性は新しいスタック コンテキストを作成します。要素の祖先のtransformperspective 、またはfilterプロパティがnone以外の場合、コンテナーはビューポートからその祖先に変更されます。

参考: https://www.w3.org/TR/css-position-3/#fixed-pos

2. HTMLタグとbodyタグ

両者の違いについては、こちらのブログをご覧ください: http://phrogz.net/css/htmlvsbody.html

ps: HTML 要素は最大(画面の高さ <ビューポートの高さ>、内部要素の高さ <本体要素の高さ>) です。

以上で、フィルターと固定の競合の原因と解決方法についての説明は終了です。フィルターと固定の競合の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  ウェブフロントエンドエンジニアにおすすめのヒント

>>:  Linux スクリプトの基礎を詳しく紹介

推薦する

...

効率化に役立つ 20 の CSS コーディングのヒント (並べ替え)

この記事では、主要な CSS ウェブサイトで推奨されている 20 個の便利なルールとベスト プラクテ...

親要素を基準にCSSの位置を絶対的に設定する方法についての簡単な説明

ご存知のとおり、CSS の絶対位置はデフォルトでドキュメントに応じて設定されます。たとえば、posi...

この記事は、JQueryの基本的な操作を理解し、始めるのに役立ちます。

目次1. Jquery を使用する手順: (1)jsライブラリをインポートする(2)ページ読み込みイ...

Nginx を使用して rtmp ライブ サーバーを実行する方法

今回は、コンピューターや携帯電話用の rtmp ライブ ブロードキャスト サーバーを設定し、ライブ ...

Nginx リバース プロキシと負荷分散の実践

リバースプロキシリバースプロキシとは、プロキシサーバーを介してユーザーのアクセス要求を受信し、ユーザ...

Nginx 最適化サービスで Web ページ圧縮を実装する方法

リソースを節約するためにWebページの圧縮を設定する1.まず、設定を変更しましょう vim /usr...

LinuxでRPMを使用してmysql5.7.17をインストールする

LinuxでのMySQL5.7 rpmのインストール方法を参考までに記録します。具体的な内容は以下の...

React ルーティング リンク構成の詳細

1. 属性へのリンク(1)ルーティングパスを配置する(2)指定された形式でオブジェクトを配置する{パ...

MySQLのさまざまなオブジェクトのサイズと長さの制限について話しましょう

目次識別子の長さ制限権限テーブルの範囲フィールドの長さ制限データベースとテーブルの数の制限テーブルサ...

HTML フローティング フレーム (iframe 読み込み HTML) の設定と使用の例

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

HTML 5のドラフトは正式な標準にはならなかった

<br />昨日、W3C で新しいHTML 5 ドラフト (ワーキング ドラフト) が ...

Vue ポーリング リクエスト ソリューションの完全な例

世論調査の理解実際、ポーリングの焦点はループ自体ではなく、実行間の間隔にあります。 Ajax は非同...

JavaScriptの基礎を学ぶ

目次1. JavaScriptを記述する場所2. JavaScriptでよく使われる入力文と出力文1...

メンテナンス可能なJSコードの書き方を教えます

目次保守可能なコードとは何ですか?コード規約1. 読みやすさ2. 変数と関数の命名3. 透過的な変数...