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

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

問題の説明

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 スクリプトの基礎を詳しく紹介

推薦する

Vue の新しいおもちゃ VueUse の具体的な使い方

目次序文VueUseとは使いやすいおなじみの手ぶれ補正やスロットル機能もありますグローバル状態を共有...

純粋な CSS で中空効果を実現するためのサンプルコード

私は最近、空洞化効果について研究しました。背景クリップ: テキスト背景はテキストの前景色にクリップさ...

nginx を介して方向プロキシを実装するプロセスの図

この記事は主に、nginx を介して方向プロキシを実装するプロセスを紹介します。この記事のサンプル ...

css n番目から始まるすべての要素を取得する

具体的なコードは次のとおりです。 <div id="ボックス"> &...

Firebug ツールを使用して iPad でページをデバッグする

iPad でページをデバッグするにはどうすればいいですか? iOS 5 をご利用の場合、iPad の...

CSSは複数の要素をボックスの両端に揃える効果を実現します

要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...

Zen Coding 簡単で素早いHTMLの書き方

禅コーディングテキストエディタプラグインです。 Zen Coding を使用するテキスト エディター...

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

Linux における「/」と「~」の違いの詳細な説明

「/」はルートディレクトリ、「~」はホームディレクトリです。 Linux ストレージはツリー状にマウ...

ユニアプリとミニプログラム(画像とテキスト)を下請けする方法を教えます

目次1. ミニプログラム下請け2. Uniapp 下請けアプレット下請けの手順: 1. manife...

JavaScript カウントダウン プロンプト ボックス

この記事の例では、カウントダウンプロンプトボックスを実装するためのJavaScriptの具体的なコー...

MySQL 8.0 ディクショナリテーブル拡張の詳細な説明

MySQL のデータ ディクショナリは、データベースの重要なコンポーネントの 1 つです。INFOR...

歴史的な Linux 画像処理および修復ソリューション

従来の Linux イメージで作成された ECS クラウド サーバーには、NTP と YUM が設定...