본문 바로가기
> 포트폴리오/wiggle wiggle

[CSS] 메뉴 바 만들기 (1) - 이미지 사이즈와 맞추기, 이미지 여백 없애기

by 자몽주스 2024. 4. 16.
728x90
반응형

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 href="normalize.css" rel="stylesheet" />
    <link href="main.css" rel="stylesheet" />
  </head>
  <body>
    <div class="wrapper">
      <header class="header">
        <div class="banner-top">
          <a href="#"
            >카카오톡 채널 추가 시 <strong>3천원 쿠폰</strong> 즉시 발급</a
          >
        </div>
      </header>
      <!-- 헤더 끝 -->

      <!-- 콘텐트 시작 -->

      <div class="container">
        <div class="logo-menu">
          <div class="wiggle-logo">
            <a href="#"><img src="이미지/logo.png" alt="위글위글로고" /></a>
          </div>
          <div style="flex-grow: 1"></div>
          <div class="hamburger-logo">
            <a href="#">
              <img src="이미지/햄버거메뉴아이콘.png" alt="메뉴아이콘"
            /></a>
          </div>
        </div>

        <!-- 캐러셀크기 메뉴 -->
        <div class="banner-content">
          <div class="hamburgerMenu">o</div>

          <!-- 캐러셀 - 사진 시작 -->
          <div class="carousel">
            <img src="이미지/banner1.jpg" alt="배너사진1" />
          </div>
        </div>
      </div>
    </div>
    <br /><br />
    <!-- 스크립트 -->
    <script
      src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"
      integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ=="
      crossorigin="anonymous"
      referrerpolicy="no-referrer"
    ></script>
    <script src="main.js"></script>
  </body>
</html>

.container 로 

로고 2개와 / 햄버거 메뉴 / 이미지들을 묶었다.

CSS
/* CSS Reset - 기본 설정 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

/* header */
.banner-top {
  background-color: #f5e44f;
  width: 100%;
  padding: 11px;
  height: 40px;
  display: flex;
  align-items: center;
  /* 세로 중앙 정렬 추가 */
  justify-content: center;
  /* 가로 좌우 정렬 */
}
.banner-top a {
  text-decoration: none;
  font-size: 12px;
  color: rgb(0, 0, 0);
}

.banner-content img {
  width: 100%;
  height: 100%;
  vertical-align: middle;
  /* 이미지 여백 제거 */
}

/* container - 콘텐트 시작*/
/* 로고 띄우기 */
.container {
  width: 100%;
  position: relative;
}
.logo-menu {
  display: flex;
  /* align-content: space-around; */
  position: fixed;
  padding: 27px;
  width: 100%;
}
.wiggle-logo img {
  width: 175px;
  height: 84px;
}
.hamburger-logo img {
  width: 88px;
  height: 60px;
}
/* 세로 중앙정렬 추가 */
.hamburger-logo {
  display: flex;
  align-items: center;
}
.wiggle-logo {
  display: flex;
  align-items: center;
}

/* banner-content */
.banner-content {
  width: 100%;
}
/* 캐러셀-사진 */
/* 햄버거 메뉴 */
.hamburgerMenu {
  width: 488px;
  height: 100%;
  background: #f78b8b;
  position: absolute;
  right: 0;
  /* display: none; */
}

햄버거 메뉴가 컨테이너 사이즈 만큼 높이여야 했음.

.container 를 기준으로 잡기 위해

position:relative 를 써서 기준을 잡음.

 

그리고, .hamburgerMenu 는 부모를 기준으로 사이즈를 정해야함으로

position:absolute 를 적용

.banner-content img 에는 사진 밑에 여백이 남아서

 vertical-align: middle;​

적용해줬다.


이미지에 아래에 여백이 생기는 이유
이미지 아래에 여백이 생기는 이유는 HTML에서 이미지를 inline 요소로 취급하기 때문.

inline 요소는 줄 바꿈을 고려하여 줄 바꿈 문자 주위에 여백을 추가합니다. 여백은 줄 바꿈으로 인해 발생하는 것이지만, 이미지의 경우 줄 바꿈이 없어도 해당 동작이 유지.


이미지 요소는 인라인 요소로 간주되기 때문에 텍스트와 마찬가지로 줄 바꿈과 관련된 특성을 갖음.

예를 들어, 이미지 요소를 포함하는 요소의 끝에 줄 바꿈 문자가 있으면 이 줄 바꿈 문자는 이미지 아래의 여백으로 해석.

이것이 이미지 아래에 여백이 생기는 이유.

이를 해결하는 방법은 이미지 요소에 대해
vertical-align: middle;과 같은 속성을 적용하여 이미지를 수직으로 중앙에 정렬하거나,
이미지를 블록 요소로 변경하여 블록 레벨 요소의 특성을 가질 수 있도록 하는 것이다.
vertical-align 속성inline 또는 inline-block 요소의 수직 정렬을 조절하는 데 사용.
이미지는 HTML에서 inline 요소로 처리되기 때문에 이 속성이 적용

vertical-align 속성은 주로 인라인 요소의 수직 정렬을 조절하는 데 사용되지만,
이것이 이미지 아래의 여백을 제거하는 데 사용되는 이유 =

기본 값: 이미지는 HTML에서 inline 요소로 취급되며, inline 요소는 줄 바꿈을 위해 텍스트 기준선에 맞추어지기 때문에 기본적으로 vertical-align: baseline;이 적용됨. 이로 인해 이미지의 아래쪽에 여백이 생긴다.

중앙 정렬: vertical-align: middle; 속성을 사용하면 인라인 요소의 기준선을 부모 요소의 중앙에 맞출 수 있다.
따라서 이미지의 아래쪽 여백이 사라지고 이미지가 부모 요소의 세로 중앙에 정렬됩니다.
728x90
반응형