FullStack Steps/CSS Practicing
CSS 수평메뉴 수직메뉴 간단하게 만들어 보기
짱짱짱마샤리
2025. 1. 7. 11:30
오늘은 수평메뉴와 수직 메뉴를 간단하게 구현해보겠다
애플 공식 홈페이지의 수평 메뉴의 일부를 만들어보려고 한다.
일단 메뉴 안에 여러 카테고리 들이 있는 걸로 생각해서 list를 쓰면 편할 것 같다
그럼 리스트를 해서 작성 해보자
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<ul>
<!-- a 태그는 메뉴를 클릭했을 때 다른 웹사이트로 이동해야하기 때문에 적어주었다.
#은 아무 의미 없다. 링크 설정 전 임시방편으로 #을 적어줬을 뿐이다. -->
<li><a href="#">스토어</a></li>
<li><a href="#">Mac</a></li>
<li><a href="#">iPad</a></li>
<li><a href="#">iPhone</a></li>
<li><a href="#">Watch</a></li>
<li><a href="#">Vision</a></li>
<li><a href="#">AirPods</a></li>
</ul>
</body>
</html>
리스트를 썼더니 수평이 아닌 수직 메뉴가 생성 됐다. 하지만 괜찮다 CSS는 이를 수평으로 바꿔줄 뿐더러 좀 더 멋드러지게 바꿔줄 수 있다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
/* margin이 바깥쪽 여백의 크기라면
padding은 안쪽 여백의 크기를 나타낸다 */
padding: 0;
}
#box {
width: 765px;
/* 좌우마진이 동일하게 설정(결과적으로 중앙배치) */
margin: auto;
/* margin-left: 100px;
margin-right: 100px; */
border: 1px solid black;
}
</style>
</head>
<body>
<!-- 메뉴 상자를 만들기 위해 div 태그 id 속성값을 box로 설정하고
id selector를 사용해 위에서 CSS를 정의해주었다 -->
<div id=box>
<ul>
<!-- a 태그는 메뉴를 클릭했을 때 다른 웹사이트로 이동해야하기 때문에 적어주었다.
#은 아무 의미 없다. 링크 설정 전 임시방편으로 #을 적어줬을 뿐이다. -->
<li><a href="#">스토어</a></li>
<li><a href="#">Mac</a></li>
<li><a href="#">iPad</a></li>
<li><a href="#">iPhone</a></li>
<li><a href="#">Watch</a></li>
<li><a href="#">Vision</a></li>
<li><a href="#">AirPods</a></li>
</ul>
</div>
</body>
</html>
일단 메뉴 박스를 페이지의 정중앙에 위치시켜놓았다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
/* margin이 바깥쪽 여백의 크기라면
padding은 안쪽 여백의 크기를 나타낸다 */
padding: 0;
}
#box {
width: 880px;
/* 좌우마진이 동일하게 설정(결과적으로 중앙배치) */
margin: auto;
/* margin-left: 100px;
margin-right: 100px; */
/* border: 1px solid black; */
}
/* id가 main-menu의 배경색을 검정색으로 바꿈 */
#main-menu {
background-color: black;
}
/* id가 main-menu인 태그 안에 있는 모든 li 태그에 적용
배경색을 검정색으로 바꿈
블록 요소인 li 태그를 인라인 속성의 블록으로 표시시*/
#main-menu>li {
background-color: black;
display: inline-block;
}
/* id가 main-menu인 태그 안에 있는 모든 li 태그 안에 있는 모든 a 태그에 적용
a 태그는 인라인 요소기 때문에 한쪽으로 쏠리는 현상이 발생하여 block으로 바꿔줌
a 태그의 텍스트는 밑줄을 가지기 때문에 밑줄 효과를 빼주기 위해 none으로 설정
텍스트 색깔을 하얀색으로 바꿔주고 a 태그의 길이를 100px로 설정해준다
a 태그안에 씌여진 텍스트를 가운데 정렬하고
a 태그의 바깥여백을 10px로 설정해준다
폰트의 크기를 18px로 고정해주고
폰트를 강조 표시한다.
*/
#main-menu>li>a {
display: block;
text-decoration: none;
color: white;
width: 100px;
text-align: center;
padding: 10px;
font-size: 18px;
font-weight: bold;
}
</style>
</head>
<body>
<!-- 메뉴 상자를 만들기 위해 div 태그 id 속성값을 box로 설정하고
id selector를 사용해 위에서 CSS를 정의해주었다 -->
<div id=box>
<ul id="main-menu">
<!-- a 태그는 메뉴를 클릭했을 때 다른 웹사이트로 이동해야하기 때문에 적어주었다.
#은 아무 의미 없다. 링크 설정 전 임시방편으로 #을 적어줬을 뿐이다. -->
<li><a href="#">스토어</a></li>
<li><a href="#">Mac</a></li>
<li><a href="#">iPad</a></li>
<li><a href="#">iPhone</a></li>
<li><a href="#">Watch</a></li>
<li><a href="#">Vision</a></li>
<li><a href="#">AirPods</a></li>
</ul>
</div>
</body>
</html>
원래는 하나하나씩 하려고 했는데 첨부할 실행 결과들이 보기 좋지 않아서 한꺼번에 작성한 내용이다.
이렇게 아까보다 훨씬 근사한(?) 수평 메뉴가 만들어졌다
다음은 수직 메뉴를 만들어보자
저녁 메뉴를 고를텐데 음식을 수직으로 나열해보겠다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>저녁메뉴</h1>
<ul>
<li><a href="#">국밥</a></li>
<li><a href="#">라면</a></li>
<li><a href="#">햄버거</a></li>
<li><a href="#">김밥</a></li>
<li><a href="#">김치찌게</a></li>
</ul>
</body>
</html>
헤드를 가운데 정렬해주고 li 태그도 좀 더 수정해주자
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/*
가운데 정렬해주고 폰트를 궁서체로 바꿔준다
폰트 사이즈는 26px에 강조표시를 해주고
글씨색은 파란색 계열로 설정해주고
그림자를 우측하단에 3px 두께만큼 검정색으로 설정해준다
*/
h1{
text-align: center;
font-family: 궁서체;
font-size: 26px;
font-weight: bold;
color: #4750f4;
text-shadow: 1px 1px 3px black;
}
/*
sub-menu 클래스의 리스트 스타일을 none으로줘서
리스트 왼쪽의 점을 없앤다
*/
.sub-menu{
list-style: none;
}
</style>
</head>
<body>
<h1>점심메뉴</h1>
<!-- ul 태그에 CSS를 적용하기 위해서 클래스 속성을 부여한다 -->
<ul class="sub-menu">
<li><a href="#">국밥</a></li>
<li><a href="#">라면</a></li>
<li><a href="#">햄버거</a></li>
<li><a href="#">김밥</a></li>
<li><a href="#">김치찌게</a></li>
</ul>
</body>
</html>
위의 코드의 실행 결과이다. 의도한대로 됐지만 아직 좀 밋밋하다.
조금 더 이쁘게 수정해주자
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/*
가운데 정렬해주고 폰트를 궁서체로 바꿔준다
폰트 사이즈는 26px에 강조표시를 해주고
글씨색은 파란색 계열로 설정해주고
그림자를 우측하단에 3px 두께만큼 검정색으로 설정해준다
*/
h1{
text-align: center;
font-family: 궁서체;
font-size: 26px;
font-weight: bold;
color: #4750f4;
text-shadow: 1px 1px 3px black;
}
/*
sub-menu 클래스의 리스트 스타일을 none으로줘서
리스트 왼쪽의 점을 없앤다
*/
.sub-menu{
list-style: none;
}
.sub-menu > li > a {
display: block;
width: 100px;
border: 1px solid yellow;
text-decoration: none;
margin-top: 20px;
/* 색깔은 r: 9, g: 120, b: 48 만큼 줘서 녹색 계열의 색을 주겠다 */
color: rgb(9, 120, 48);
font-weight: bold;
text-align: center;
padding: 10px;
}
</style>
</head>
<body>
<h1>점심메뉴</h1>
<!-- ul 태그에 CSS를 적용하기 위해서 클래스 속성을 부여한다 -->
<ul class="sub-menu">
<li><a href="#">국밥</a></li>
<li><a href="#">라면</a></li>
<li><a href="#">햄버거</a></li>
<li><a href="#">김밥</a></li>
<li><a href="#">김치찌게</a></li>
</ul>
</body>
</html>
이제 좀 볼만해졌다
마지막으로 hover 를 적용해서 마우스를 올렸을 때 색깔이 변하게끔 해주자
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/*
가운데 정렬해주고 폰트를 궁서체로 바꿔준다
폰트 사이즈는 26px에 강조표시를 해주고
글씨색은 파란색 계열로 설정해주고
그림자를 우측하단에 3px 두께만큼 검정색으로 설정해준다
*/
h1 {
text-align: center;
font-family: 궁서체;
font-size: 26px;
font-weight: bold;
color: #4750f4;
text-shadow: 1px 1px 3px black;
}
/*
sub-menu 클래스의 리스트 스타일을 none으로줘서
리스트 왼쪽의 점을 없앤다
*/
.sub-menu {
list-style: none;
}
.sub-menu>li>a {
display: block;
width: 100px;
border: 1px solid yellow;
text-decoration: none;
margin-top: 20px;
/* 색깔은 r: 9, g: 120, b: 48 만큼 줘서 녹색 계열의 색을 주겠다 */
color: rgb(9, 120, 48);
font-weight: bold;
text-align: center;
padding: 10px;
}
/* 의사클래스:상태 */
.sub-menu>li>a:hover {
border-color: red;
box-shadow: 1px 1px 3px black;
}
/* 의사요소 */
.sub-menu>li>a::before {
content: '◀';
}
.sub-menu>li>a::after {
content: '▶';
}
.sub-menu>li::marker {
content: '※';
}
</style>
</head>
<body>
<h1>점심메뉴</h1>
<!-- ul 태그에 CSS를 적용하기 위해서 클래스 속성을 부여한다 -->
<ul class="sub-menu">
<li><a href="#">국밥</a></li>
<li><a href="#">라면</a></li>
<li><a href="#">햄버거</a></li>
<li><a href="#">김밥</a></li>
<li><a href="#">김치찌게</a></li>
</ul>
</body>
</html>
마우스를 올리면 이렇게 튀어나온 것같은 효과를 줄 수 있다