CSS可視性属性
1.問題
現在、パーソナルプロジェクトが行われています.コントローラボタンをスクロールしたいです.
一定の長さでスクロールするとスクロールコントローラボタンが表示され、スクロールしないと画面に表示されないことを実現しました.
最初に使用されたのはcssの
display
属性です.スクロール時は
display:block
を行い、一定スクロール未満の場合はdisplay:none
を行う.そして、このボタンが表示されて消えると不透明値が徐々に変化するアニメーションをお届けしたいと思います。
したがって,transitionと不透明値を用いて以下のように実現した.
(reactとstyled-componsesのコードを使用します.)🔥
2.displayプロパティはアニメーションには適用されません🥺
(생략)
<ScrollBtnWrapper isDisplay={controllerShow}
onClick={onScrollBtnClickHandler}>
<ScrollButton className='up-btn'>∧</ScrollButton>
<ScrollButton className='down-btn'>∨</ScrollButton>
</ScrollBtnWrapper>
(생략)
const ScrollBtnWrapper = styled.div`
position:fixed;
width:5vh;
height:15vh;
right:4vw;
bottom:7vh;
transition: all 0.5s;
${(props)=> {
if(!props.isDisplay) {
return css`
display:none;
opacity:0;
`
}
}}
`
しかし、目的のアニメーションは適用されず、displayプロパティのみが適用されるように、画面に断続的に表示されます.この問題を解決するために、グーグル社は
visibility
という属性を発表した.3.可視性プロパティを使用して解決!
display:noneプロパティは
visibility: hidden
に変更され、アニメーションも有効になりました.Visibilityプロパティには、
hidden, visible, collapse
の3つの値があります.詳細については、MDNを使用するとさらに役立ちます.
https://developer.mozilla.org/ko/docs/Web/CSS/visibility
4.可視性と表示の違い
MDNサイトを確認します.
上の内容を確認できます.
visibility:hidden
を使用すると、そのスペースは変更されませんが、画面には表示されません.つまり、レイアウトは変わらない.逆に、
display:none
を使用すると、要素がまったく存在しないように、レイアウトが変化し、空間が一定に保たれません.👉 この事実では、なぜdisplay属性がアニメーションを通過しなかったのか理解しにくい.
displayプロパティとtransitionプロパティの関係
1.レンダリングツリー
HTMLとCSSをグループ化するとDOMとCSSOMが生成され、両者を組み合わせて
렌더링 트리
が生成されます.レンダーツリーは、スクリーンに出力する要素のレイアウトを計算し、スクリーンにレンダーするペイントプロセスの入力として処理します.
レンダーツリーでは、スクリーンに印刷する必要のないノード、CSSで非表示のノード(
display: none
など)が省略されています.2.トランジション属性とレンダリングツリー
transition
は、任意の状態で特定のイベントをトリガすることを可能にし、任意の属性の変化は一定期間にわたって発生する.ただし、display:none
の状態でクラスを動的にdisplay:block
に変更すると、レンダーツリーにクラスが追加され、遷移の開始点は存在しません.そのため、視覚的には移行は役に立たないようだ.参考ブログ:https://velog.io/@dev-tinkerbell/display-none%EC%9D%B4-transition%EC%9D%B4-%EC%95%88%EB%A8%B9%ED%9E%88%EB%8A%94-%EC%9D%B4%EC%9C%A0
Reference
この問題について(CSS可視性属性), 我々は、より多くの情報をここで見つけました https://velog.io/@apro_xo/CSS-visibility-속성テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol