크기가 흩어져 있는 이미지를 반응형으로 종횡비를 맞추어 표시시킨다

7467 단어 CSSCSS3

추가 (2021/10/14)



이 기사의 방법은 오래된 방법입니다.
IE나 과거 버전의 브라우저에 대응하고 싶은 경우에 참고해 주세요.

지금은 aspect-ratio 속성을 사용하십시오.
참고 : CSS의 aspect-ratio 속성이 모든 브라우저에서 지원되었습니다. 이미지를 가로 세로 비율로 구현하는 지금과 앞으로의 구현 방법 |

하고 싶은 일


  • 사이즈가 흩어져 있는 복수장의 화상을 표시 사이즈를 맞추어 표시하고 싶다.
  • 반응형으로 세로와 가로의 비율도 가지런히 하고 싶다.
  • 화상의 트리밍은 세로 방향도 가로 방향도 중앙 부분을 표시할 수 있으면 된다.

  • CSS로 이미지를 자르는 방법



    CSS로 이미지를 자르려면 ...에서 생각해 내는 것은 2 패턴.
    그러나 어느 쪽도 이번에하고 싶은 일을 달성 할 수 없다

    object-fit을 사용하는 방법



    object-fit - CSS: 캐스케이딩 스타일시트 | MDN

    CSS의 object-fit 속성은 대체 요소(예: <img> 또는 <video>)와 같은 내용을 컨테이너에 맞추는 방법을 설정합니다.

    지금 하고 싶은 것이라고 다음과 같이 쓴다.
    img {
      object-fit: cover;
      width: 200px;
      height: 150px;
    }
    
    cover 라는 값은 종횡비를 유지한 채 요소의 박스에 맞도록 확대 축소된다는 것(위 MDN 보다)
  • 정해진 사이즈로 보았던 부분을 비표시에는 할 수 있다.
  • 세로도 가로도 픽셀수로 지정할 필요가 있으므로 반응성이 되지 않는다.

  • 부모 요소로 둘러싸는 방법


    .image-trim {
      position: relative;
      overflow: hidden;
      padding-top: 60%; /* 比率 */
    }
    .image-trim img {
      width: 100%;
    
      position: absolute;
      top: 50%;
      left: 50%;
      width: 100%;
      height: auto;
      transform: translate(-50%, -50%);
    }
    
  • 부모 요소에서 세로 (높이)를 가로 (너비)의 몇 퍼센트로 지정하여 응답 가능합니다.
  • 세로 이미지는 상자로 가득 찼습니다.
  • 단, 가로 화상은 상하 방향으로 여백이 생겨 버린다.

  • 이런 느낌 (얇은 회색 땅이 부모 요소의 상자 크기입니다)


    해결 방법은 상기 2패턴을 합쳐



    이런 느낌.
    .image-trim {
      position: relative;
      overflow: hidden;
      padding-top: 60%; /* 比率 */
    }
    .image-trim img {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
    

    샘플



    샘플로서 크기가 변동한 화상을 준비해 보았다.



    (있을 수 없을 정도로 엉망이다……)
    그러나, 세로의 화상도 가로의 화상도 작은 사이즈도 보시는 대로!



    작은 사이즈의 이미지도 확대되어 가비 가비에.
    반응형인지 여부는 아래의 Codepen에서 브라우저의 윈도우 폭을 바꾸어 보세요.

    See the Pen responsive trimming image by Beco ( @becolomochi )
    on CodePen .


    왜 그렇게 되는가



    잘 생각하면 간단한 이야기로



    • img 에 object-fit:cover 를 지정해, 종횡 100% 를 지정하는 것으로 부모 요소의 크기 의존으로 트리밍할 수 있다.
    • 부모 요소의 크기 지정이 반응형입니다.
    • 위치를 절대치 지정하는 것으로 프레임내에 들어간다.


    자르기 위치를 변경하려면



    「트리밍 위치를 중앙이 아니고 다른 것이 좋다!」라고 할 때는 object-position 로 바꿀 수 있다.



    object-position - CSS: 캐스케이딩 스타일시트 | MDN



    object-position: left top; /* 左上 */
    object-position: 100px 50px; /* 横方向100px 縦方向50px */
    


    초기값이 50% 50% 라고 하는 것으로 특별히 지정하지 않으면 세로 방향 가로 방향 모두 중앙이 된다.



    참고



    해결의 실마리가 된 Codepen (감사합니다…)

    Responsive image with picturefill and object-fit


    좋은 웹페이지 즐겨찾기