

HTML 태그는 수많은 종류가 존재하지만 핵심 태그만 암기하고 차차 외워가기로 한다.

<a href="https://codestates.com" target="_blank">코드스테이츠</a>
Note: radio 버튼은 name이라는 속성을 사용하여 하나의 그룹으로 만들어야 택1이 가능하다.
Note: self-closing tag: 태그 내부에 내용이 없다면 closing tag를 생략 가능하다.
<img src="abcd.png" /> <handleReview /> // 리액트에서 프롭스 없이 함수 컴포넌트를 내려주는 경우
앞서 말했듯이 css는 스타일링을 담당하지만 단순히 디자인만을 고려하지는 않는다.
Note: UI, UX는 트렌드에 맞게 변화하므로 최신 동향을 살펴보고 적용해야 한다.
css 속성은 수많은 종류가 있으며, css 파일을 정의하는 문법이나 라이브러리도 무궁무진하다.
다만, 기본에서 크게 벗어나지 않으므로 핵심 기능부터 정리하고 Codestates 리뷰 이외의 항목은 TIL을 통해 정리하는 것으로 한다.
ex) color, font-size, text-align, background-color 등
background vs background-color?
background 태그의 종류 중 하나가 background-color임
둘 다 색상을 지정할 수 있지만 background 태그는 repeat, position, image 등을 사용할 수 있다.
따라서 색상을 지정할 경우 명시적으로 background-color를 사용하는 것이 가독성 측면에서 도움이 된다.
<link rel="stylesheet" href="index.css" />
<link rel="stylesheet" href="layout.css" />
이처럼 여러 css 파일을 추가하여 반응형 웹사이트를 구현할 수 있다.
미디어 쿼리

.box {
color: #155724; /* 글자 색상 */
background-color: #d4edda; /* 배경 색상 */
border-color: #c3e6cb; /* 테두리 색상 */
font-size: 24px; /* 글자 크기 */
font-weight: ~~ /* 굵기 */
text-decoration: ~~ /* 밑줄, 가로줄 */
letter-spacing: ~~ /* 자간 */
line-height: ~~ /* 행간 */
text-align: center; /* 텍스트 정렬 */
}
Note:
1. 절대적이고 확실한 크기로 정하고 싶을 때px(픽셀)을 사용. 다만, px은 접근성에 불리하다. 이 말은 곧 CSS를 통해 글꼴 크기는 고정되기 때문에, 작은 글씨를 보기 힘든 사용자가 브라우저 기본 글꼴 크기를 더 크게 설정했다 하더라도 이런 설정이 무시되는 단점이 있다. 결과적으로 개발자가 강조하려던 제목(heading) 등이 오히려 일반 텍스트보다 작게 보이는 결과를 초래할 수 있다. 또한 px은 모바일 기기와 같이 작은 화면이면서 고해상도인 경우에도 적합하지 않다. 기본적으로 고해상도에서는 1px이 모니터의 한 점보다 크게 업스케일(upscale)되기 때문에, 뚜렷하지 못한 형태로 출력될 수 있다. px은 화면 크기가 절대적인 경우에 (예를 들어 출력용) 유리함.
2. 보통의 경우
rem을 사용. root의 글자 크기, 즉 브라우저의 기본 글자 크기가 1rem이며, 두배로 크게 하고 싶다면 2rem, 작게 하려면 0.8rem 등으로 조절해서 사용할 수 있다. 이는 사용자가 설정한 기본 글꼴 크기를 따르므로, 접근성에 유리함. (em은 부모 엘리먼트에 따라 상대적으로 크기가 변경되므로 계산이 어려운 단점이 있다. 이에 비해 rem은 root의 글자 크기에 따라서만 상대적으로 변함.)3. 반응형 웹(responsive web)에서 기준점을 만들 때
반응형 웹은 디바이스의 너비(width)에 따라 유동적인 레이아웃이 적용되는 웹사이트를 말한다. 예를 들어, 데스크탑에서 볼 때, 스마트폰에서 세로 모드로 볼때, 가로 모드로 볼 때, 태블릿으로 볼 때가 각각 다르며, 이 때에는 디바이스 크기 별로 CSS를 달리 적용해야 합니다. 이 때에, 디바이스 크기를 나누는 기준을 보통 px로 정한다. 예를 들어 iPhone 12 Pro Max의 너비는 414px 이다. 보통 450px 미만의 너비를 갖는 디바이스는 스마트폰 세로 모드로 생각해도 좋다. 크롬 브라우저에서 자주 사용하는 디바이스의 너비(width)와 높이(height)별로 실제로 어떻게 보이는지 테스트해볼 수 있다.
4. 화면 너비 및 높이에 따른 상대적인 크기가 중요한 경우
이 때에는 vw, vh를 사용. 웹사이트의 보여지는 영역을 Viewport라고 하며, vw, vh는 viewport width 및 height를 의미한다. 간혹 화면을 가득 채우며 딱 떨어지게 스크롤되는 사이트를 본 적이 있을텐데, 이는 100vw, 100vh를 사용해 구현한 것이다. (참고로
body태그에서의 %는 HTML이 차지하는 모든 영역, 즉 지금은 보이지 않으나 스크롤했을 때 보이는 영역까지 포함했을 때에 비율임.)
모든 콘텐츠는 각자의 영역이 존재한다. 이러한 영역을 활용하여 화면의 레이아웃을 구성할 수 있다. 부트 스트랩과 같은 유료 컨텐츠를 활용하면 그럴싸한 화면 구성을 손쉽게 얻을 수 있으나 그것은 개인의 역량 발전과 무관하므로 본 포스트에서는 지양하고자 한다.
추후 서비스 상용화시 부트스트랩 사용을 고려할 수는 있겠다.

Note: 박스가 차지하는 영역을 시각적으로 확인하기 위해 배경색을 넣는 것이 좋다.
<h1> <p> 이고, 줄바꿈이 되지 않는 태그는 <span>이라면, 전자는 block 박스이며 후자는 inline 박스임을 알 수 있다.span {
background: yellow;
display: inline-block;
width: 100px;
height: 100px;
}


p {
border: 1px solid red; // 각각 border-width, border-style, border-color
margin: 10px, 20px, 10px, 20px;
padding: 10px, 20px;
overflow: auto;
// 컨텐츠가 넘치는 경우: hidden, overflow-x, overflow-y 등
}
박스 크기를 측정하는 기준은 매우 중요하다. 아래와 같은 박스 크기를 가정할 때,
#container {
width: 300px;
padding: 10px;
background-color: yellow;
border: 2px solid red;
}
#inner {
width: 100%;
height: 200px;
border: 2px solid green;
background-color: lightgreen;
padding: 30px;
}
#container의 너비는 300px이 아니라 324px이다.
300 (콘텐츠 영역)
#inner의 width:100%는 300px이 아니라 364px이다.
300 (300px의 100%)
이러한 박스 계산법은 레이아웃을 어렵게 만드므로, 여백과 테두리 두께를 포함하는 박스 계산 방법 스타일을 전역으로 추가한다. 이렇게 되면 300px은 모든 여백과 테두리를 포함한 크기로 계산된다.
* {
box-sizing: border-box;
}
Note: CSS에 box-sizing:border-box 속성을 주고 width와 height를 갖게 해주면 padding이나 border 값이 달라도 결과적으로 박스 크기는 같아진다.