Computer >> 컴퓨터 >  >> 프로그래밍 >> CSS

CSS만으로 반응형 '팀 소개(Meet the Team)' 페이지 만드는 방법

HTML과 CSS만 사용해서도 화면 크기에 따라 레이아웃이 자동으로 조정되는 반응형 '팀 소개(Meet the Team)' 페이지를 손쉽게 만들 수 있습니다. 이 글에서는 팀원 카드 3개를 가로로 배치했다가, 화면이 좁아지면 세로로 정렬되도록 구현하는 완전한 예제 코드를 소개합니다.

전체 코드 예제

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html {
    box-sizing: border-box;
}
body{
    font-family: monospace,serif,sans-serif;
}
img{
    height: 300px;
    width: 100%;
}
*, *:before, *:after {
    box-sizing: inherit;
}
.teamColumn {
    float: left;
    width: 33.3%;
    margin-bottom: 16px;
    padding: 0 8px;
}
@media screen and (max-width: 650px) {
.teamColumn {
    width: 100%;
    display: block;
}
}
.teamCard {
    background-color: rgb(162, 162, 255);
    text-align: center;
    font-size: 20px;
}
.personContainer {
    padding: 0 16px;
}
.personContainer::after, .teamContainer::after {
    content: "";
    clear: both;
    display: table;
}
.Designation {
    color: rgb(15, 0, 100);
    font-weight: bolder;
    font-size: 40px;
}
.contact {
    border: none;
    outline: 0;
    display: inline-block;
    padding: 12px;
    color: white;
    font-weight: bolder;
    background-color: rgb(78, 0, 102);
    text-align: center;
    cursor: pointer;
    width: 100%;
}
.contact:hover {
    background-color: #555;
}
</style>
</head>
<body>
<h1 style="text-align: center;">Responsive Meet the team example </h1>
<div class="teamContainer">
<div class="teamColumn">
<div class="teamCard">
<img src="https://images.pexels.com/photos/839011/pexels-photo-839011.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500" >
<div class="personContainer">
<h2>Jane Doe</h2>
<p class="Designation">CTO</p>
<p><button class="contact">Contact</button></p>
</div>
</div>
</div>
<div class="teamColumn">
<div class="teamCard">
<img src="https://images.pexels.com/photos/614810/pexels-photo-614810.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
<div class="personContainer">
<h2>Mike Ross</h2>
<p class="Designation">Front End Developer</p>
<p><button class="contact">Contact</button></p>
</div>
</div>
</div>
<div class="teamColumn">
<div class="teamCard">
<img src="https://images.pexels.com/photos/736716/pexels-photo-736716.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
<div class="personContainer">
<h2>John Doe</h2>
<p class="Designation">FullStack Developer</p>
<p><button class="contact">Contact</button></p>
</div>
</div>
</div>
</div>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 화면이 출력됩니다.

CSS만으로 반응형  팀 소개(Meet the Team)  페이지 만드는 방법

핵심 코드 설명

1. box-sizing: border-box

모든 요소에 box-sizing: border-box를 적용하면 패딩과 테두리가 요소의 전체 너비에 포함되어 계산됩니다. 이렇게 하면 패딩을 추가해도 레이아웃이 의도치 않게 밀려나는 문제를 예방할 수 있습니다.

2. float를 활용한 3열 카드 배치

.teamColumn 클래스에 float: leftwidth: 33.3%를 지정하면 세 개의 카드가 한 줄에 나란히 배치됩니다. 각 컬럼에는 padding: 0 8px를 주어 카드 사이에 적절한 간격을 확보합니다.

3. 미디어 쿼리로 반응형 구현

반응형의 핵심은 바로 미디어 쿼리입니다.

@media screen and (max-width: 650px) {
  .teamColumn {
    width: 100%;
    display: block;
  }
}

화면 너비가 650px 이하(주로 모바일 환경)로 줄어들면, 카드의 너비가 100%로 변경되면서 세로로 차곡차곡 쌓이게 됩니다. 덕분에 데스크톱에서는 3열, 모바일에서는 1열 레이아웃이 자동으로 적용됩니다.

4. clearfix로 float 초기화

::after 가상 요소에 clear: both를 적용하면, 자식 요소들이 float 되면서 발생하는 부모 컨테이너의 높이 무너짐(collapse) 현상을 방지할 수 있습니다.

5. Contact 버튼과 호버 효과

.contact 버튼은 카드 하단 전체 폭을 차지하며, :hover 시 배경색이 회색(#555)으로 바뀌어 사용자에게 시각적인 피드백을 제공합니다.

참고: Flexbox나 Grid를 활용한 대안

float 방식은 오래된 브라우저와의 호환성이 좋다는 장점이 있지만, 최신 프로젝트에서는 FlexboxCSS Grid를 사용하는 것이 유지보수 측면에서 더 권장됩니다. 예를 들어 .teamContainer { display: flex; flex-wrap: wrap; }.teamColumn { flex: 1 1 300px; }처럼 작성하면 float 없이도 동일한 반응형 레이아웃을 더 간결하게 구현할 수 있습니다.