>  기사  >  웹 프론트엔드  >  position:sticky를 사용하여 고정 레이아웃 예제를 구현하는 CSS에 대한 자세한 설명

position:sticky를 사용하여 고정 레이아웃 예제를 구현하는 CSS에 대한 자세한 설명

小云云
小云云원래의
2018-02-02 10:36:113349검색

이 글에서는 CSS 위치 고정을 사용하여 고정 레이아웃을 구현하는 방법에 대한 관련 정보를 주로 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

Introduction

일반적으로 사용되는 몇 가지 위치 속성을 설명하기 전에 기사를 썼습니다: "CSS 기본 - 위치 속성 설명"

일반적으로 다음과 같은 일반적으로 사용되는 속성을 알고 있습니다.


{
position: static;
position: relative;
position: absolute;
position: fixed;
}

https://developer .mozilla.org/zh-CN/docs/Web/CSS/position에서는 다음 세 가지 값도 언급했습니다.


/* 全局值 */
position: inherit;
position: initial;
position: unset;

대부분이 position:stickyBar를 사용한 적이 없는 것으로 추정됩니다. . 이 속성 값은 아직 실험 단계에 있습니다. 그것을 설명하는 방법? <code>position:sticky吧。这个属性值还在试验阶段。怎样描述它呢?

初窥 position:sticky

sticky 英文字面意思是粘,粘贴,所以姑且称之为粘性定位。下面就来了解下这个处于实验性的取值的具体功能及实用场景。

这是一个结合了 position:relative 和 position:fixed 两种定位功能于一体的特殊定位,适用于一些特殊场景。

什么是结合两种定位功能于一体呢?

元素先按照普通文档流定位,然后相对于该元素在流中的 flow root(BFC)和 containing block(最近的块级祖先元素)定位。

而后,元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。

这个特定阈值指的是 top, right, bottom 或 left 之一,换言之,指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

sticky:对象在常态时遵循常规流。它就像是relativefixed的合体,当在屏幕中时按常规流排版,当卷动到屏幕外时则表现如fixed。该属性的表现是现实中你见到的吸附效果。

常用场景:当元素距离页面视口(Viewport,也就是fixed定位的参照)顶部距离大于 0px 时,元素以 relative 定位表现,而当元素距离页面视口小于 0px 时,元素表现为 fixed 定位,也就会固定在顶部。

代码:


{
    position: -webkit-sticky;
    position: sticky;
    top: 0;
}

如下图表现方式:

距离页面顶部大于20px,表现为 position:relative;

距离页面顶部小于20px,表现为 position:fixed;

运用 position:sticky 实现头部导航栏固定

html代码:


<p class="con">
    <p class="samecon">
        <h2>标题一</h2>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
    </p>
    <p class="samecon">
        <h2>标题二</h2>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
    </p>
    <p class="samecon">
        <h2>标题三</h2>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
    </p>
    <p class="samecon">
        <h2>标题四</h2>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
    </p>
    <p class="samecon">
        <h2>标题五</h2>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
    </p>
    <p class="samecon">
        <h2>标题五六</h2>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
        <p>这是一段文本</p>
    </p>
</p>

CSS代码:


.samecon h2{
    position: -webkit-sticky;
    position: sticky;
    top: 0;
    background:#ccc;
    padding:10px 0;
}

同理,也可以实现侧边导航栏的超出固定。

生效规则

  • 须指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

    • 并且 top bottom 同时设置时,top 生效的优先级高,left right 同时设置时,left 的优先级高。

  • 设定为 position:sticky 元素的任意父节点的 overflow 属性必须是 visible,否则 position:sticky 不会生效。这里需要解释一下:

    • 如果 position:sticky 元素的任意父节点定位设置为 overflow:hidden,则父容器无法进行滚动,所以 position:sticky 元素也不会有滚动然后固定的情况。

    • 如果 position:sticky 元素的任意父节点定位设置为 position:relative | absolute | fixed,则元素相对父元素进行定位,而不会相对 viewprot 定位。

  • 达到设定的阀值。这个还算好理解,也就是设定了 position:sticky 的元素表现为 relative 还是 fixed

  • 포지션을 먼저 살펴보세요:sticky

sticky는 말 그대로 영어로 끈끈하다는 뜻이므로 끈끈한 포지셔닝이라고 부르겠습니다. 이 실험값의 구체적인 기능과 실제 시나리오에 대해 알아 보겠습니다.

이것은 위치:상대 및 위치:고정의 두 가지 위치 지정 기능을 결합한 특수 위치 지정이며 일부 특수한 시나리오에 적합합니다.

두 가지 포지셔닝 기능을 하나로 합친 것이 무엇인가요?

요소는 먼저 일반 문서 흐름에 따라 배치된 다음 흐름에서 요소의 흐름 루트(BFC) 및 포함 블록(가장 가까운 블록 수준 상위 요소)을 기준으로 배치됩니다.

그러면 요소 위치 지정은 특정 임계값을 넘기 전의 상대 위치 지정이고 그 이후에는 고정 위치 지정입니다.

이 특정 임계값은 위쪽, 오른쪽, 아래쪽 또는 왼쪽 중 하나를 나타냅니다. 즉, 위쪽, 오른쪽, 아래쪽 또는 왼쪽의 4개 임계값 중 하나를 지정해야만 고정 위치 지정이 적용됩니다. 그렇지 않으면 동작은 상대 위치 지정과 동일합니다. 🎜🎜sticky: 개체가 정상일 때 정상적인 흐름을 따릅니다. relativefixed의 조합과 같습니다. 화면에 있을 때는 일반적인 흐름에 따라 입력됩니다. 고정된 것처럼 동작합니다. 이 속성의 성능은 현실에서 볼 수 있는 흡착 효과입니다. 🎜🎜일반적인 시나리오: 요소와 페이지 상단 뷰포트(고정 위치 지정을 위한 참조인 뷰포트) 사이의 거리가 0px보다 큰 경우 요소는 relative로 배치됩니다. 요소와 페이지 표시 영역 사이의 거리가 0px 미만이면 요소는 고정 위치 지정으로 작동하며 상단에 고정됩니다. 🎜🎜코드: 🎜🎜🎜🎜rrreee🎜는 다음 그림과 같이 표현됩니다. 🎜🎜는 페이지 상단에서 20px보다 큼, 위치:상대로 표현됩니다. 🎜🎜 🎜🎜페이지 상단으로부터의 거리는 20p 미만x(위치:고정;🎜🎜 🎜🎜헤드 네비게이션 바 고정을 달성하려면 position:sticky를 사용하세요 🎜🎜html 코드: 🎜🎜🎜🎜rrreee🎜CSS 코드: 🎜 🎜🎜🎜rrreee🎜 마찬가지로 측면 네비게이션 바도 고정을 넘어 구현이 가능합니다. 🎜🎜🎜효과적인 규칙🎜🎜
  • 🎜고착성을 얻으려면 상단, 오른쪽, 하단 또는 왼쪽 네 가지 임계값 중 하나를 지정해야 합니다. 효과. 그렇지 않으면 동작은 상대 위치 지정과 동일합니다. 🎜🎜
    • 🎜 및 상단 하단이 설정되었습니다. 동시에 top이 적용되면 left right가 동시에 설정되면 left가 더 높습니다. 의 우선순위가 더 높습니다. 🎜🎜🎜
    • 🎜 position:sticky로 설정 요소의 상위 노드에 대한 overflow 속성은 visible이어야 하며, 그렇지 않으면 위치:고정 효과가 적용되지 않습니다. 여기에 설명이 필요합니다: 🎜🎜
      • 🎜position:sticky의 상위 요소가 있는 경우 > 요소 노드 위치 지정이 overflow:hidden으로 설정된 경우 상위 컨테이너는 스크롤할 수 없으므로 position:sticky 요소는 스크롤되지 않고 고정됩니다. 🎜🎜
      • 🎜 position:sticky 요소의 상위 노드 위치가 position:relative | 절대 고정으로 설정된 경우 요소는 다음을 기준으로 배치됩니다. 대신 상위 요소는 viewprot 를 기준으로 배치됩니다. 🎜🎜🎜
      • 🎜설정된 임계값에 도달했습니다. 이는 상대적으로 이해하기 쉽습니다. 즉, position:sticky가 있는 요소가 relative 또는 고정으로 작동하도록 설정되었는지 여부는 요소가 임계값에 의해 결정된 설정에 도달합니다. 호환성🎜🎜🎜🎜🎜🎜🎜이 속성의 호환성은 그다지 좋지 않습니다. 이는 아직 실험적인 속성이며 W3C에서 권장하는 표준은 아닙니다. 🎜🎜관련 권장사항: 🎜🎜🎜🎜고정 바닥글 튜토리얼의 CSS 구현🎜🎜

        위치 해결을 위한 JS 방법:고정 호환성 문제

        스티키 컴포넌트를 사용하여 끈적 효과_자바스크립트 기술로 탭 탐색 및 스크롤 탐색을 구현하는 방법

위 내용은 position:sticky를 사용하여 고정 레이아웃 예제를 구현하는 CSS에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.