이미지가 반응형으로 크기가 줄어들 때 가로세로 비율이 깨지는 경우가 많습니다.
특히 배너, 카드 썸네일, 유튜브 영상 임베드에서 자주 발생.
실무에서는 aspect-ratio 속성 또는 padding trick을 활용합니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>이미지 비율 유지</title>
<style>
.wrapper {
width: 90%;
max-width: 600px;
margin: 50px auto;
}
.img-box {
aspect-ratio: 16 / 9; /* 가로 : 세로 비율 */
overflow: hidden;
border-radius: 10px;
}
.img-box img {
width: 100%;
height: 100%;
object-fit: cover; /* 잘리더라도 꽉 채움 */
}
</style>
</head>
<body>
<div class="wrapper">
<div class="img-box">
<img src="https://picsum.photos/id/237/800/450" alt="샘플 이미지">
</div>
</div>
</body>
</html>
구형 브라우저 호환 방식 (Padding Trick)
.img-box {
position: relative;
width: 100%;
padding-top: 56.25%; /* 16:9 비율 (9 ÷ 16 × 100) */
}
.img-box img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
배경 이미지로 쓸 때는 background-size: cover; background-position: center;로 처리.
썸네일 그리드에서는 이미지 태그보다 background-image가 유지관리 쉽다.
aspect-ratio는 크로스브라우징이 아직 100% 아니니, 레거시 프로젝트에선 padding trick이 안전.
특히 배너, 카드 썸네일, 유튜브 영상 임베드에서 자주 발생.
실무에서는 aspect-ratio 속성 또는 padding trick을 활용합니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>이미지 비율 유지</title>
<style>
.wrapper {
width: 90%;
max-width: 600px;
margin: 50px auto;
}
.img-box {
aspect-ratio: 16 / 9; /* 가로 : 세로 비율 */
overflow: hidden;
border-radius: 10px;
}
.img-box img {
width: 100%;
height: 100%;
object-fit: cover; /* 잘리더라도 꽉 채움 */
}
</style>
</head>
<body>
<div class="wrapper">
<div class="img-box">
<img src="https://picsum.photos/id/237/800/450" alt="샘플 이미지">
</div>
</div>
</body>
</html>
구형 브라우저 호환 방식 (Padding Trick)
.img-box {
position: relative;
width: 100%;
padding-top: 56.25%; /* 16:9 비율 (9 ÷ 16 × 100) */
}
.img-box img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
배경 이미지로 쓸 때는 background-size: cover; background-position: center;로 처리.
썸네일 그리드에서는 이미지 태그보다 background-image가 유지관리 쉽다.
aspect-ratio는 크로스브라우징이 아직 100% 아니니, 레거시 프로젝트에선 padding trick이 안전.
게시글 목록
| 번호 | 제목 |
|---|---|
| 1386 |
부트스트랩
부트 스트랩 그리드 시스템
|
| 1385 |
AngularJS
주형
|
| 1384 |
AngularJS
컨트롤러
|
| 1383 |
AngularJS
$ routeProvider
|
| 1382 |
AngularJS
AngularJS Routing - 무엇이 필요합니까?
|
| 1381 |
AngularJS
AngularJS Routing
|
| 1380 |
AngularJS
CSS 애니메이션
|
| 1379 |
AngularJS
ngAnimate는 무엇을합니까?
|
| 1378 |
AngularJS
AngularJS Animations 무엇이 필요합니까?
|
| 1377 |
AngularJS
AngularJS Animations
|
| 1376 |
AngularJS
AngularJS 교차 도메인 포함
|
| 1375 |
AngularJS
AngularJS 코드 포함
|
| 1374 |
AngularJS
AngularJS Includes
|
| 1373 | |
| 1372 | |
| 1371 |
AngularJS
angular.uppercase () 문자열을 대문자로 변환합니다.
|
| 1370 |
AngularJS
AngularJS API
|
| 1369 |
AngularJS
검증 예제
|
| 1368 |
AngularJS
사용자 정의 유효성 검사
|
| 1367 |
AngularJS
CSS 클래스
|
| 1366 |
AngularJS
양식 상태 및 입력 상태
|
| 1365 |
AngularJS
이메일
|
| 1364 |
AngularJS
AngularJS 양식 검증
|
| 1363 |
AngularJS
선택 상자
|
| 1362 |
AngularJS
라디오 버튼
|
| 1361 |
AngularJS
체크 박스
|
| 1360 |
AngularJS
AngularJS 양식
|
| 1359 |
AngularJS
$event 객체
|
| 1358 |
AngularJS
토글, 참 / 거짓
|
| 1357 |
AngularJS
AngularJS 이벤트 - ng-click 지시문
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기