React&Redux로 시작하는 웹프로그래밍_1주차
HTML/CSS/JS로 만드는 스타벅스 웹사이트
1_개요
- HTML,CSS 그리고 JS
- HTML = 구조, CSS = 스타일, JS = 동적부분 담당
- HTML과 CSS는 '레이아웃 중심' 사고 // JS는 '데이터 중심' 사고
- 웹앱의 동작원리
- 웹 표준과 브라우저
- 웹표준 기술(WEB STANDARD) = W3C
- 크로스 브라우징 (CROSS BROWSING) : 다양한 브라우저에서 사용자들에게 동일한 화면과 동작을 줄 수 있도록 제작하는 기술, 방법. 다양한 브라우저들의 다른 웹표준 해석으로 인한 문제점들을 '크로스 브라우징 이슈'라고 함.
- 브라우저의 구조
- 창 > 탭, 주소창, 뷰포트(VIEWPORT)
- 렌더링(RENDERING)이란, 브라우저의 뷰포트에 웹사이트를 출력하는 동작을 뜻함
- 웹에서 사용하는 이미지
- PIXEL / VECTOR
- JPG, GIF, WEBP (하위 호환성을 체크할 것)
- Material-Design (벡터이미지): 고품질 디지털 경험을 구축할 수 있도록 구글에서 만든 디자인 시스템
- 특수 기호
- 오픈소스 라이선스
- 오픈소스도 라이센스(저작권) 체크하기
- 개인적/상업적 이용가능한 라이센스
- apache license
- MIT license
- BSD license
- Beer ware
2_VScode
- 설치 및 실행
- Visual Studio Code 설치하기 (IDE 아님!)
- 파일 생성과 삭제
- 프로젝트 (폴더) > 파일
- 폴더(프로젝트) 만들기 : 내컴 원하는 위치에 폴더 생성하기
- 파일명은 소문자로 작성하기
- 한글화
- 정리된 코드 만들기(Beautify)
- 태그 이름을 한 번에 변경(Auto Rename Tag
- 브라우저에 출력(Live Server)
- 단축키 & 공백2로 만들기
- 공백 2로 만들기
- 프로젝트 관리
- 프로젝트
- 루트 파일 - index.html
- css 폴더 - main.css
- js 폴더 - main.js
- images 폴더 - logo.png
3_무작정시작하기
- Doctype(DTD)
- <!DOCTYPE html> : 문서의 HTML 버전을 지정하는 테그
- HTML, HEAD, BODY
- <html> : 문서의 전체 범위
- <head> : 문서의 정보를 나타내는 범위
- 웹페이지에 보이지않는 정보(제목, 설명, 파일위치, css 등..)의 테그가 가 담김
- <body> : 문서의 구조를 나타내는 범위
- 웹페이지에 보여지는 구조(헤더, 푸터, 내비, 메뉴, 버튼, 이미지 등..) 를 나타내는 테그가 담김
- CSS,JS 연결하기
- css 연결 코드 : <link rel="stylesheet" href="./main.css">
- js 연결 코드 : <script src="./main.js"></script>
- js 연결확인하기: 크롬에서 F12 (개발자 도구)누른후 console에서 확인하기
- 정보를 의미하는 태그 살펴보기 (<head>안의 태그)
- <title> : HTML문서의 제목 (웹 브라우저 탭에 표시)
- <link> : 외부 문서를 연결할때 사용 (대부분 css파일)
- <style> : html문서에 css를 직접 작성하는 경우
- <script> : 외부에 있는 js파일을 가져올때 또는 js를 html 문서에 직접 작성하는 경우
- <meta> : html문서의 여러 메타 정보(제작자, 키워드 등)를 검색엔진이나 브라우저에 제공
- <meta charset="UTP-8" /> 문자인코딩 방식
- <meta name="viewport" content=".."> viewport는 모바일에만 해당.
- 화면에 이미지 출력하기
- <img src="주소" alt="대체 문자">
- 상태 경로와 절대 경로
- 상대경로
- 주변 ./ : 생략가능
- 작성하는 파일의 같은 단의 파일들을 갖고올때 사용
- 상위 ../ : 상위폴더
- 작성하는 파일의 상위 단의 파일들을 갖고올때 사용
- 절대경로
- http (https) : 원격
- / (//) : 최상위 경로(root)
- 개발서버 (라이브 서버 플러그인)
- 페이지를 나누고 연결(링크)하기
- 모든 파일 공백 크기 설정
- VS code 환경설정 변경하기
- Setting
- 개발자 도구 사용하기
- Codepen.io
- 브라우저 스타일 초기화
- 브라우저마다 스타일이 다르기에 완전 초기화 하여 사용하는것을 추천
- Codepen.io에서 초기화 하기
- reset.css cdn을 이용하기
- jsdelivr.com에서 제공하는 링크를 활용하는것을 추천
- reset.css 는 원본, reset.min.css 용량압축버전을 사용 권장
- Copy HTML하여 index.html에 넣어주는데, 이때 내가 사용하는 main.css 상단에 넣어주어야한다.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reset-css@5.0.1/reset.min.css">
<link rel="stylesheet" href="main.css">
- Emmet
- 코드를 자동완성해주는 기능
- 사용법: 태그명 + tab
- Emmet은 CSS선택자를 활용해 사용하는 기능
- *: 곱하기
- {} : 내용 삽입
- $ : 순서대로 숫자를 입력
4_HTML
- 기본 문법
- 부모와 자식 관계의 이해
- <태그><태그><태그>내용</태그></태그></태그>
- <상위요소>,<부모요소>,<자식요소>
- 빈 태그
- HTML5 : <태그 /> 또는 <태그> 모두 허용
- 필수 속성과 값을 모두 입력해주어야 요소로써의 역할을 함.
- 글자와 상자
- 인라인 (inline) : 글자를 만들기 위한 요소들,
- 특징1: 요소가 수평(왼쪽에서 오른쪽)으로 쌓이고 요소를 엔터쳐 한줄 내리면 띄어쓰기가 사이에 삽입됨, 안내리면 붙어나옴!
- 특징2: 자신이 포함한 콘텐츠(글자) 크기만큼 자동으로 줄어드는 성질이 있음
- 특징3: 글자는 위/아래 여백사용불가, 좌/우 여백은 가능
- 특징4: 인라인요소 안에 블록요소는 넣을 수 없다 (예외 있긴 함)
- <Span>대표적 인라인 요소, 콘텐츠 영역을 설정하는 용도 (아무것도 안보임)
- 블록 (block)요소 : 상자(레이아웃)를 만들기 위한 요소들
- 특징1: 요소가 수직(위에서 아래로) 쌓임
- 특징2: 부모요소의 크기만큼 자동으로 늘어남 (가로너비만!)
- 특징3: 여백은 모두 추가 가능
- 특징4: 블록요소 안에는 블록요소, 인라인요소 모두 넣을 수 있다.
- <div> 대표적 블록 요소, 콘텐츠 영역을 구분하는 용도 (아무것도 보이지 않음)
- 핵심 요소(element) 정리
- <div>: 블록요소, (division) 특별한 의미가 없고 구분(영역)을 위한 요소이다.
- <h1~6>: 블록요소, (heading) 제목(목차)를 의미하는 요소, 숫자가 작을수록 더 중요한 제목을 정의
- <p>: 블록요소, (paragraph) 문장을 의미하는 요소 (* div로 대신해도 됨)
- <img>: (예외: 문자가아님)인라인요소, (image) 이미지를 삽입하는 요소
- <ul><li>: 블록요소, (unordered list, list item), 순서가 필요없는 목록의 집합과 목록내의 항목들
- <a> : 인라인요소, (Anchor), 링크를 지정하는 요소
- <span>: 인라인요소, 특별한 의미가 없는 구분(영역)을 위한 요소
- <br>: 인라인요소, (Break), 줄바꿈 태그
- <input>inline-block요소, 사용자에게 데이터를 입력받는 요소 <input type="text" value="미리작성">
<input type="text" placeholder="힌트">
<input type="text/checkbox/radio" disabled>
<label>: 인라인요소, 라벨 가능 요소(input)의 제목
- <table>: 테이블요소(블록요소의 한부분), 행(Row)과 열(column)의 집합
- 주석
- 전역 속성
- 요소는 자신이 사용할수 있는 속성이 지정되어 있으나, 전역 속성은 전체 영역에서 모두 사용할 수 있는 속성이다. (예: title, style, .class, #id, data-이름)
5_CSS 개요
- 기본 문법, 주석
- 선언 방식
- 내장 방식
- html파일에서 <head>안에 <style></style>의 내용으로 스타일을 작성하는 방식
- 인라인 방식
- 링크 방식
- @import 방식
- html파일에 <link>로 main.css연결 후 main.css에 또다른 외부에 있는 box.css파일을 가져와서 연결하는 방법, 단점이자 장점은 모두 로딩된 이후 디스플레이가됨 (직렬연결)
@import url("./box.css");
- 많이 사용되지는 않음
- 선택자_기본
- [*] 전체 선택자 (Universal Selector)
- [태그] 태그 선택자 (Type selector)
- 태그이름에 해당하는 요소를 선택 (예: li {..} )
- [.] 클래스 선택자 (Class Selector)
- HTML class속성 값에 해당하는 요소 선택 (예: .orange {..} )
- 중복이 가능함
- [#] 아이디 선택자 (ID Selector)
- HTML id속성의 값에 해당하는 요소 선택 (예: #orange {..} )
- id속성은 전역속성임
- 선택자_복합
- 해석을 뒤에서부터 해야 찾기 편함!
- 일치 선택자 (Basic Combinator)
- 선택자 2개를 동시에 만족하는 요소 선택 (예: span.orange {..} - 스펜테그에 오렌지 클래스 갖고있는 모든 요소 선택)
- [>] 자식 선택자 (Child Combinator)
- 선택자의 자식 요소 선택 (예: ul > .orange {..} - 클래스가 오렌지를 갖고있는 요소인데, ul테그의 자식인 요소 )
- [띄어쓰기] 하위/후손 선택자 (Descendant combinator)
- 선택자의 하위 요소 선택 (예: div .orange {..} - div의 후손중 오렌지 클래스를 갖고 있는 모든 요소 )
- [+] 인접 형제 선택자 (Adjacent sibling combinator)
- 선택자의 다음 형제 요소 하나를 선택 (예: .orange + li {..} - 오렌지라는 클래스를 갖고 있는 li의 다음 li태그 )
- 선택자_가상 클래스 (Pseudo-classes)
- 간단한 동작을 주는 가상 클래스 (기본적인 움직임은 js로 주는게 맞음)와 일반 가상 클래스가 있음, 단독으로 사용할 수 는 없고 복합 선택자와 함께 쓰임
- [동작] :hover
- 선택자 요소에 마우스 커서가 올라가 있는 동안 선택
- [동작] :active
- 선택자 요소에 마우스를 클릭하고 있는 동안 선택
- [동작] :focus
- 선택자 요소가 포커스(활성화)되면 선택
- focus를 적용할 수 있는 요소는 HTML대화형 콘텐츠 (input, a, button, label, select등..)가 해당됨.
- tabindex 속성을 통해 focus가 될수 있는 요소를 만들수도 있음 (예: <div class="box" tabindex-"-1"></div> *값은 -1을 넣는다, 한페이지에서 한 요소만 사용 가능
- :first-child
- :last-child
- :nth-child(n)
- 선택자가 형제 요소중 (n)째라면 선택 (내가 선택할 수 있음)
- 예: .coffee *:nth-child(2){..}
- *:nth-child(2n){..} (n은 0부터 시작 zero-based numbering! 즉 2의 배수를 선택해라. 2n = 2,4,6,8..)
- *:nth-child(2n+1) 홀수를 선택해라, 2n+1 = 1,3,5,7...
- *:nth-child(n+2) 2번째 요소부터 선택하라, n+2 = 2,3,4,5...
- :not(ABC) 부정 선택자 (Negation) NOT
- .coffee *:not(span) (커피 클래스안에 span이 아닌 요소 모두 선택)
- 선택자_가상요소 (Pseudo-Elements)
- ::before (inline요소, content라는 속성은 필수 값)
- 선택자 요소의 내부 앞에 내용(content)이 삽입되어 화면에 출력됨
- 예: .box::before { content: "앞!"; }
- ::after (inline요소, content라는 속성은 필수 값)
- 선택자 요소의 내부 뒤에 내용(content)이 삽입되어 화면에 출력됨
- 예: .box::after { content: "뒤!"; }
- 선택자_속성 (Attribute)
- 속성을 포함한 요소 선택, 특이한 속성에 사용하는게 유용
- [속성]{..} 으로 사용함 ( 예: [disabled] {..} )
- [속성="값"] (예: [type="password"]{..} )
- 스타일 상속
- 스타일도 하위 요소로 상속이 된다.
- 상속되는 CSS속성들
- 대부분의 글자/문자 관련 속성들이 속성된다. (예: font-style, font-weight, font-size, line-height, font-family, color, text-align..등..)
- 강제 상속
- 자동으로 상속되지는 않지만, 강제적으로 상속될 수 있도록 함
- height: inherit; (부모 값을 상속받아 사용해라)
- 선택자 우선순위(중요)
- 같은 요소가 여러번 선언했을때, 어떤 선언의 CSS속성을 우선적으로 적용되는지에 대한 순서를 정하는 규칙이 있음
- 점수가 높은 선언이 우선되고 점수가 같으면 가작 마지막에 해석된 선언이 우선됨. (명시도의 중요도 순의, 선언순서라고도 함)
- 점수가 높은 순서: !important(무한값) > 인라인선언(html)(1000점) > id선택자(100점) > class선택자/가상클래스선택자(10점) > 태그 선택자/가상요소선택자(1점) > 전체선택자(0점) > body태그 선택자(상속되는 구조이지만 점수가 없다)
- 예: .list li.item {..} (21점, class선택자 2개, 태그 선택자 1개)
- 예: :not(.box){..} (10점, class선택자1개, 부정선택자의 점수는 계산되지 않음)
- !important는 극히 일부분을 제외하고 사용하지 않음.
- 인라인방식으로 스타일을 명시하는것도 제외할것 (수정이 안됨)
#패스트캠퍼스 #내일배움카드 #국비지원 #K디지털기초역량훈련 #바이트디그리 #react강의