코드잇 스프린트의 css강의를 듣던 평화로운 어느날..

문제가 발생했다.

아래의 코드로 구현해낸 화면

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>로그인</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <form>
      <h1>로그인</h1>
      <label>아이디</label>
      <input
        name="username"
        type="text"
        placeholder="Email 또는 전화번호"
      />
      <label>비밀번호</label>
      <input
        name="password"
        type="password"
        placeholder="비밀번호"
      />
      <div>
        <a href="#" class="forget">비밀번호를 잊으셨나요?</a>
      </div>
      <button>로그인</button>
      <div class="join">
        회원이 아니신가요?
        <a href="#">가입하기</a>
      </div>
    </form>
  </body>
</html>
html {
  font-family: 'Noto Sans KR', sans-serif;
  font-size: 16px;
  font-weight: 400;
  box-sizing: border-box;
}

form{
  width: 360px;
  text-align: center;
  margin: 0 auto;
}

label {
  display: block;
  margin: 16px 0 8px;
  width: 100%;
  text-align: left;
  font-size: 16px;
  font-weight: 400;
  color: #2c2c2c;
}

input {
  display: block;
  width: 100%;
  padding: 16px 24px;
  margin: 0 auto;
  border: 1px solid #d1d1d1;
  box-sizing: border-box;
}

이하 생략

코드의 css부분을 보면 html에 box-sizing: border-box;와 input 부분에 box-sizing: border-box;이 적혀있다.

나는 처음에 코드를 작성할 때 전체를 감싸고 있는 html 태그가 css의 첫번째 코드에 와 있길래 (html부분 내가 작성한것 아님) "전체를 뜻하는 태그이구나..!"라는 생각에 box-sizing: border-box를 주었는데 자꾸 input부분이 지정해준 너비 밖으로 삐져나왔다.

input 부분이 눈에 거슬리게 튀어나와있는 모습

너비 값을 100%도 줘보고, 정해진 px로도 줘봤지만 input의 너비는 줄어들지 않았고 overflow : hidden까지 들먹여가며 머리를 싸맸던 나는 input 값에 box-sizing: border-box;를 재부여하고 나서야 해결을 할수 있었다.

왜 html 태그에 작성한 box-sizing: border-box;은 적용되지 않았던걸까? box-sizing의 작동 방식은 이렇다.

  1. 기본 적용: box-sizing: border-box;를 html 태그에 적용하면, 모든 요소가 기본적으로 border-box 모델로 계산되도록 설정해야하지만 이 설정이 모든 요소에 자동으로 적용되지 않거나, 특정 요소에 대해 다른 스타일이 정의되어 있을 경우, 이러한 스타일이 우선시될 수 있다.
  2. 상속: CSS 속성은 기본적으로 상속되지 않는다. box-sizing은 상속되는 속성이 아니기 때문에, 각 요소에 대해 명시적으로 설정해주지 않으면 기본값인 content-box가 적용될 수 있다.
  3. 스타일 우선순위: 만약 어떤 요소에 대해 box-sizing을 따로 설정한 경우, 그 설정이 우선적으로 적용된다. 그래서 각 요소에 대해 box-sizing: border-box;를 명시적으로 설정해주면, 그 요소에 대해서는 border-box 모델이 적용되는 것.

1. *선택자 :

  • *는 모든 요소를 선택하는 와일드카드 선택자이다. 즉, 문서 내의 모든 HTML 요소에 적용할 스타일을 정의할 수 있다.
  • 예를 들어, * { margin: 0; }는 모든 요소의 마진을 0으로 설정한다.

2. html 선택자 :

  • html 선택자는 <html> 태그에만 적용된다. 따라서 html에 설정한 스타일은 오직 <html> 요소에만 영향을 미친다.
  • 예를 들어, html { font-size: 16px; }는 문서의 루트 요소인 <html>에만 적용되고, 다른 요소에는 직접적인 영향을 주지 않는다.

html 태그에 box-sizing: border-box;를 설정했어도, 그 설정이 모든 요소에 영향을 주지 않거나, 다른 스타일이 우선시될 경우 원하는 효과를 얻지 못할 수 있다. 그래서 모든 요소에 대해 * 선택자를 사용하여 적용하는 것이 일반적인 방법이다.

 

*이해를 위해 도움 주신 팀원 ㅇㄱ님과 chatGPT 고맙습니다.

'코린이 개념잡기 > CSS' 카테고리의 다른 글

flex box  (0) 2024.12.02
BOX Model  (0) 2024.12.01
마진 상쇄(margin collapsing)  (2) 2024.11.29
미디어 쿼리(media query)  (0) 2024.02.09
inset과 gap  (0) 2023.03.17

오늘 포스팅은 코드잇스프린트 자바스크립트 프리코스 완주 챌린지에 대한 후기를 적어보겠습니다!

최근에 프론트엔드 부트캠프에 참여하게 되었고, 그 전에 자바스크립트에 대한 기초적인 지식을 쌓기 위해 코드잇 스프린트의 프리코스를 수강했답니다.

프리코스는 자바스크립트의 기초부터 시작해서 변수, 함수, 배열, 객체 등 다양한 개념을 다루고 있는데 초보자(나같은 비전공자도!)도 쉽게 따라갈 수 있어서 좋았습니다. 강의는 영상으로 진행되는데 짧고 간결하게 구성되어 있어 집중하기 좋았고 각 강의마다 퀴즈나 과제가 있어 학습효과가 높았습니다. 그리고 특히 강의를 들으며 코드를 직접 작성해보는 것이 가장 유익하다고 느꼈습니다. 이론적으로만 배우는 것이 아니라, 실제로 코드를 짜보는 과정에서 많은 것을 배울 수 있었습니다.


저는 이 프리코스를 통해 자바스크립트의 기초를 확실히 다질 수 있었습니다. 처음에는 간단한 문법을 배우는 것이었지만, 점차 복잡한 개념으로 넘어가면서 도전의 연속이었습니다. 특히, 핵심개념부터는 과제가 조금 어려워져서 당황하기도 했습니다. 하지만, 강의를 여러 번 반복해서 듣고, 모르는 부분은 구글링을 통해 해결하면서 점점 자신감을 얻었습니다.

프리코스를 완주한 후에는 자바스크립트에 대한 이해도가 높아졌고, 부트캠프에서도 더 깊이 있는 학습을 할 수 있었습니다. 이 과정에서 느낀 점은, 혼자서 공부하는 것보다 체계적인 커리큘럼이 얼마나 중요한지를 깨달았습니다.

'일상 > 사념' 카테고리의 다른 글

24년 11월 29일  (1) 2024.11.29

+ Recent posts