これまでのところ、AMPページにスティッキーヘッダーを作成する確実な方法を見つけていません。私はcssの回避策/ハックがあることを知っていますが、運用環境では何も使用できません。単純な「position:fixed;」残念ながら、私の場合は機能しません。
すべてのコンポーネントの中で、スクロール時に本体クラスを切り替えるコンポーネントがあると思いましたが、まだ何も見つかりませんでした。また、「amp-position-observer」が役に立たないと考えてはいけません。
何か不足していますか? Xピクセルのスクロール後に要素のクラス名を切り替えられるようにしたいのですが。 AMPでこれが可能かどうか。
Xピクセルのスクロール後に要素のクラス名を切り替えることは、現在amp-position-observer amp-stateの変更を許可しない としてサポートされていません。
Amp-animationを使用して、amp-position-observerを組み合わせてヘッダーの一部を変更できます。ただし、そのアプリケーションは サポートされるCSSプロパティが制限されている であるため制限されます。それにもかかわらず、少しの創造性があれば、このアプローチは非常に柔軟にできます。考えられるパターンの1つは、ヘッダー内の要素を複製して、スクロール位置に基づいて表示/非表示にすることです。
ここ は、現在フォーカスされているセクションに基づいてヘッダーを強調表示するサンプルです。
Amp-list内にスティッキーヘッダーの実用的なソリューションを構築しました。落とし穴は、amp要素が多くの要素にdisplay: block
とposition: absolute
を追加することです。
position: sticky
を使用するには、すべてのサブエレメントでdisplay: inline
およびposition: relative
を使用する必要がありますあなたのヘッダー。これらが実際に適用され、上書きされていないことを確認します。IDを使用して、amp cssクラスよりも高い specificity を取得します。
Ampリストcssを使用した例を次に示します。
display: inline
が必要ですdisplay: inline
を使用している限り、divをネストできます。.sticky {
position: sticky;
z-index: 1;
display: inline-block;
box-sizing: border-box;
width: 100%;
background-color:white;
top: 40px;
}
.inline {
display: inline;
}
#list-wrapper, #list-wrapper>div {
display: inline;
position: relative;
}
<div>
<amp-list [src]="..." items="." single-item layout="flex-item" id="list-wrapper">
<template type="amp-mustache">
<div class="inline">
<span class="sticky">
<span>Sticky header</span>
</span>
</div>
</template>
</amp-list>
<div>Your content</div>
<div>