브라우저는HTML 문서를 파싱하는 과정에서 DOM이라는 트리구조 형태의 객체를 생성하게 됩니다. 트리 구조란,자료구조의 일종으로여러개의 노드로 구성되어 있으며하나의 부모가 여러개의 자식 노드를 가지게 되는 형태를 이야기합니다.
DOM Method
document.getElementById() ⇒ Element Node의 id 속성을 체크해서 해당하는 Element를 참조해온다.
document.getElementByClass() ⇒ Element Node의 class 속성을 체크해서 해당하는 Element를 참조해온다.
document.querySelector() ⇒ 소괄호 안에 입력한 값에 해당하는 Element를 참조해온다. id(”#”)를 입력하는 경우 id를 기반으로, class(”.”)를 입력하는 경우 class를 기반으로 참조
document.querySelectorAll() ⇒ 소괄호 안에 입력한 값에 해당하는 Element를 참조해온다. querySelector와 다르게 배열 형태로 모든 요소를 참조해온다.
document.createElement() ⇒ 새로운 Node를 생성합니다. Node의 형태는 생성되지만 DOM에 직접 추가해주는 과정을 거치치 않으면 DOM에 속하지 않습니다.
document.appendChild() ⇒ Element Node를 현재 DOM에 추가합니다. 이때의 document는 다른 Element가 될 수도 있습니다.
appendChild
addEventListener
스코프
전역 스코프, 지역 스코프
파란색 박스 : 전역 스코프
노란색 박스 : 지역 스코프
전역스코프 > 지역스코프
함수 스코프
함수 레벨 스코프란, 함수를 실행할 때 생겨나는 지역 스코프입니다.
위의 예시가 바로 함수 스코프에 의해 생성된 지역 스코프입니다.
함수 레벨 스코프는 함수를 실행할 때 생성되는, 함수를 기준으로 하는 스코프
블록 스코프
블록 레벨 스코프는 코드 블록에 의해서 생성되는 스코프입니다. if문, for문, while문 등 중괄호를 사용해서 코드 블록을 작성하는 환경에서 생성이 되죠.
자바스크립트는 변수를 참조하는 코드를 만나게 됐을 때, 먼저 해당하는 블록 스코프 내에서 변수를 참조하고자 시도합니다. 이때 탐색한 블록 스코프 내에 해당 변수가 존재하지 않는 경우, 상위 스코프로 올라가 다시 탐색을 진행하게 되는데요. 이러한 과정을 스코프 체이닝이라 부릅니다. 그래서 if문에 의해서 생성된 블록 스코프 내에 a라는 변수가 없었음에도 불구하고 에러가 발생하지 않았던거죠.
호이스팅
호이스팅이란, 함수, 변수의 선언이 마치 위로 끌어올려진 것처럼 동작하는 것을 이야기합니다.
clearInterval() 함수는 setInterval() 함수를 통해 생성된 interval을 종료해주는 함수입니다. setInterval 함수는 실행될 때마다 고유의 id 값을 반환합니다. 해당 아이디를 체크해서 clearInterval() 함수를 실행할 때, 그 아이디를 소괄호 안에 넣고 실행해주면 반복 실행하던 interval이 종료됩니다.
자바스크립트의함수, 변수는 정의되어 있는영역 안에서만 존재하게 됩니다. 그렇기 때문에 함수 안에서 선언된 변수는그 밖에서 참조될 수가 없습니다.
위 사진의 confined 변수는박스로 감싸진 해당 영역 내부에 속해 있기 때문에 박스 바깥에서 confined 변수를 참조하고 있는console.log()명령어는 해당 변수에 접근이 불가능합니다.
그래서 코드를 실행시키면 위와 같은 에러를 만나게 되죠. 에러 내용을 살펴보면confined라는 변수가 정의되지 않았다고 이야기합니다. confined 변수는함수의 영역 안에서만 존재하기 때문에밖에서는 해당 변수가 존재조차 하지 않는 것이죠. 그래서 우리는 함수 내부에 존재하는 데이터를 return을 통해서 그 밖으로 건네줄 수가 있었습니다.
매개변수
함수는 데이터를밖으로 건네주는 것뿐만 아니라,외부의 데이터를 받아온 후가공, 혹은 로직을 수행하는 것도 가능합니다. 이때, 사용하게 되는 개념이 바로매개변수입니다. 우리가 함수를 정의할 때는 매개변수라고 하는 함수 내부에서 사용할 변수를 선언해 줄 수 있습니다.
one,two는 우리가 paramDefine이라는함수를 정의할 때, 함께 정의되는 매개변수입니다. 우리가 함수 내부에서 변수를 선언했을 때처럼매개변수는 해당 함수 내부에서만 존재하게 됩니다. 그리고 매개변수 또한 하나의 변수이기 때문에 그 안에 담긴 데이터를 참조할 수도 있습니다. 위의 코드를 실행시키면 console.log() 명령어는 두개의 undefined를 출력하게 될겁니다.
전달인자
함수를 정의할 때, 매개변수를 함께 정의해줬다면함수를 호출하는 과정에서 전달인자를 건네줄 수 있습니다.
브라우저의 Web Storage
웹 브라우저에서 어떠한 로직에 활용되는 데이터를 유지시키고자 한다면, 해당 데이터를 저장할 공간이 필요합니다. 웹 브라우저는Web Storage라고 하는 저장소를 제공하는데,seesionStorage와localStorage를 활용할 수 있습니다. 두개의 storage는 공통점을 가지게 됩니다. 먼저 두 storage 모두local 환경에 데이터를 저장한다는 특징을 공통점으로 가집니다. 또 다른 공통점으로는데이터가 key-value 형태로 저장이 됩니다. 마치 객체와 같죠. 이때, key와 value는 모두 문자열 형태로 변환되어 저장이 되어야 합니다. 공통점이 있다면 차이점도 존재를 하겠죠.
sessionStorage
sesstionStorage는 데이터를세션 단위로 저장합니다. 여기서 이야기하는 세션은사용자가 페이지에 접속하는 순간부터 접속이 끊어지는 순간까지를 이야기합니다. 즉, sessionStorage는 해당 페이지와 접속이 끊어지거나 브라우저를 종료하게 되면 해당하는세션 저장소의 데이터를 영구히 삭제해 버립니다.휘발성 메모리인 것이죠.
localStorage
localStorage는 데이터를도메인 단위로 저장이 되며, localStorage에 저장된 데이터는도메인이 같다면 path가 다르더라도 서로 데이터를 공유하게 됩니다. 또한, locaStorage는비휘발성 메모리이기 때문에 저장된 데이터가브라우저, pc를 종료하더라도 그대로 남아있게 되죠. 반영구적인 데이터여서 직접 Storage 데이터를 삭제할 때까지 존재합니다. 이러한 특징 때문에 페이지를 재방문 했을 때도 남아있어야 하는 사용자 개별 설정 등의 데이터를 저장하게 됩니다.
local storage 접근 방법
웹 브라우저는sessionStorage와localStorage를 가집니다. Web Storage는데이터를 저장하는 공간이죠. 그렇다면 데이터를 저장하는 방법과 해당 데이터를 참조하는 방법이 존재할 것입니다. 우리는 JavaScript를 명령어를 사용해서 localStorage에 데이터를 저장하고 참조하는 방법에 대해 알아볼겁니다.
localStorage.setItem()
localStorage는window.localStorage로 접근할 수 있습니다. 그리고 localStorage의 앞에 적혀지는 window는 생략이 가능합니다. localStorage에 접근했다면, 이제 데이터를 저장해야겠죠. 데이터를 저장할 때는 localStorage에내장되어 있는 setItem이라는 메서드를 사용하면 됩니다.
localStorage.setItem()
setItem뒤에 있는 소괄호 안에 저장할 데이터를 넣어주면 됩니다. Web Storage의 데이터는key-value 형태로 저장이 된다고 했었죠? 소괄호 안에 두개의 인자를 넣어주면 되는데,첫번째 인자로 key를,두번째 인자로 value, 저장할 데이터를 담아주면 됩니다.
localStorage.setItem('data-key', 'data-value')
그렇게 하면 형식에 맞춰 key-value 형태로 데이터가 저장되죠.
데이터를 저장했다면, 그 데이터를 활용하기 위해저장된 데이터를 확인하고 참조해올 수 있어야겠죠. 먼저 저장된 localStorage 데이터는 개발자 도구 내에서 직접 확인할 수 있습니다.
❗️ localStorage 확인 경로
개발자 도구 ⇒ Application 탭 ⇒ >Local Storage 토글
해당 위치로 이동해,토글을 열어 보면우리가 저장한 데이터를 확인할 수 있는데요. localStorage는 도메인 단위로 데이터가 저장되고 관리되기 때문에 현재 접속해 있는도메인의 url을 클릭해서 우리가 저장한 데이터를 확인할 수 있습니다.
localStorage.getItem()
localStorage에 저장된 데이터를 JavaScript에서 활용하기 위해서는데이터를 꺼내와야겠죠. 아래의 명령어로localStorage에 존재하는 데이터를 꺼내올 수 있습니다.
localStorage.getItem()
이때, 위의 소괄호 안에는 꺼내오고자 하는 데이터의 key를 적어주시면 됩니다.
localStorage.getItem(’data-key’)
데이터의 올바른 key를 적었다면, 그와 연결된 값을 가져오게 됩니다.
조건문과 Storage 데이터의 조합
localStorage에 저장되어 있는 데이터를 조건문과 결합하면, 사용자가 이전에 어떠한 동작을 수행했는지에 따라다른 분기점을 만들어줄 수 있습니다. 예를 들어 웹 페이지의 타이머를 시작하는 순간 그 내용이 localStorage에 저장되도록 해주는겁니다. 그리고 페이지가 새로 로드될 때, 해당 내용과 관련된 데이터가 lcoalStorage에 저장되어 있는지를 체크해주면 사용자가 이전에 타이머를 시작했었는지 바로 확인이 가능
위와 같은 형태로 사용이 가능하며,row는 행의 템플릿을,columns는 열의 템플릿을 지정합니다.
grid-column & grid-row :grid-column 과 grid-row 는 grid-item에 줄 수 있는 속성입니다.
grid-column: 1 / 4;
grid-row: 2 / 3;
반응형 웹이란?
반응형 웹이란, 다양한 디바이스에서 접속했을 때 기기의 Viewport 규격에 반응하여 레이아웃이 자동으로 변경되는 웹페이지를 뜻합니다.
미디어 쿼리 (@media screen and() {})
미디어 쿼리란 Viewport의 너비에 따라 웹사이트의 스타일 시트를 수정할 수 있게 해주는 CSS의 기능입니다. 이 때, 뷰포트 너비 이외에도 단말기의 종류, 해상도 등을 기준으로 설정할 수 있습니다.
@media screen and (max-width: 500px) {
/* 스크린의 너비가 500px 이하일 경우 적용시킬 스타일 시트를 적습니다. */
}
@media :미디어 쿼리를 사용한다는 의미입니다.
screen :미디어 타입입니다. 이 페이지가 디지털 화면, 즉 screen에 노출되었을 때 중괄호 안에 입력한 스타일 시트를 적용한다는 의미입니다.
max-width:500px : viewport 너비가 500px 이하일 경우 해당 스타일 시트를 적용한다는 의미입니다.
and :screen, max-width 등 여러가지 미디어 쿼리 조건을 연결시켜 줄 수 있습니다. and로 연결한 모든 조건을 만족하는 경우에 해당 스타일 시트를 적용합니다.
breakPoint란?
breakPoint란반응형 웹페이지의 작업 기준이 되는 중단점을 의미합니다. 간단하게 말해서,PC / Tablet / Mobile의 기준이 되는 규격 분기입니다.
가장 일반적으로 사용되는 breakPoint 분기
Mobile0 ~ 767px
Tablet
768px ~ 1023px
PC
1024px ~ 1439px
PC Large
1440px ~
상황에 따라 더 자세하게 나눌 수 있으며, 많이 나눌수록 더 좋은 서비스를 만들 수 있습니다. 그러나 개발 시간과 인건비가 증가하게 되므로 기획 단계에서 예산과 기간을 고려할 수 있습니다.
@media screen and (max-width: 767px) { /* mobile */ }
@media screen and (min-width: 768px) and (max-width:1023px) { /* tablet */ }
@media screen and (min-width: 1024px) and (max-width:1439px) { /* PC */ }
반응형 웹에 자주 쓰이는 속성
max-width / max-height
요소의최대 크기를 지정하는 속성입니다. max-width을 사용하면 가로 규격을, max-height를 사용하면 세로 규격을 한정할 수 있습니다.
max-width : 1240px;
max-height : 100vh;
min-width / min-height
요소의최소 크기를 지정하는 속성입니다. min-width을 사용하면 가로 규격을, min-height를 사용하면 세로 규격을 한정할 수 있습니다.
min-width : 720px;
min-height : 30%;
max()
소괄호 안에 입력된 값 중 제일 높은 값을 속성값으로 출력하는 함수입니다. 소괄호 안에는 여러 개의 값을 콤마로 연결해 입력해줄 수 있습니다.
height : max(320px, 20%)
min()
소괄호 안에 입력된 값 중 제일 낮은 값을 속성값으로 출력하는 함수입니다. 소괄호 안에는 여러 개의 값을 콤마로 연결해 입력해줄 수 있습니다.
width : min(1240px, 100%)
소감
오늘 CSS까지 베이스캠프 2주차가 마무리 되었습니다. 아직 스스로 많은 페이지를 만들어 보지 못하였지만, 페이지를 구상할때 무엇을 우선적으로 생각해야 하는지 생각하게 되는 것 같습니다. 아직은 생각한 그대로 구현이 되지 않지만...포기하지 않고 조금씩 성장할 수 있게 노력하겠습니다.
animation-name : 어떠한 keyframes를 요소에 적용할 것인지 지정합니다.
animation-duration : 애니메이션을 한 번 재생하는데 걸리는 시간을 설정합니다.
animation-direction :애니메이션 재생 방향을 정의합니다. normal : 정방향으로 재생합니다. reverse : 역방향으로 재생합니다. alternate : 정방향으로 재생합니다. (단, 정방향/역방향을 번갈아 재생합니다.) alternate-reverse : 역방향으로 재생합니다. (단, 역방향/정방향을 번갈아 재생합니다.)
ainmation-iteration-count : 애니메이션 재생 횟수를 정의합니다. animation-iteration-count : infinite | 3
animation-timing-function : 애니메이션 재생 패턴을 정의하며, transition-timing-function과 유사합니다. linear :일정한 속도로 변화한다. ease :시작할 때에는 빨라지다 느려진다. ease-in :천천히 시작했다가,속도를 높여 끝난다. ease-out :빠른 속도로 시작했다가,천천히 끝난다. * ease-in-out :천천히 시작했다가,정상속도가 됐다가,빠르게 끝난다.
animation-delay : 애니메이션시작을 얼마나 지연할 지 설정합니다.
3. animation 단축속성
애니메이션 카테고리에 속한 속성들도단축 속성으로 모아서 지정해줄 수 있습니다. 만일순서가 바뀔 경우,오류가 발생 하거나의도와 다른 결과가 도출 될 수 있으니 단축 속성을 사용하실 때는 순서에 유의하시길 바랍니다.
4. 소감
오늘은 transition / transform / animation 을 활용하여 실습을 진행하였습니다. 기존에 표현하지 못했던 생동감있는 효과들을 줄 수 있어 재미있었습니다. 실습 내용을 혼자 진행하면서 생각하는 효과를 적용 할 수 있게 훈련하겠습니다.
전체 선택자<태그 선택자<클래스 선택자< id선택자 (가장 중요한 태그를{ color: red; !important }를 사용해서1순위로 선언 할 수 있음
3)선언 순서
Cascading모양처럼 가장 아래에(나중에)선언된 것이 우선순위로 선택됩니다.
2.배경
1) background-color 2) background-image : url(“이미지경로”) -요소의 배경 이미지를 한 개,혹은 여러 개 지정하며,그라데이션도 지정이 가능합니다. - background-image : linear-gradient(방향(to left),시작 색상,종료 색상)
-이미지와 그라데이션 모두 “, “를 사용하여 중복 적용 가능합니다.
3) background-position : top right / 50px 150px / center -요소의 배경 이미지의 위치를 지정한다.
4) background-repeat : repeat / no-repeat -요소의 배경 이미지의 반복 여부,반복 방향을 지정합니다.
5) background-size :auto (기본값) / cover / contain / 200px 160px -요소의 배경 이미지의 크기를 지정합니다.
6) background-attachment :scroll(기본값) / fixed / local -배경 이미지의 스크롤 여부를 지정합니다.
7) background단축 속성
8. object-fit :fill (기본값) / cover / contain / none -<img>나<video>등 대체 요소의 내용이 지정된 너비와 높이에 맞춰지는 방식을 지정합니다.
9. object-position : center top; / 100px 50px; / -<img>나<video>등 대체 요소의 콘텐츠 정렬 방식을 지정합니다.
3.색상
CSS색상 표기 방법3가지 1. color : red; 2. color :#FFFFFF; 3. rgb(0,0,0) / rgba(0,0,0,0) rgb / rgba a ->투명도(0~1소수점)
HTML요소가 배치되는 방식을 결정하는 속성 top / left / bottom / right방향 기준으로 요소의 좌표값을 변경한다.
position의 속성값
포지션이라는 속성에는 총 다섯가지 속성값을 줄 수 있습니다.
static(기본값) : 요소를 문서상 원래 있어야 하는 위치에 배치한다. (top /left /bottom / right 적용 불가)
relative :원래 있던 자리를 기준으로 요소의 위치를 조정 할 수 있다.
absolute : 절대 좌표를 기준으로 요소의 위치를 조정할 수 있다. (절대 좌표는relative가 적용된 부모 요소이며, relative적용된 부모가 없을 경우body전체를 기준으로 합니다.)
fixed :스크롤과 무관하게 뷰포트를 기준으로 요소의 위치를 설정할 수 있습니다.
sticky : 요소의 원래 위치에 있다가 스크롤이 내려가면 지정한 좌표에 고정됩니다. (기준 : 부모요소의 좌표)
z-index:여러개의 요소가 겹쳐져 있을 때,무엇이 앞으로 나올지 결정하는 속성 (1~9990)
7. transition
CSS속성 변화의 사이를 부드럽게 바꿔주는 역할을 합니다.
transition-property :어떠한 속성에transition을 적용할 것인지 지정한다.
transition-duration: transition에 걸리는 시간을 지정한다.
transition-timing-function : linear :일정한 속도로 변화한다. ease :시작할 때에는 빨라지다 느려진다. ease-in :천천히 시작했다가,속도를 높여 끝난다. ease-out :빠른 속도로 시작했다가,천천히 끝난다. * ease-in-out :천천히 시작했다가,정상속도가 됐다가,빠르게 끝난다.
transition-delay : transition요청을 받은 후,실제로 실행되기까지 기다려야하는 시간의 양을 지정한다.
A ~ B {
property : value
} A와 같은 부모를 가지고 있는 형제 요소들 중 B만을 선택할 수 있습니다.
.text ~ span {
background : red
}
2. flex 레이아웃
1) flex-direction
2) justify-content
3) align-items
4) flex-wrap : flex-item이 여러개일 때, item들의 줄바꿈을 허용할 것인지 말 것 인지 결정 (기본값 : nowrap)
5) align-content
6) flex-flow (flex-direction과 flex-wrap의 단축 속성)
7) flex-item ; flex가 적용된 item들의 순서나 사이즈를 조절 할 수 있습니다.
flex-item 속성order : item의 순서를 지정합니다.flex-basis : item의 기본사이즈를 지정합니다.flex-shrink : 설정된 숫자값에 따라 flex-container 요소 내부에서 flex-item요소의 크기가 축소됩니다.flex-grow : flex-item 요소가, flex-container 요소 내부에서 할당 가능한 공간의 정도를 선언합니다.위의 속성 이외에도 flex-item에는 여러가지의 속성이 있습니다.
3. 웹 폰트 사용 방법
4. 폰트 관련 속성 _ 20강
1. font-size
2. font-weight
3. text-decoration
4. color
5. line-height : 텍스트의 행간을 설정
6. letter-spacing : 텍스트의 자간을 설정합니다.
7. word-spacing : 텍스트의 단어 간 간격을 지정합니다.
8. text-align : 블록요소나 표안에서 텍스트의 가로 정렬방식을 지정합니다.
9. vertical-align : 인라인 요소나 표안에서 텍스트의 세로 정렬 방식을 지정합니다.
10. text-indent : 텍스트의 들여쓰기를 설정합니다.
11. text-transform: 영문 텍스트의 대소문자를 바꿀 수 있습니다.
12. word-break : 텍스트가 콘텐츠 박스 영역 밖으로 넘쳤을 때, 어떻게 줄을 바꿀지 설정합니다.
13. overflow-wrap : 단어가 콘텐츠 박스 영역 밖으로 넘쳤을때, 줄바꿈 여부를 설정합니다.
14. overflow : 콘텐츠가 커서 요소 안에서 내용을 다 보여주기 힘들 때 어떤 방식으로 보여줄 지 설정합니다.
15. text-overflow : 줄바꿈을 하지 않을 때, 요소 밖으로 넘치는 text를 어떻게 표기 할 것인지 설정합니다.
5. 단위
1.절대 단위
외부 요인의 영향을 받지 않고 절대적인 값을 지니는 단위 (px, pt, cm, m, ms 등)
px = 화소 ( 디지털 화면은 수많은 작은 네모들로 구성이 되어있으며, 이 네모 한 칸이 1px입니다. )
2. 상대 단위
외부 요인의 영향을 받아 유동적인 값을 지니는 단위 (%, rem, em 등)
1) %
부모 요소의 해당 속성 값에 비례하여 지정한 비율의 값을 적용합니다.
2) em
스타일 지정 요소의 font-size 속성값에 비례하여 값을 결정합니다. (부모가 아닌 본인 font-size 속성값에 비례)
font-size :글자 사이즈 font-weight :글자 두께 font-style :글자 기울임 text-decoration :글자 꾸밈(밑줄,취소선 등) color (글자 색)
css 레이아웃의 흐름
float -> flex -> grid
* Float는 *반응형 웹에 적합하지 않기 때문에 거의 사용하지 않음 ❗️반응형 웹이란? 모바일, 태블릿, 데스크탑 PC 등접속하는 기기의 너비에 맞추어레이아웃이 변하는 웹페이지 flex와 grid를 상황에 따라 혼용하여 사용
float 란 ?
HTML 요소를 일반적인 흐름(normal flow)으로부터 벗어나서 특정한 컨테이너의 좌측 혹은 우측을 감싸는 형태로 강제 배치할 수 있도록 도와주는 속성입니다.
float: none (기본값)
float: left
float: right
clear
float가 적용된 요소에 추가로 줄 수 있는 속성으로, float의 영향력을 해당 요소에 한해 해제합니다.
clear: none (기본값)
clear: left
clear: right
clear: both
clearfix
<div class=clearfix></div> 로 float 속성 정리를 위한 태그 (정리를 원하는 태그의 형제 태그로 넣어줘야합니다.)
소감
CSS를 본격적으로 시작하였습니다. 선택자를 활용하여 모든 태그에 class를 지정하지 않아도 원하는 태그에 CSS를 적용 할 수 있었습니다. 또한 float에 대한 이해와 flex와 차이점에 대해서 학습하였습니다. 강의에서 말씀하신 것처럼 flex가 확실히 사용하기 간편한 것 같습니다.
함수:원하는 코드를 하나의 기능으로 구현 (선언식,표현식, *화살표 함수) 내장 함수:자바스크립트에서 기본적으로 제공하는 함수 (시간 지연 함수/시간 반복 함수) -사용 빈도가 높음 이벤트 감지 학습 내용 -일정 단어 숫자 이상이되면 다음으로 포커스 -일정 input text가 모두 입력된 후 버튼 활성화
git / github
git : 버전관리 시스템 1. 누가, 언제, 어떤 파일을 저장하였는가?? 2. 특정 시점으로 소스코드 복원이 가능한가?? * 여러 사람이 데이터를 관리할때 생성 및 수정, 저장을 확인 할 수 있게 하는 분산 버전관리 시스템 github : git을 온라인으로 관리할 수 있는 클라우드
소감
한 주를 마무리하며 Final 과제를 진행했지만 아직 부족한 점이 있는 것 같습니다. 남은 2주 동안 HTML / CSS / JavaScript의 기초를 탄탄하게 채울 수 있게 더욱 열심히 공부하겠습니다.