코드스테이츠 자체적으로 Selector퀴즈를 해보았다.
어느정도는 눈대중으로 알아볼수 있었지만
구조 가상 클래스는 좀 알아보기 어려웠다.
자식 셀렉터와 후손 셀렉터의 차이를 잘 알고 있어야 한다.
자식 셀렉터 : 특정 태그 바로 아래에 위치한 태그
header태그 안에 div 태그 안에 p태그는 가르키지 않는다.
후손 셀렉터 : 특정 태그 안에 위치한 태그를 가르킨다.
header태그 안에 div태그 안에 p태그도 가르킨다.
css를 활용하기 전에 html의 기본 스타일을 reset시켜야 한다.
example : body태그 같은 경우에는 약간의 여백이 있다.
초기화를 위한 다양한 라이브러리도 있지만 간단하게 몇줄의 코드만을 적용시키면 기본 스타일링을 제거할수가 있다.
flex박스는 부모요소에 선언하는 것이다.
- 자식요소에는 flex라는 속성에 값을 저장한다.
기본값은 flex : 0 1 auto이다.
0 : 팽창 지수(grow)
1 : 수축 지수(shrink)
auto : 기본크기(basis)
grow, shrink, basis는 부모요소가 아니라 자식 요소에서 선언하는 것이다.
grow값은 비율이다.
이것에 추가한다면 box의 grow값은 0, target의 grow값은 1이므로
1+0+0이기 떄문에 전체값은 1이고 그중 target이 1을 가지고 있다.
계산대로라면 target이 모든 공간을 차지해야 하지만 다른 .box들이 있기 떄문에 가질수 있는 최대를 가지게 되는 것이다.
반대로 shrink는 grow와 반대되는 역할을 한다.
보통 flex: grow 1 auto로 사용하며 grow만을 수정한다.
참고 사항
flex-direction = row : 기본값 -> main axis가 가로인 상태이다.
justify-content에는 다양한 옵션이 있다.
수직 정렬 : align-items는 적용하는 방법을 아직 모르겠다;;
아직은 flex가 익숙하지가 않다.
역동 적인 웹을 만들고자 한다면 HTML문서에 작성자, 내용 등을 변수로 관리하여 값을 동적으로 담아야 한다.
- let tweet = {user : '김코딩', content: 'sns는 인생의...'}
js 어딘가에는 tweet내용이 담긴 객채가 존재 할 것이다.
하지만 아직 div태그 내에 변수의 값을 js로 전달하는 법을 모르기 떄문에 HTML에 하나씩 입력을 해주어야 하는데 이것을 하드 코딩 이라고 부른다.
====================================================================
이번 챕터를 통해서 HTML과 JS를 연결하는 방법을 알아본다.
script가 작동을 하게 되면 html읽는것을 그만두고 script요소를 먼저 실행한다.
script요소는 등장과 함께 실행된다.
- 그러기 떄문에 head 또는 body의 맨 끝부분 에 script를 선언해야 한다.
이러한 것을 보면 script는 등장과 함께 실행 된다는것을 알수가 있다.
DOM 구조를 주회할 떄에는 주로 console.dir를 활용한다.
이러한 요인을 보면 DOM의 구조는 트리구조로 이루어져 있다고 볼수가 있다.
CRUD : create, read, update, delete
편의를 위해서 생성할 div를 변수에 넣을 것이다.
const a = document.createElement('div')
이후 만든 div를 html에 넣어주면 된다.
document.body.append(a)
시각적으로는 확인할수가 없지만 개발자 도구를 통해서 html 파일을 확인하면 빈 div태그가 생겨있는것을 볼수가 있다.
평범한 js 에서는 자료형인 변수를 보통 변수의 이름으로 조회를 하지만
Dom은 querySelector의 첫번쨰 인자로 셀렉터를 전달하여 확인한다.
이 방법 또한 변수에 담아서 사용한다.
const b = document.querySelector('#container')
- 이 방법은 html 엘리먼트중 첫 번쨰 엘리먼트만을 가져온다.
const c = document.querySelectorALL('#container')
- 이 방법은 HTML 엘리먼트중 모든 엘리먼트를 가져온다.
- 이렇게 조회한 엘리먼트 들은 배열처럼 for문을 사용해서 사용할수가 있다.
같은 기능을 하는 메소드도 있는데
document.getElementById('.tweet')
처럼 사용을 할수도 있고 역할은 앞서 만든 2개와 동일하다.
get은 역할만 동일한 옛날 방식이다. 알고만 있자
b.append(a)
이러한 방법을 통해서 앞서 만든 div를 해당 셀렉터로 들어갈수가 있다.
이렇게 끝낸다면 id=container이라는 태그에 빈 div가 들어가게 되는데
이렇게 새롭게 추가한 div에는 css가 적용하지는 않는다.
이곳에서는 class or id와 내용을 추가하는 과정을 적을 것이다.
1장에서 봤듯이 html에서 값을 빼와서 js로 바꾸는 방법은 이미 학습을 해봤다.
example -> document.querySelecor.textContent = "내용";
이를 이용하면 된다.
앞서 한 작업을 하나도 안했다고 가정을 하고 순서대로 코드를 적어보면
const one = document.createElement('div')
one.textContent = "내용" -> 내용을 입력
one.classList.add('tweet') -> class를 부여
const two = document.querySelector('.container')
two.append(one) -> 자식태그로 지정
간단하게 remove를 사용하면 된다.
const a = document.createElement('div')
a.remove()
만약 여러개의 엘리먼트를 지우고자 한다면
document.querySelector('#container').innerHTML = ''
- id가 container인 엘리먼트 아래의 모든 엘리먼트를 지운다.
이 방법은 보안에서 몇가지 문제를 가지고 있기 떄문에 보통은 removeChild를 사용한다.
- 하지만 이 방법은 반드시 for문 또는 while문을 사용 해야 한다.
====================================================================
추가적인 학습을 할 필요가 있다.
-> 일단 기본적인 것들을 정리한뒤 내일 추가적인 사항을 추가로 정리해 보겠다.
spring에서는 validation과 같은 역할
매우 간단하게만 구현을 한것이지 추가로 작업은 다양하게 가능하다.
====================================================================
이렇게 별다른 점이 없는 버튼이 구현되었다고 하자.
그후 누르는 버튼마다 conlog에 버튼의 textcontent를 가져 온다고 하면
기본 코드는
button을 모두 가져오고 하나가 아니기 떄문에 각각 인덱스를 직접 넣어주어 지정해 준다.
이후 event객체중 click를 이용하여 button을 클릭하면 이벤트 함수가 작동되게 한다.
그러면 누르는 버튼에 적힌 textContent를 console에 출력을 한다.
이 부분을 채워 넣는라고 많이 헤맸다.
이떄 들어갈 코드는 event.target.textContent를 넣어주면 된다.
onsubmit : "양식 제출 이벤트 전에 발동한다."
form태그 내에서 input type="submit"으로 작동하는 html을 처리하는 이벤트 이다.
- form 태그에서 input이 클릭되었을떄 action으로 작동하기 전에 submit이벤트가 먼저 작동을 하게 된다.
onchange
작성한 js에서 변화를 감지하는 이벤트 이다.
onmouseover
onkeyup
event.preventDefault