본문 바로가기

Web 개발/Plugin&Library

Slick.js [이슈] : 반응형 좌우 배치 레이아웃 관련

  • 이슈 상황
  • 해결 방법
  • 데모 화면

# 이슈 상황

Slick Slider를 반응형으로 좌우 배치 할때, 레이아웃이 틀어지는 경우가 생겼다.


# 해결 방법

이는 Slick-slider가 속한 영역보다 너비가 커서, 옆에 있는 code 영역을 밀어내어 차지하게 되는건데,
이유는 모든 요소의 CSS의 overflow 기본 값이 visible로 설정되어 있기 때문이다. {overflow: visible;}

 

초과하는 영역을 넘어가지 않게 설정하면 이 문제는 해결된다. 

초과되는 요소에 overflow : auto, overflow : scroll, overflow : hidden ... 등을 CSS 적용하면 된다.

그러면 브라우저를 리사이징해도 Slick Slider의 레이아웃이 틀어지지 않는 것을 볼 수 있다.

.slick-slider{overflow : auto;}

 


# 데모 화면

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Slick-Slider 좌우배치 이슈</title>
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css">
  <style>
    /* reset.css */
    *{margin: 0; padding: 0;;}
    body{overflow-x: hidden;  }
    /* 레이아웃 */
    .wrap{max-width: 1200px; margin: 40px auto; }
    .description{padding: 24px; border-top: 1px solid #000; border-bottom: 1px solid #000;  margin: 24px 0; background-color: #f0f0f0;}
    .group{display: flex; gap: 24px;}
    .code{width: 30%;}
    .code span{color: crimson;}
    [class*="slider-"]{flex:1}
    .slider-1{height: 200px;}
    .slider-no{white-space: nowrap;}
    .slider-no2{white-space: nowrap; overflow: auto;}
    .slider-2{overflow: auto;}
    /* 클래스명 지정 */
    .class{position: relative;  padding: 36px 24px; box-sizing: border-box; border: 1px solid #ddd;}
    .class::after{ position: absolute; top:0px; left:0px; color: #fff; font-size: 14px; background-color: #999; padding: 1px 4px 3px 4px;}
    .group::after{ content: 'group'; }
    .group .code::after{ content: 'code'; }
    .group [class*="slider-"]::after{ content: 'slider'; }
    /* Slider.css */
    .slick-slider {position: relative;  padding: 36px 48px 36px 48px; }
    .slick-slider .slick-slide{width: 100%; height: 200px; font-size: 36px; font-weight:600; line-height: 140px; border-radius: 10px; padding: 24px; box-sizing: border-box;}
    .slick-slider .slick-arrow{position: absolute; top:50%; transform: translateY(-50%); width: 36px; height: 48px; background-color: rgba(0,0,0,.5); color: #fff;; z-index: 1; cursor: pointer; border: 0px;}
    .slick-slider .slick-arrow:hover{background-color: rgba(0,0,0,.8);}
    .slick-slider .slick-arrow.slick-prev{left:0;}
    .slick-slider .slick-arrow.slick-next{right:0;}
  </style>
</head>
<body>
<div class="wrap">
  <p class="description">Slick Slider를 좌우 배치 하면, 하단 처럼 레이아웃이 틀어진다. 반응형으로 브라우저 크기를 이동하면 Slider 자체도 레이아웃이 틀어지는 것을 볼 수 있다.</p>
  <div class="group class">
    <div class="code class">
      .group { display: flex; }<br/>
      .group .code { width: 30%; }<br/>
      .group .slider { flex:1; }
    </div>
    <div class="slider-1 class">
      <div style="background-color: #e3eef1;">Slider-1</div>
      <div style="background-color: #fae2e2;">Slider-2</div>
      <div style="background-color: #c9e6d5;">Slider-3</div>
    </div>
  </div>
  <p class="description">이는 Slick-slider가 속한 영역보다 너비가 커서, 옆에 있는 code 영역을 밀어내어 차지하게 된다. <br/>
    이유는 모든 요소의 CSS의 overflow 기본 값이 visible로 설정되어 있기 때문이다. {overflow: visible;}</p>
  <div class="group class">
    <div class="code class">
      .group { display: flex; }<br/>
      .group .code { width: 30%; }<br/>
      .group .slider { flex:1; <span> white-space: nowrap;</span> }
    </div>
    <div class="slider-no class">
      Lorem, ipsum dolor sit amet consectetur adipisicing elit. Laboriosam a voluptatum voluptates ipsa, laudantium sint reiciendis quidem laborum! Blanditiis accusamus impedit vero eos quos ex quo nostrum fugit quasi sit!
    </div>
  </div>
  <p class="description">초과하는 영역을 넘어가지 않게 설정하면 이 문제는 해결된다. overflow : auto, overflow : scroll, overflow : hidden ... 등</p>
  <div class="group class">
    <div class="code class">
      .group { display: flex; }<br/>
      .group .code { width: 30%; }<br/>
      .group .slider { flex:1; white-space: nowrap; <span> overflow: auto; </span> }
    </div>
    <div class="slider-no2 class">
      Lorem, ipsum dolor sit amet consectetur adipisicing elit. Laboriosam a voluptatum voluptates ipsa, laudantium sint reiciendis quidem laborum! Blanditiis accusamus impedit vero eos quos ex quo nostrum fugit quasi sit!
    </div>
  </div>
  <p class="description">Slick Slider 도 같은 원리로 overflow를 설정해주면 해결된다.<br/>
  브라우저를 리사이징해도 Slick Slider의 레이아웃이 틀어지지 않는 것을 볼 수 있다.</p>
  <div class="group class">
    <div class="code class">
      .group { display: flex; }<br/>
      .group .code { width: 30%; }<br/>
      .group .slider { flex:1; <span>overflow: auto;</span> }
    </div>
    <div class="slider-2 class">
      <div style="background-color: #e3eef1;">Slider-1</div>
      <div style="background-color: #fae2e2;">Slider-2</div>
      <div style="background-color: #c9e6d5;">Slider-3</div>
    </div>
  </div>
</div>
<script>
  $(function(){
    $(".slider-1").slick({})
    $(".slider-2").slick({})
    $(".slick-slider .slick-arrow.slick-prev").text("◀")
    $(".slick-slider .slick-arrow.slick-next").text("▶")
  });
</script>
</body>
</html>