본문 바로가기
HTML/CSS

[HTML/CSS] 반응형 웹페이지 만들기

by teamnova 2024. 12. 1.
728x90

반응형 디자인이 왜 필요할까요?

  1. 다양한 디바이스에 대응이 가능합니다.
    • 스마트폰, 태블릿, 데스크톱 등 다양한 화면 크기를 지원합니다
    • 하나의 코드로 모든 디바이스에 최적화된 경험 제공
    • 별도의 모바일 웹사이트 개발 불필요
  2. 사용자 경험 향상
    • 디바이스에 맞는 최적화된 레이아웃을 제공합니다
    • 가독성과 사용성개선, 모바일 사용 증가에 대응 할 수 있습니다
  3. 활용 분야
    • 기업 웹사이트 
      • 회사소개, 제품 카탈로그, 포트폴리오 사이트
    • 전자 상거래
      • 온라인쇼핑몰, 제품 목록페이지, 결제 페이지
    • 블로그/뉴스 사이트
      • 콘텐츠 중심 웹사이트
      • 개인 블로그
    • 교육 플랫폼
      • 온라인 강의사이트
      • 교육 자료 제공 사이트

다양한 이유로 현대 웹 개발에서 필수적인 요소이며 사용자들에게 일관된 요소를 제공하는데 중요합니다.

 

HTML

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>반응형 웹사이트</title>
    <link rel="stylesheet" href="../css/test3.css">
</head>

<body>
    <nav class="navbar">
        <div class="brand">Logo</div>
        <a href="#" class="toggle-button">
            <span class="bar"></span>
            <span class="bar"></span>
            <span class="bar"></span>
        </a>
        <div class="navbar-links">
            <ul>
                <li><a href="#">홈</a></li>
                <li><a href="#">서비스</a></li>
                <li><a href="#">프로젝트</a></li>
                <li><a href="#">연락처</a></li>
            </ul>
        </div>
    </nav>

    <div class="main-content">
        <div class="card">
            <h2>환영합니다</h2>
            <p>이 웹사이트는 반응형으로 제작되었습니다.</p>
        </div>
        <div class="card">
            <h2>특징</h2>
            <p>모바일과 데스크톱 모두에서 최적화된 경험을 제공합니다.</p>
        </div>
        <div class="card">
            <h2>웹 개발 과정</h2>
            <ul>
                <li>HTML 구조 설계</li>
                <li>CSS 스타일링</li>
                <li>반응형 디자인</li>
                <li>JavaScript 기능 구현</li>
            </ul>
        </div>
        <div class="card">
            <h2>최신 소식</h2>
            <p class="date">2024년 3월 15일</p>
            <p>새로운 기능이 추가되었습니다!</p>
            <a href="#" class="card-link">자세히 보기 →</a>
        </div>
    </div>
 
    <script src="../js/test3.js"></script>
</body>

</html>

 

CSS

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    font-family: Arial, sans-serif;
}

.navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background-color: #333;
    color: white;
    padding: 10px;
}

.brand {
    font-size: 1.5rem;
    margin: 0.5rem;
}

.navbar-links ul {
    display: flex;
    margin: 0;
    padding: 0;
}

.navbar-links li {
    list-style: none;
}

.navbar-links li a {
    text-decoration: none;
    color: white;
    padding: 1rem;
    display: block;
}

.toggle-button {
    position: absolute;
    top: 0.75rem;
    right: 1rem;
    display: none;
    flex-direction: column;
    justify-content: space-between;
    width: 30px;
    height: 21px;
}

.toggle-button .bar {
    height: 3px;
    width: 100%;
    background-color: white;
    border-radius: 10px;
}

.main-content {
    padding: 20px;
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    justify-content: center;
}

.card {
    background-color: #f4f4f4;
    padding: 20px;
    border-radius: 5px;
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
    width: 300px;
    transition: transform 0.3s ease;
}

.card:hover {
    transform: translateY(-5px);
}

.card h2 {
    margin-bottom: 15px;
    color: #333;
}

.card ul {
    margin-left: 20px;
    margin-top: 10px;
}

.card .date {
    color: #666;
    font-size: 0.9em;
    margin-bottom: 10px;
}

.card-link {
    display: inline-block;
    margin-top: 10px;
    color: #007bff;
    text-decoration: none;
}

.card-link:hover {
    text-decoration: underline;
}

.progress-bar {
    background-color: #e0e0e0;
    border-radius: 10px;
    height: 20px;
    margin: 10px 0;
    overflow: hidden;
}

.progress {
    background-color: #4CAF50;
    height: 100%;
    text-align: center;
    color: white;
    line-height: 20px;
}

@media (max-width: 768px) {
    .toggle-button {
        display: flex;
    }

    .navbar-links {
        display: none;
        width: 100%;
    }

    .navbar {
        flex-direction: column;
        align-items: flex-start;
    }

    .navbar-links ul {
        flex-direction: column;
        width: 100%;
    }

    .navbar-links li {
        text-align: center;
    }

    .navbar-links.active {
        display: flex;
    }
}

 

JS

const toggleButton = document.getElementsByClassName('toggle-button')[0];
const navbarLinks = document.getElementsByClassName('navbar-links')[0];

toggleButton.addEventListener('click', () => {
    navbarLinks.classList.toggle('active');
});

 

시연 영상