scroll-margin

scroll-margin

scroll-margin 유틸리티는 스냅 컨테이너 안의 아이템 주변에 스크롤 오프셋(간격)을 설정해 줘요. 스냅될 때 요소가 컨테이너 가장자리에 딱 붙지 않게 하고 싶을 때 유용하답니다.

출처: 문서

본문

클래스 스타일 (ClassStyles)

전체 (All sides)

클래스 CSS
scroll-m-<number> scroll-margin: calc(var(--spacing) * <number>);
-scroll-m-<number> scroll-margin: calc(var(--spacing) * -<number>);
scroll-m-px scroll-margin: 1px;
-scroll-m-px scroll-margin: -1px;
scroll-m-(<custom-property>) scroll-margin: var(<custom-property>);
scroll-m-[<value>] scroll-margin: <value>;

좌우 (Inline)

클래스 CSS
scroll-mx-<number> scroll-margin-inline: calc(var(--spacing) * <number>);
-scroll-mx-<number> scroll-margin-inline: calc(var(--spacing) * -<number>);
scroll-mx-px scroll-margin-inline: 1px;
-scroll-mx-px scroll-margin-inline: -1px;
scroll-mx-(<custom-property>) scroll-margin-inline: var(<custom-property>);
scroll-mx-[<value>] scroll-margin-inline: <value>;

상하 (Block)

클래스 CSS
scroll-my-<number> scroll-margin-block: calc(var(--spacing) * <number>);
-scroll-my-<number> scroll-margin-block: calc(var(--spacing) * -<number>);
scroll-my-px scroll-margin-block: 1px;
-scroll-my-px scroll-margin-block: -1px;
scroll-my-(<custom-property>) scroll-margin-block: var(<custom-property>);
scroll-my-[<value>] scroll-margin-block: <value>;

inline 시작 (Inline start)

클래스 CSS
scroll-ms-<number> scroll-margin-inline-start: calc(var(--spacing) * <number>);
-scroll-ms-<number> scroll-margin-inline-start: calc(var(--spacing) * -<number>);
scroll-ms-px scroll-margin-inline-start: 1px;
-scroll-ms-px scroll-margin-inline-start: -1px;
scroll-ms-(<custom-property>) scroll-margin-inline-start: var(<custom-property>);
scroll-ms-[<value>] scroll-margin-inline-start: <value>;

inline 끝 (Inline end)

클래스 CSS
scroll-me-<number> scroll-margin-inline-end: calc(var(--spacing) * <number>);
-scroll-me-<number> scroll-margin-inline-end: calc(var(--spacing) * -<number>);
scroll-me-px scroll-margin-inline-end: 1px;
-scroll-me-px scroll-margin-inline-end: -1px;
scroll-me-(<custom-property>) scroll-margin-inline-end: var(<custom-property>);
scroll-me-[<value>] scroll-margin-inline-end: <value>;

block 시작 (Block start)

클래스 CSS
scroll-mbs-<number> scroll-margin-block-start: calc(var(--spacing) * <number>);
-scroll-mbs-<number> scroll-margin-block-start: calc(var(--spacing) * -<number>);
scroll-mbs-px scroll-margin-block-start: 1px;
-scroll-mbs-px scroll-margin-block-start: -1px;
scroll-mbs-(<custom-property>) scroll-margin-block-start: var(<custom-property>);
scroll-mbs-[<value>] scroll-margin-block-start: <value>;

block 끝 (Block end)

클래스 CSS
scroll-mbe-<number> scroll-margin-block-end: calc(var(--spacing) * <number>);
-scroll-mbe-<number> scroll-margin-block-end: calc(var(--spacing) * -<number>);
scroll-mbe-px scroll-margin-block-end: 1px;
-scroll-mbe-px scroll-margin-block-end: -1px;
scroll-mbe-(<custom-property>) scroll-margin-block-end: var(<custom-property>);
scroll-mbe-[<value>] scroll-margin-block-end: <value>;

위 (Top)

클래스 CSS
scroll-mt-<number> scroll-margin-top: calc(var(--spacing) * <number>);
-scroll-mt-<number> scroll-margin-top: calc(var(--spacing) * -<number>);
scroll-mt-px scroll-margin-top: 1px;
-scroll-mt-px scroll-margin-top: -1px;
scroll-mt-(<custom-property>) scroll-margin-top: var(<custom-property>);
scroll-mt-[<value>] scroll-margin-top: <value>;

오른쪽 (Right)

클래스 CSS
scroll-mr-<number> scroll-margin-right: calc(var(--spacing) * <number>);
-scroll-mr-<number> scroll-margin-right: calc(var(--spacing) * -<number>);
scroll-mr-px scroll-margin-right: 1px;
-scroll-mr-px scroll-margin-right: -1px;
scroll-mr-(<custom-property>) scroll-margin-right: var(<custom-property>);
scroll-mr-[<value>] scroll-margin-right: <value>;

아래 (Bottom)

클래스 CSS
scroll-mb-<number> scroll-margin-bottom: calc(var(--spacing) * <number>);
-scroll-mb-<number> scroll-margin-bottom: calc(var(--spacing) * -<number>);
scroll-mb-px scroll-margin-bottom: 1px;
-scroll-mb-px scroll-margin-bottom: -1px;
scroll-mb-(<custom-property>) scroll-margin-bottom: var(<custom-property>);
scroll-mb-[<value>] scroll-margin-bottom: <value>;

왼쪽 (Left)

클래스 CSS
scroll-ml-<number> scroll-margin-left: calc(var(--spacing) * <number>);
-scroll-ml-<number> scroll-margin-left: calc(var(--spacing) * -<number>);
scroll-ml-px scroll-margin-left: 1px;
-scroll-ml-px scroll-margin-left: -1px;
scroll-ml-(<custom-property>) scroll-margin-left: var(<custom-property>);
scroll-ml-[<value>] scroll-margin-left: <value>;

예시 (Examples)

기본 예시 (Basic example)

scroll-mt-<number>, scroll-mr-<number>, scroll-mb-<number>, scroll-ml-<number> 유틸리티(예: scroll-ml-4, scroll-mt-6)를 사용하면 스냅 컨테이너 안의 아이템 주변에 스크롤 오프셋을 설정할 수 있어요:

이미지 그리드에서 스크롤해 기대했던 동작을 확인해 보세요.

<div class="snap-x ...">
  <div class="snap-start scroll-ml-6 ...">
    <img src="/img/vacation-01.jpg"/>
  </div>
  <div class="snap-start scroll-ml-6 ...">
    <img src="/img/vacation-02.jpg"/>
  </div>
  <div class="snap-start scroll-ml-6 ...">
    <img src="/img/vacation-03.jpg"/>
  </div>
  <div class="snap-start scroll-ml-6 ...">
    <img src="/img/vacation-04.jpg"/>
  </div>
  <div class="snap-start scroll-ml-6 ...">
    <img src="/img/vacation-05.jpg"/>
  </div>
</div>

음수 값 사용하기 (Using negative values)

음수 스크롤 여백 값을 사용하려면 클래스 이름 앞에 대시(-)를 붙여 음수 값으로 변환하면 돼요:

<div class="snap-start -scroll-ml-6 ...">
  <!-- ... -->
</div>

논리 속성 사용하기 (Using logical properties)

scroll-ms-<number>와 scroll-me-<number> 유틸리티를 사용하면 텍스트 방향에 따라 왼쪽 또는 오른쪽에 매핑되는 scroll-margin-inline-start와 scroll-margin-inline-end 논리 속성을 설정할 수 있어요:

<div dir="ltr">
  <div class="snap-x ...">
    <div class="snap-start scroll-ms-6 ...">
      <img src="/img/vacation-01.jpg"/>
    </div>
    <!-- ... -->
  </div>
</div>

<div dir="rtl">
  <div class="snap-x ...">
    <div class="snap-start scroll-ms-6 ...">
      <img src="/img/vacation-01.jpg"/>
    </div>
    <!-- ... -->
  </div>
</div>

더 세밀하게 제어하려면 현재 텍스트 방향에 따라 특정 스타일을 조건부로 적용할 수 있는 LTR과 RTL 수정자(modifier)를 사용할 수도 있어요.

scroll-mbs-<number>와 scroll-mbe-<number> 유틸리티를 사용하면 쓰기 모드(writing mode)에 따라 위쪽 또는 아래쪽에 매핑되는 scroll-margin-block-start와 scroll-margin-block-end 논리 속성을 설정할 수 있어요:

<div class="snap-y ...">
  <div class="snap-start scroll-mbs-6 ...">
    <!-- ... -->
  </div>
</div>

커스텀 값 사용하기 (Using a custom value)

scroll-ml-[<value>]나 scroll-me-[<value>] 같은 유틸리티를 사용하면 완전히 커스텀한 값으로 스크롤 여백을 설정할 수 있어요:

<div class="scroll-ml-[24rem] ...">
  <!-- ... -->
</div>

CSS 변수의 경우 scroll-ml-(<custom-property>) 문법을 사용할 수도 있어요:

<div class="scroll-ml-(--my-scroll-margin) ...">
  <!-- ... -->
</div>

이것은 scroll-ml-[var(<custom-property>)]의 줄임말로, var() 함수를 자동으로 추가해 주는 문법이에요.

반응형 디자인 (Responsive design)

scroll-margin 유틸리티에 md: 같은 브레이크포인트 변형을 붙이면 중간 크기(md) 화면 이상에서만 그 유틸리티가 적용돼요:

<div class="scroll-m-8 md:scroll-m-0 ...">
  <!-- ... -->
</div>

테마 커스터마이징 (Customizing your theme)

scroll-m-<number>, scroll-mx-<number>, scroll-my-<number>, scroll-ms-<number>, scroll-me-<number>, scroll-mbs-<number>, scroll-mbe-<number>, scroll-mt-<number>, scroll-mr-<number>, scroll-mb-<number>, scroll-ml-<number> 유틸리티는 --spacing 테마 변수에 의해 구동되며, 우리만의 테마에서 커스터마이즈할 수 있어요:

@theme {
  --spacing: 1px;
}

spacing scale 커스터마이징에 대해 더 알아보려면 theme variable 문서를 참고하세요.

더 알아보기 (Learn more)

변형(variant) 사용법에 대해 더 알고 싶다면 variants 문서를 살펴보세요.