[HTML/CSS] 13. 전체 실습 예제

최재원's avatar
Mar 11, 2025
[HTML/CSS] 13. 전체 실습 예제
팀장은 팀원들의 박스 만드는 상황을 잘 봐줘야 한다

1. HTML 구조 만들기

notion image
notion image
<!DOCTYPE html> <html lang="en"> <head> <style> * { padding: 0; margin: 0; box-sizing: border-box; } div { border: 1px solid black; } .root { display: flex; justify-content: center; } .container { width: 80%; } </style> </head> <body> <div class="root"> <div class="container"> <div class="nav"> <div class="logo"></div> <div class="search">검색</div> </div> <div class="header"> <div class="header-title">jjack1</div> <div class="header-content">설명</div> </div> <div class="menu"> <div class="menu-item">See All</div> <div class="menu-item">환경설정</div> <div class="menu-item">컴퓨터사이언스</div> </div> <div class="recent"> <div class="r-img">최신글 이미지</div> <div class="r-info"> <div class="r-title">최신글 제목</div> <div class="r-footer">최신글 정보</div> </div> </div> <div class="blog-list"> <div class="blog-item"> <div class="blog-img">블로그 이미지</div> <div class="blog-title">블로그 제목</div> <div class="blog-footer">블로그 정보</div> </div> <div class="blog-item"> <div class="blog-img">블로그 이미지</div> <div class="blog-title">블로그 제목</div> <div class="blog-footer">블로그 정보</div> </div> <div class="blog-item"> <div class="blog-img">블로그 이미지</div> <div class="blog-title">블로그 제목</div> <div class="blog-footer">블로그 정보</div> </div> <div class="blog-item"> <div class="blog-img">블로그 이미지</div> <div class="blog-title">블로그 제목</div> <div class="blog-footer">블로그 정보</div> </div> </div> </div> </div> </body> </html>

2. HTML 레이아웃 잡기

notion image
notion image
<!DOCTYPE html> <html lang="en"> <head> <style> * { padding: 0; margin: 0; box-sizing: border-box; } div { border: 1px solid black; padding: 2px; } .root { display: flex; justify-content: center; } .container { width: 80%; } .nav { display: flex; justify-content: space-between; } .menu { display: flex; } .recent { display: grid; grid-template-columns: 5fr 4fr; } .blog-list { display: grid; grid-template-columns: 1fr 1fr; } .r-footer { display: flex; } .r-info { display: flex; flex-direction: column; justify-content: space-between; } .blog-footer { display: flex; } </style> </head> <body> <div class="root"> <div class="container"> <div class="nav"> <div class="logo">로고</div> <div class="search">검색</div> </div> <div class="header"> <div class="header-title">jjack1</div> <div class="header-content">설명</div> </div> <div class="menu"> <div class="menu-item">See All</div> <div class="menu-item">환경설정</div> <div class="menu-item">컴퓨터사이언스</div> </div> <div class="recent"> <div class="r-img">최신글 이미지</div> <div class="r-info"> <div class="r-title">최신글 제목</div> <div class="r-footer"> <div class="circle-img">서클 이미지</div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> </div> <div class="blog-list"> <div class="blog-item"> <div class="blog-img">블로그 이미지</div> <div class="blog-title">블로그 제목</div> <div class="blog-footer"> <div class="circle-img">서클 이미지</div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> <div class="blog-item"> <div class="blog-img">블로그 이미지</div> <div class="blog-title">블로그 제목</div> <div class="blog-footer"> <div class="circle-img">서클 이미지</div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> <div class="blog-item"> <div class="blog-img">블로그 이미지</div> <div class="blog-title">블로그 제목</div> <div class="blog-footer"> <div class="circle-img">서클 이미지</div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> <div class="blog-item"> <div class="blog-img">블로그 이미지</div> <div class="blog-title">블로그 제목</div> <div class="blog-footer"> <div class="circle-img">서클 이미지</div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> </div> </div> </div> </body> </html>

3. CSS 디자인하기

notion image
notion image
<!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" /> <style> /* 기본 세팅 */ * { padding: 0; margin: 0; box-sizing: border-box; } img { width: 100%; height: 100%; object-fit: cover; display: block; } /* 루트 세팅 */ .root { display: flex; justify-content: center; } /* 컨테이너 세팅 */ .container { max-width: 1200px; padding: 20px 0; } /* 네비게이션 세팅 */ .nav { display: flex; justify-content: space-between; align-items: center; } .logo { width: 120px; } .logo img { object-fit: contain; } /* 헤더 세팅 */ .header { padding: 80px 24px; margin: 80px 0; display: grid; gap: 40px; } .header-title { font-size: 48px; } .header-content { font-size: 18px; } /* 메뉴 세팅 */ .menu { display: flex; gap: 15px; } .menu-item { padding: 8px 16px; border-radius: 5px; cursor: pointer; } /* 최신항목 세팅 */ .recent { display: grid; grid-template-columns: 6fr 3.5fr; gap: 30px; } .r-info { display: flex; flex-direction: column; justify-content: space-between; padding: 16px 0; } .r-title { font-size: 36px; } .circle-img { width: 20px; height: 20px; border-radius: 50%; overflow: hidden; } .date { font-weight: 300; } .category { font-size: 14px; background-color: gainsboro; padding: 0 10px; border-radius: 30px; } /* 블로그 리스트 세팅 */ .blog-list { display: grid; grid-template-columns: 1fr 1fr; gap: 36px; } .blog-title { font-size: 30px; margin-top: 24px; } .blog-footer { display: flex; margin-top: 32px; } /* 공유 스타일 */ .footer-flex { display: flex; align-items: center; gap: 10px; } .active { font-weight: 600; background-color: gainsboro; } .margin-top-40 { margin-top: 40px; } .bold { font-weight: 600; } .ratio-img { aspect-ratio: 16 / 9; } .border-radius { border-radius: 5px; overflow: hidden; } .box-shadow { box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1); } </style> </head> <body> <div class="root"> <div class="container"> <div class="nav"> <div class="logo"><img src="/imgs/logo.webp" /></div> <div class="search"><i class="fa-solid fa-magnifying-glass"></i></div> </div> <div class="header"> <div class="header-title bold">jjack1</div> <div class="header-content">설명</div> </div> <div class="menu"> <div class="menu-item active">See All</div> <div class="menu-item">환경설정</div> <div class="menu-item">컴퓨터사이언스</div> </div> <div class="recent margin-top-40"> <div class="r-img border-radius ratio-img box-shadow"> <img src="/imgs/london.jpg" /> </div> <div class="r-info"> <div class="r-title bold">최신글 제목</div> <div class="r-footer footer-flex"> <div class="circle-img"><img src="/imgs/napa.jpg" /></div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> </div> <div class="blog-list margin-top-40"> <div class="blog-item"> <div class="blog-img border-radius ratio-img box-shadow"> <img src="/imgs/new-york.jpg" /> </div> <div class="blog-title bold">블로그 제목</div> <div class="blog-footer footer-flex"> <div class="circle-img"> <img src="/imgs/san-francisco-2.jpg" /> </div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> <div class="blog-item"> <div class="blog-img border-radius ratio-img box-shadow"> <img src="/imgs/new-york.jpg" /> </div> <div class="blog-title bold">블로그 제목</div> <div class="blog-footer footer-flex"> <div class="circle-img"> <img src="/imgs/san-francisco-2.jpg" /> </div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> <div class="blog-item"> <div class="blog-img border-radius ratio-img box-shadow"> <img src="/imgs/new-york.jpg" /> </div> <div class="blog-title bold">블로그 제목</div> <div class="blog-footer footer-flex"> <div class="circle-img"> <img src="/imgs/san-francisco-2.jpg" /> </div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> <div class="blog-item"> <div class="blog-img border-radius ratio-img box-shadow"> <img src="/imgs/new-york.jpg" /> </div> <div class="blog-title bold">블로그 제목</div> <div class="blog-footer footer-flex"> <div class="circle-img"> <img src="/imgs/san-francisco-2.jpg" /> </div> <div class="date">날짜</div> <div class="category">카테고리</div> </div> </div> </div> </div> </div> </body> </html>

실습

notion image
  • 폴더 구조 처럼 css파일 html파일을 나눈다
  • common.css에는 모든 공통된 스타일을
  • style.css에는 모든 css파일을 import해서 가져온다.
  • 모든 html파일에 style.css파일만 가져와서 사용하면 된다.
notion image
notion image
notion image

index.html

<!DOCTYPE html> <!-- index.html --> <html lang="en"> <head> <link rel="stylesheet" href="css/style.css" /> </head> <body> <div> <ul class="nav"> <li><a href="index.html"></a></li> <li><a href="write.html">글쓰기</a></li> </ul> </div> <h1>메인페이지</h1> <hr /> <div class="index-container"> <div class="card"> <div class="card-img"> <img src="img/london.jpg" /> </div> <div class="card-btn"> <a href="detail.html" class="btn">상세보기</a> </div> </div> <div class="card"> <div class="card-img"> <img src="img/london.jpg" /> </div> <div class="card-btn"> <a href="detail.html" class="btn">상세보기</a> </div> </div> <div class="card"> <div class="card-img"> <img src="img/london.jpg" /> </div> <div class="card-btn"> <a href="detail.html" class="btn">상세보기</a> </div> </div> <div class="card"> <div class="card-img"> <img src="img/london.jpg" /> </div> <div class="card-btn"> <a href="detail.html" class="btn">상세보기</a> </div> </div> </div> </body> </html>

detail.html

<!DOCTYPE html> <!-- detail.html --> <html lang="en"> <head> <link rel="stylesheet" href="css/style.css" /> </head> <body> <div> <ul class="nav"> <li><a href="index.html"></a></li> <li><a href="write.html">글쓰기</a></li> </ul> </div> <h1>상세보기</h1> <hr /> <div class="detail-container"> <div class="card"> <div class="card-img"> <img src="img/london.jpg" /> </div> <div class="card-content"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores dicta fugiat numquam repellat accusantium eligendi doloremque reiciendis quod. Laborum eaque commodi ipsum! Tempora voluptates laborum ducimus provident nulla nemo quo. </div> </div> </div> </body> </html>

write.html

<!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="css/style.css" /> </head> <body> <div> <ul class="nav"> <li><a href="index.html"></a></li> <li><a href="write.html">글쓰기</a></li> </ul> </div> <h1>글쓰기</h1> <hr /> <div class="write-container"></div> <input class="write-input" type="text" placeholder="제목" /> <input class="write-input" type="text" placeholder="내용" /> <button class="btn">글쓰기 완료</button> </body> </html>

style.css

/* css/style.css */ @import url("common.css"); @import url("index.css"); @import url("write.css"); @import url("detail.css");

common.css

* { padding: 0; margin: 0; box-sizing: border-box; } img { width: 100%; height: 100%; object-fit: cover; } .nav { display: flex; list-style: none; gap: 10px; padding: 10px; } .card { border: 1px solid #000; } .card-btn { padding: 10px 0; } .btn { text-decoration: none; height: 30px; background-color: lightgreen; border: none; color: white; cursor: pointer; padding: 5px 10px; border-radius: 5px; }

index.html

.index-container { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; }

detail.css

.detail-container { padding: 20px; }

write.css

.write-input { width: 200px; height: 30px; }
Share article

jjack1