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

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

問題の説明

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

推薦する

Linux でソースインストールされたパッケージを簡単に削除する方法

ステップ1: Stowをインストールするこの例では CentOS を使用しているため、拡張 EPEL...

Linuxでディレクトリを効率的に切り替える方法

Linux でディレクトリを切り替えるとなると、誰もが間違いなくcdコマンドを思い浮かべるでしょう。...

Linux/CentOS システムでネットワーク時間を同期する 2 つの方法の詳細な説明

ハードウェア上の理由により、機械は標準時間にある程度追いつけない場合があり、その誤差は 1 か月で数...

1 行のコードでさまざまな IE 互換性の問題を解決します (IE6-IE10)

x-ua-compatible は、IE ブラウザがページを解析およびコンパイルするためのモデルを...

CentOS に Docker をインストールし、Springboot で Docker をリモート公開する方法

目次1. CentOS7.0へのJDK1.8のインストール2. Dockerのインストール3.Doc...

InnoDB のアーキテクチャと機能の詳細な説明 (InnoDB ストレージ エンジンの読書メモの要約)

背景スレッド•マスタースレッドコア バックグラウンド スレッドは主に、バッファー プール データをデ...

Vue プロジェクトをパッケージ化して Apache サーバーにデプロイする手順

開発環境では、vue プロジェクトは、ローカルで Express サーバーを構築することをベースにし...

Jupyter Notebook で JavaScript を実行する方法

その後、VSC で Jupyter Notebook を使用する方法も追加しました...アナコンダを...

yum を使用して rpm と関連する依存関係をダウンロードして、docker をオフラインでインストールします。

yum を使用してすべての依存関係を一緒にインストールできますが、–downloadonly –d...

React 関数コンポーネントのパフォーマンス最適化のアイデアの詳細な説明

最適化のアイデア最適化には主に 2 つの方向があります。再レンダリングの回数を減らします。 Reac...

Dockerでnginxを実行し、ローカルディレクトリをイメージにマウントする方法

1 hupからイメージを取得する docker プル nginx 2 マウントするディレクトリを作成...

Vue3+el-tableは行と列の変換を実現します

目次行と列の変換トランスクリプトの構成を分析するvue3 + el-table で作成されたトランス...

JavaScript の 3 つの BOM オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

UniappはBaidu Voiceを使用して録音をテキストに変換する機能を実現

3日間さまざまな困難に遭遇した後、ようやくこの機能を実現しました。正常に実装できる方法を見つける前に...