HyperText Markup Language.
웹 페이지의 전체적인 구조(리스트, 버튼, 텍스트 등)를 만드는 언어이다.
Cascading Style Sheets.
HTML에서 정의된 요소들의 스타일(폰트, 모양, 위치 등)을 지정하는 언어이다.
JavaScript.
HTML+CSS에서 정의된 요소들의 동적 처리를 담당하는 언어이다.
웹에서 이미지를 표현할 때 크게 두 가지 방식을 사용한다.
비트맵
벡터
DOCTYPE(DTD): Document Type Definition.
현재 문서/파일이 어떤 HTML 버전을 사용하는지 명시하는 키워드.
HTML은 요소로 이루어진 문서이다.
요소(element): 앞뒤에 태그로 감싸진 하나의 개체.
기본 index.html 파일에 meta 태그의 경우 닫히는 태그가 존재하지 않는데, 이를 빈(empty) 태그라고 한다.
빈 태그는 닫히는 꺽쇠 전에 '/'를 붙여주어도 되고 안 붙여줘도 되는데 되도록이면 붙여주는게 좋다.
열리는 태그에 요소의 속성을 지정해줄 수 있다.
<script src="script.js"></script>
위와 같은 식으로 원하는 속성(src)에 값(script.js)을 지정해줄 수 있다.
대부분의 빈 태그들은 별도의 설정 없이는 사용할 수 없기 때문에 태그마다 필수적으로 설정해줘야 하는 속성들이 존재한다.
div: (block) Division. 구분을 위해 사용되는 요소.
h1: (block) Heading. 해당 범위의 제목을 의미하며, h 뒤의 숫자(1~6)에 따라 중요도(크기) 설정 가능.
p: (block) Paragraph. 문장 구분을 위해 사용되는 요소.
img: (inline) Image. 이미지를 삽입하는 요소. 속성으로는 src(이미지 경로)와 alt(이미지 로드 실패 시 대체 텍스트)가 있음.
ul: (block) Unordered list. 순서가 필요없는 집합을 의미하는 요소. 하위 요소(항목)로 li 요소를 1개 이상 가짐.
a: (Inline) Anchor. 특정 페이지로 이동하는 하이퍼링크를 지정하기 위해 사용되는 요소. 속성으로 href(하이퍼링크 레퍼런스-실제 주소)와 target(링크 이동 시 열릴 탭)을 가짐.
span: (Inline) 구분을 위해 사용되는 요소.
br: (Inline) Break. 줄 바꿈을 위해 사용되는 요소.
input: (Inline & Block) 글자 요소이지만 상자 요소의 특징도 사용할 수 있음. 수평으로 쌓이지만 가로/세로 사이즈와 여백을 지정할 수 있음. 속성으로는 type(입력받을 데이터 타입), value(디폴트로 보여지는 값), placeholder(입력값에 대한 힌트), disabled(입력할 수 없음)가 있음.
label: (Inline) input 요소와 텍스트를 묶을 때 사용됨.
table: (Block) 행(tr)과 열(td)로 이루어진 집합.
모든 태그에 지정할 수 있는 속성.
title: 요소에 제목을 지정 (해당 요소에 커서를 올려놔야 보이는 제목)
style: 요소에 스타일을 입힘
class: 요소에 이름을 지정 (중복 가능)
id: 요소에 이름을 지정 (중복 안됨)
data-name: 요소에 변수명과 값을 지정하면 js에서 그 변수에 접근 가능 (querySelectorAll을 통해 해당 요소의 태그에 해당하는 요소들을 전부 가져와서, 각 요소의 dataset에서 name에 해당하는 변수에 접근이 가능함)
div { /* 선택자: 스타일을 적용할 대상 */
color: red; /* 색상: 빨강 */
margin: 20px; /* 외부 여백: 20픽셀 */
}
HTML 파일의 head 영역에 style 태그로 작성하는 방법.
장점: HTML에서 바로 스타일 적용 가능
단점: 스타일 정보가 많아지면 가독성 저하 및 처리가 복잡함
HTML 파일의 요소에 style 속성으로 선언하는 방법.
단점: 우선순위 문제 때문에 코드의 유지보수가 어려움
HTML 파일의 head 영역에 link 태그로 외부 CSS 파일을 참조해오는 방법. (병렬)
@import url("경로")
CSS 파일에서 외부 CSS 파일을 참조해오는 방법. (직렬)
기본 선택자들을 조합해서 사용하는 선택자.
tag 태그이면서 class 클래스인 모든 요소를 선택함tag 태그의 자식 중 class 클래스인 모든 요소를 선택함tag 태그의 후손 중 class 클래스인 모든 요소를 선택함tag 태그인 요소 중 바로 다음 요소를 선택함tag 태그인 요소 중 다음 요소를 모두 선택함대상 요소에 대해 어떠한 행동을 했을 때 동작하는 개념.
기본 선택자 끝에 ':'를 붙여서 가상 클래스 선택자를 지정할 수 있다.
tag 태그인 자식 중 첫째를 선택함span 태그 요소가 아닌 요소들을 전부 선택함가상의 인라인 요소를 만들어 실제로 삽입할 수 있음.
before, after 가상 요소 선택자의 경우 content라는 속성은 무조건 있어야 한다(빈 문자열이라도).
인라인 요소 삽입이기 때문에 사이즈, 여백 등을 지정해줄 수 없지만 display라는 속성에 값을 block으로 지정해주면 가능해진다.
본래는 부모 요소의 글자나 문자와 관련된 스타일은 웬만하면 상속이 된다.
일반 상속이 되지 않는 속성들에 한해서 강제 상속을 할 수 있다.
부모 요소에 존재하는 스타일 속성에 대해서 같은 속성을 자식 요소에 정의하고 값에 inherit을 지정하면 부모 요소의 스타일 속성과 같은 값이 들어간다.
우선순위 및 점수
!important(99999999) > 인라인 선언(1000) > id 선택자(100) > class 선택자(10) > tag/요소 선택자(1) > 전체 선택자(0)
body는 상속 x
!important는 지정하기 원하는 속성의 값 뒤에 붙이는 값이다.
복합 선택자들의 경우 사용되는 모든 기본 선택자들의 점수를 합산해서 비교하는 것이 편하다.
margin: 요소의 외부 여백을 지정 (auto: 가운데 정렬)
margin: 10px; /* 상하좌우 외부 여백 10px */
margin: 10px 20px; /* 상하 좌우 */
margin: 10px 20px 30px; /* 상 좌우 하 */
margin: 10px 20px 30px 40px; /* 상 우 하 좌 (시계 방향) */
margin-top(bottom/left/right): 10px;
음수값도 사용 가능. 외부 여백 축소.
padding: 요소의 내부 여백을 지정 (auto: 가운데 정렬) margin과 마찬가지 방식으로 지정할 수 있음.
리액트: 사용자 인터페이스를 구현하기 위한 효율적인 선언적 자바스크립트 라이브러리.
프레임워크: 특정 앱/서비스를 만들기 위해 필요한 모든 것을 포함.
라이브러리: 특정 기능의 모듈화.
프레임워크는 필요에 따라 많은 라이브러리를 포함할 수 있다.
리액트 컴포넌트: 리액트 앱의 가장 작은 구성 요소.
예) 인스타그램의 컴포넌트로는 포스트, 검색창, 스토리, 프로필 등등이 있다.
Javascript Syntax Extension.
주로 리액트에서 UI를 나타기 위해 사용함.
JSX는 자바스크립트와 HTML 구조를 같이 사용할 수 있다.
const hello = <h1>Hello World!</h1>;
바벨을 통해 jsx를 기존의 UI 렌더링 방식인 React API 방식으로 변환할 수 있다.
Properties.
부모 컴포넌트에서 자녀 컴포넌트로 데이터를 전달하는 방법.
자녀 컴포넌트에서는 값을 변경할 수 없고 부모 컴포넌트에서 state를 변경하므로써 가능하다.
State는 데이터를 포함하는 객체이며, 데이터에 변화가 있을 때 화면이 다시 렌더링 된다.
State는 컴포넌트 내에서 관리된다.
자녀 컴포넌트로 데이터를 보내는 props와 달리 state는 해당 컴포넌트 내부에서 데이터를 넘겨줄 때 사용되며 값의 변경이 가능하다.
State 관리를 도와주는 라이브러리.
리덕스 데이터 흐름은 일방향이다. action -> reducer -> redux store.
Action: 자바스크립트 객체. 어떤 작업을 수행하는지 유형을 지정하는 type 속성이 있으며 payload 속성을 통해 일부 데이터를 저장소에 보낼 수 있다.
Reducer: state의 변경 사항을 결정하고 변경된 state를 반환하는 함수.
Redux store: action을 통해 저장소의 데이터 state을 변경할 수 있다.
Provider 컴포넌트는 하위 컴포넌트들에서 store에 접근하게 할 수 있는 컴포넌트이다.
보통 앱의 최상위 수준에서 이 컴포넌트를 렌더링한다.
Provider로 둘러쌓인 곳에서 store에 접근하는 방법.
useSelector: 값을 가져오는 훅
useDispatch: action을 보내는 훅
리덕스의 데이터 흐름에서 reducer에 도달하기 전에 위치하는 중간자이다.
주로 로깅, 충돌 보고, 비동기 API와의 통신 등에 사용된다.
리덕스를 사용하는 앱에서 비동기 작업을 처리할 때 주로 사용된다.