flex UI : 카드 리스트

라용·2022년 7월 14일
0

flex UI

목록 보기
7/7

1분코딩, 인프런 강의 CSS Flex와 Grid 제대로 익히기를 공부하며 기록한 내용입니다. flex 를 활용해 가장 기본적인 UI 형태를 만들어 봅니다. 아래 내용은 flex를 사용해 크기에 따라 1단, 2단, 3단으로 바뀌는 반응형 카드 리스트를 만드는 방법입니다.

html 마크업은 아래와 같이 작성합니다.

<ul class="card-list">
	<li class="card-item">
		<figure class="card-image" style="background-image: url();">
			<img src = "images/....png" alt="">
		</figure>
		<div class="card-desc">
			Lorem15
		</div>
	</li> // 해당 리스트 반복
</ul>

카드 리스트 이미지는 일반적으로 DB에서 불러오기 때문에 인라인 CSS로 넣는 것이 합리적입니다. style="background-image: url();" 을 적용하면 이미지 크기에 따라 컨트롤하기 쉽습니다.

이제 css 스타일을 적용합니다. 반응형 박스의 이미지를 세팅하는 쉬운 방법은 해당 이미지 박스의 height 를 0으로 하고 padding-bottom 에 퍼센티지를 입력하는 것입니다.

.card-item {
    margin-bottom: 2rem;
}
.card-image {
    height: 0;
    padding-bottom: 60%; // 빈 공간에 하단 패딩 주어서 공간 확보
    background-repeat: no-repeat; // 이미지 반복 제거
    background-position: center; // 이미지 가운데 정렬
    background-size: cover; // 이미지가 꽉 차게
}
.card-desc {
    padding: 1em;
    background: white;
}

여기까지 진행하면 아래와 같이 동작합니다.

이제 2단, 3단 구성을 적용해봅니다. 600px 이상일 때 2단으로, 1200px 이상일 때 3단으로 변경될 수 있게 미디어쿼리를 추가합니다.

@media(min-width: 600px){
    .card-list {
        display: flex;
        flex-wrap: wrap; // 넘치는 카드 아래로 넘기기
        margin: 0 -1rem; // 카드 바깥 쪽 공간 없애기
    }
    .card-item {
        width: 50%; // 카드 2단 배치
        padding: 0 1rem; // 카드 사이 간격
    }
}
@media(min-width: 1200px){
    .card-item {
        width: 33.33333%; // 카드 3단 배치
    }
}

여기까지 진행하면 아래와 같이 동작합니다.

현재 카드디자인은 하단 텍스트 길이에 따라 박스가 늘어나지 않습니다. 이를 수정하려면 부모요소에게 flex 를 주고 자식 요소가 알아서 늘어나게 flex-grow 를 적용하면 됩니다. 이 속성은 1단일 때 지정해줍니다.

.card-item {
    display: flex; // 부모요소에 플랙스 적용, 가로정렬 됨
    flex-direction: column; // 방향을 세로로 바꾸고
    margin-bottom: 2rem;
}

.card-image {
    height: 0;
    padding-bottom: 60%;
    /* background-color: lightgray; */
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
}

.card-desc {
    flex: 1 1 auto; // 자식 요소에게 플랙스 그로우 1을 적용
    padding: 1em;
    background: white;
}

이렇게 하면 텍스트 길이에 맞게 박스가 늘어납니다.

전체 작업 후 가로 스크롤이 생긴다면, 전체를 컨테이너로 감싸고 오버플로우 히든을 적용하면 됩니다.

.card-list-con {
    overflow: hidden;
}
profile
Today I Learned

0개의 댓글