web Language/css

4. Mega Menu - 가로 및 반응형

wooweee 2023. 4. 27. 09:40
728x90

1. summary

  • property
    1. float : tag 자체를 좌우로 이동
    2. text-decoration: link 밑줄 없애줌
    3. border : none; // button 테두리 없애기
    4. button
      • border: none; // 버튼의 테두리 제거
      • outline: none: // 버튼 클릭시 생기는 포커스 표시 제거
    5. inherit: 조상의 attribute 값을 들고 옴
    6. box-shadow: 해당 block 그림자 넣기
    7. z-index: position이 absolute, relative, fixed 같은 경우 적용, 숫자가 클수록 위로 쌓임. 팝업, 드롭다운 메뉴 만들 때 사용

    8. background: 배경 이미지, 색상, 위치 등을 설정하는데 사용
    9. background-color: 요소의 배경 색상만을 설정

 

  • 추가 수정 부분
    • box-sizing: border-box
    • @media queary - screen
/* * 은 모든 element에서 적용이 되는 것이지만 property가 box-sizing이기 때문에 block 요소만 적용된다. */
* {
  box-sizing: border-box; /*border-box는 자신의 부모 block 영역에서 벗어나지 못하는 것 == padding과 border 두께로 인한 size*/
}

body {
  margin: 0; /*body를 browser 양끝까지 꽉 채우고 싶은 경우 - position: relative 필요 없음*/
  /*position: relative;*/ /* body에 margin을 두고 싶고 dropdown-content가 해당 body width와 동일 적용하고 싶은 경우*/
}

/* 반응형 웹할 때 사용하는 것 */
@media screen and (max-width: 600px) {
  .column {
    width: 100%;
    height: auto;
  }
}

/* @media 규칙 - screen
    screen은 컴퓨터 화면과 같은 스크린 기반 장치를 가리킨다.
    @media screen은 스크린 기반 장치에서만 해당 규칙이 적용됨을 의미
*/

 

 

 

2. 적용 이미지

width 600px 이상
width : 600px 이하

 

3. 코드

  • html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Accordion</title>
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
    />

    <div class="navbar">
      <a href="#home">Home</a>
      <a href="#news">News</a>

      <!-- 내려오는 부분 -->
      <div class="dropdown">
        <button class="dropbtn">
          Dropdown
          <i class="fa fa-caret-down"></i>
        </button>

        <div class="dropdown-content">
          <div class="header">
            <h2>Mega Menu</h2>
          </div>
          <div class="row">
            <div class="column">
              <h3>Category 1</h3>
              <a href="#">Link 1</a>
              <a href="#">Link 2</a>
              <a href="#">Link 3</a>
            </div>
            <div class="column">
              <h3>Category 2</h3>
              <a href="#">Link 1</a>
              <a href="#">Link 2</a>
              <a href="#">Link 3</a>
            </div>
            <div class="column">
              <h3>Category 3</h3>
              <a href="#">Link 1</a>
              <a href="#">Link 2</a>
              <a href="#">Link 3</a>
            </div>
          </div>
          <!-- drop down content > row 끝 -->
        </div>
        <!-- drop down content 끝 -->
      </div>
      <!-- drop down 끝 -->
    </div>
  </body>
</html>

 

  • css
/* 초기 setting */
/* * 은 모든 element에서 적용이 되는 것이지만 property가 box-sizing이기 때문에 block 요소만 적용된다. */
* {
  box-sizing: border-box; /*border-box는 자신의 부모 block 영역에서 벗어나지 못하는 것 == padding과 border 두께로 인한 size*/
}

body {
  margin: 0; /*body를 browser 양끝까지 꽉 채우고 싶은 경우 - position: relative 필요 없음*/
  /*position: relative;*/ /* body에 margin을 두고 싶고 dropdown-content가 해당 body width와 동일 적용하고 싶은 경우*/
}

/* navbar container */
.navbar {
  overflow: hidden; /*습관적으로 넣는건가?*/
  background-color: #333;
  font-family: Arial, Helvetica, sans-serif;
}

.navbar a {
  float: left; /*float : tag 자체를 움직여주는 역할*/
  font-size: 16px;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none; /*link 밑줄 없애줌*/
}

.dropdown {
  float: left;
  overflow: hidden;
}

/* button도 h2 처럼 만들어주는 과정 */
.dropdown button {
  font-size: 16px;

  border: none; /*button 테두리 없애기*/
  outline: none; /*버튼 클릭시 생기는 포커스 표시 제거 */

  color: white;
  padding: 14px 16px;
  background-color: inherit; /*inherit : 조상의 color를 상속 받음*/
  font: inherit; /*세로 정렬과 모바일에서 중요하다고 함*/
  margin: 0; /*세로 정렬과 모바일에서 중요하다고 함*/
}

.navbar a:hover,
.dropdown:hover,
.dropbtn {
  background-color: red;
}

/* 1. 핵심 : display 날리기, z-index로 상단에 두기*/
.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  width: 100%;
  left: 0;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); /*그림자 방법*/
  z-index: 1; /*position이 absolute, relative, fixed 같은 경우 적용, 숫자가 클수록 위로 쌓임. 팝업, 드롭다운 메뉴 만들 때 사용*/
}

.dropdown-content .header {
  background: red; /*background-color 보다 적용하는 범위가 더 넓다.*/
  padding: 16px;
  color: white;
}

/* 2. 핵심 : hover시 display block 처리 */
.dropdown:hover .dropdown-content {
  display: block;
}

.column {
  float: left;
  width: 33.33%;
  padding: 10px;
  background-color: #ccc;
  height: 250px;
}

.column a {
  float: none;
  color: black;
  padding: 16px;
  text-decoration: none;
  display: block;
  text-align: left; /*column에서 width를 33% 먹여서 가능하다*/
}

.column a:hover {
  background-color: #ddd;
}

/*반응형 웹할 때 사용하는 것*/
@media screen and (max-width: 600px) {
  .column {
    width: 100%;
    height: auto;
  }
}