프론트엔드

[HTML, CSS] 네이버 클론코딩 ①

밍들레밍 2025. 2. 9. 19:01

잘 짜여진 웹페이지를 따라 만들어보는 것이 실력향상에 큰 도움이 된다고 들었다

가장 많이 접해본 네이버의 홈페이지를 클론코딩해보고자 한다.

유튜버 ZeroCho TV[네이버클론코딩] 28강을 들으며 배운 것과 중간 과정을 기록해볼 것이다!

1년 전 영상이라 지금의 네이버 홈페이지와 또 달라진 부분이 있어 그러한 부분은 내가 따로 반영해보며 따라갔다.

 

[1-2 키보드에서 손 떼!! 가로세로 법칙] 

  • 개발자는 타자치는 사람이 아니다. 어떻게 구현할지에 대해 생각하는 시간이 가장 길어야 한다
  • 웹페이지를 클론코딩해보기 위해 먼저 가로 요소들로 나누고 그 안에서 또 세로 요소들로 나눠보자 

 

[1-3 HTML 파일부터 만들어봅시다

  • 개발자 모드에서 각각의 요소의 속성을 볼 수 있는 단축키 : Ctrl+Shift+c

 

[1-4 네이버는 브라우저에 들어있는게 아니에요... (/, ./, ../ 차이 알아보기)

<link rel="shortcut icon" type="image/x-icon" href="./favicon.ico">

브라우저의 favicon을 구현하기 위한 코드이다  이 코드를 나의 html로 옮겨오면서 시스템SW및실습에서 배웠던

  • / : 루트 디렉토리부터 시작하는 절대경로
  • ./ : 현재 디렉토리에서 시작하는 상대경로
  • ../ : 상위 디렉토리로 이동하는 상대경로

을 복기했다.

 

 

 

[1-5 block, inline-block, inline의 가장 큰 차이점

css에서 부모는 보통 자식의 너비, 높이를 그대로 차지함

display

  • block :  width 100%차지하게 함
  • inline-block : content부분만 차지
  • inline : width,height값 무시

 

 

[1-7 이미지 스프라이트를 쓰는 이유, background로 위치 조절하기

이미지 스프라이트

 

이미지 스프라이트 : 여러 개의 작은 이미지를 하나의 큰 이미지 파일로 합쳐서 사용하는 기법

→background-size로 크기를 지정하고 background-position을 지정하여 원하는 이미지만 잘라낼 수 있다 

 

 

 

[1-8 패딩vs마진 결정하기, CSS에 변수가 생겼다?]

  • 햄버거 버튼을 구현하면서 padding과 margin에 대해 헷갈릴 수 있는데 버튼에 padding을 설정해야 그 주변까지 클릭할 수 있다 
  • 요즘엔 color에 변수만 써도 알아서 결과물에 색을 반영해줌
  • header-hamburger:hover선택자로 마우스를 버튼에 올렸을 때의 CSS를 반영하자

 

 

[1-10 z-index와 display: none을 쓰면 안 될 때(웹접근성)]

  • z-index는 형제간에만 적용됨. 부모-자식 간에는 적용x
  • z-index는 position이 static이면 적용x
    #header-hamburger{
            position: absolute;
            top: 5px;
            left: -12px;
            z-index: 1;
            padding: 8px;
            display: inline-block;
            background: none;
            border: none;
            cursor: pointer;
        }
        #header-hamburger:hover::before{
            position: absolute;
            content: '';
            left: 1px;
            top: 1px;
            z-index: 0;
            width: 48px;
            height: 48px;
            background-color: var(--color_option_bg);
            border-radius: 50%;
        
        }
        #header-hamburger > div{
            position: absolute;
            background-image: url(./sp_main.png);
            background-size: 452px 436px;
            background-position: -311px -166px;
            background-repeat: no-repeat;
            width: 32px;
            height: 32px;

        }

header-hamburger과 header-hamburger:hover::before도 부모자식 관계인데 왜 z-index가 적용될까?

  • #header-hamburger가 부모지만 position: absolute;와 z-index: 1;을 가지므로 stacking context를 형성.
  • ::before 가상 요소는 부모의 stacking context 안에서 z-index: 0;이라 제일 아래에 위치.
  • #header-hamburger > div는 z-index가 명시되지 않았지만, 부모(#header-hamburger)의 stacking context 안에서 기본적으로 z-index: auto;라서 z-index: 0;보다 위에 배치됨.

인상깊었던 포인트

span태그 안에 글자가 있는데 웹사이트에는 보이지 않는다 근데 속성으로 가보면 display: none; 이 아닌 더 긴 코드가 있음.  → 시각장애인을 위해 스크린 리더에 읽힐 수 있도록 화면상에선 보이지 않지만 표시되도록 네이버가 설정함

 

 

 

[1-11 길어진 css 코드 정리하는 법]

  • box-sizing : border-box → width가 padding, border포함
  • 공통되는 css코드는 여러 선택자를 나열하여 작성한다

 

 

[1-12 검색창 만들기 시작!]

style 태그를 body안에 넣으면 안되는 이유

  1. <style> 태그는 스타일을 정의하는 메타데이터라서 <head>에 있어야 함. <body> 안에 스타일을 넣으면 HTML 문서의 논리적 구조가 깨짐.
  2. 웹페이지가 로딩될 때, 브라우저는 위에서부터 차례로 HTML을 해석하기 때문에 CSS를 미리 읽고 적용해야 렌더링이 빠름
  3. <body>에 CSS를 넣으면 HTML과 CSS가 뒤섞여 유지보수가 어려움.

<a>는 inline 요소라서 width, height가 적용되지 않는다 적용하려면 display: inline-block; 또는 display: block;을 추가해야 한다