[CSSチュートリアル】タイトルを上部に配置するスティッキーレイアウトを実現するためのCSS
2022-01-12 18:51:21
アプリケーションのシナリオです。
新しい要件は、必ずしも多くの質問だけでなく、複数の人を獲得する必要性の下でトピックを含むアンケートを行うためのプロジェクトは、スライドのモバイル側は、この現象が起こるだろう、アップタイトルを忘れてしまうスクラッチ。だから、質問の頭の位置決めのための必要性の後に一定の距離を計算します。領域への質問の相対的な頭部にスライドを作ることは、採点を容易にするために上部に固定されています。
解決案です。
1. 固定レイアウトは、画面上部に固定するとタイトルヘッドが一定の距離になります。 (実現は可能ですが、あまりシルキーな処理ではありません)。
2.スティッキーレイアウト
stickyが良いが、互換性を考慮する必要がある(IEの互換性)
stickyでは、次のようなアイデアを実装しています。
1.最初にスライダーの位置を記録する必要があり、スクロールイベントをリッスンする必要があります。
'cflags_cc!': [ '-fno-rtti' ]
2. 各質問の画面上部からの質問ヘッダーの高さを計算し、配列を形成する。
// Remember to set ref for each question, my ref is the id of each question
-- vue abbreviation ---
<div
:ref="question.id"
v-for="(question, index) of formData.questions"
:key="index"
>
// I also did a sort to prevent jumbling problems
---- js -----
this.topPositionArr = [];
for (let key in this.$refs) {
for (let idx in this.$refs[key]) {
this.topPositionArr.push(this.$refs[key][idx].offsetTop);
}
}
this.topPositionArr = [. .new Set(this.topPositionArr)];
this.topPositionArrtopPositionArr = this.topPositionArr.sort(
(a, b) => {
return a - b;
}
);
3. 聞き取った距離と取得したヘッダーをスライドさせて比較し、配置したヘッダーを選択します。
// Compatible with different viewers The offsetTop is taken differently for different viewers
handleScroll() {
this.scrollTop = document.documentElement.scrollTop
scrollTop? document.documentElement.scrollTop
: document.body.scrollTop;
let scrollTop = this.scrollTop;
// the scrollTop of the first question remains unchanged, from the second question the scrollTop changes
this.topPositionArr.forEach((item, idx) => {
if (idx > 1) {
this.scrollTop = scrollTop + 220;
}
// Why do we do this? Because iE doesn't support sticky layouts, and we need a plugin to help with that
if (this.scrollTop > item) {
let elements = document.getElementById(`sticky${idx}`);
stickyfill.add(elements);
}
});
}
4. IEとの互換性の問題
IEはスティッキーレイアウトをサポートしていないため、ホイールスティッキーフィルが必要です。
npm install stickyfill
yarn add stickyfill
--- vue--
ヘッダーのdivタグに一意性を示す動的なidを付与する必要がある
<div
:id="`sticky${question.index}`"
class="isSticky"
>
シングルファイル紹介
Introduce in the page you need.
<script src="path/to/stickyfill.min.js"></script>
var Stickyfill = require("stickyfill");
var stickyfill = Stickyfill();
jsファイルです。
See 3 above for details on how to do this
let elements = document.getElementById(`sticky${idx}`);
stickyfill.add(elements);
上記は完璧に動作しますよ~~~~。
関連
-
[CSSチュートリアル】CSS+HTMLで実現するトップナビゲーションバー機能
-
[CSSチュートリアル】検索ボックスの非表示機能を実現するCSS(アニメーションの順送り・逆戻りシーケンス)
-
[CSSチュートリアル】CSSのfloatとunfloatについて
-
[CSSチュートリアル]cssのbackgroundとborderタグの例 詳細
-
[css3]スクロールバー美化効果を実現するcss3サンプルコード
-
[CSSチュートリアル】オーバーフロースクロールでスクロールの詰まりを解消する
-
[css3] css3の擬似クラスについて、共通使用前と共通使用後で説明する。
-
[CSSチュートリアル]css use negative margin to achieve average layout of example.
-
[CSSレイアウト例】フレックスレイアウトを使って簡単にページレイアウトを実現するサンプルコード
-
[CSSチュートリアル】css3 背景画像 半透明 コンテンツ 不透明 方法例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[CSSチュートリアル】CSS たった1行のコードでアバターと国旗の一体化を実現
-
[CSSチュートリアル】CSS3Animationで実現する簡単な指のクリックアニメーションの例
-
[CSSチュートリアル]css display table adaptive height, widthの問題解決
-
[CSSチュートリアル】position:stickyでトップ吸い上げアプレット問題を完璧に解決
-
[CSSチュートリアル】クールなネオン効果を実現するピュアCSS(デモあり)
-
[CSSチュートリアル]テーブル table :nth-child()を使って行間の色変更と整列を実現する。
-
[CSSチュートリアル】SVGを使ったCSSアニメーションでエネルギーフローを表現する
-
[CSSチュートリアル】テーブルの最大幅と最小幅の相性問題と解決策を解説
-
[CSSチュートリアル]マウスをスライドさせてカードを浮かせるCSSの例
-
[CSSチュートリアル】CSSスタイルをプログラムで処理するサンプルコード