[Git]
Git에서 알아야 할 것
- repository : 코드를 저장하는 폴더 → Git은 repository를 추적
- commit : 깃 파일의 보관함으로 무엇이 변경되는지 기록
- branch : 마스터의 복사판으로 새로운 것을 테스트 해보고 싶을 때 사용
Git VS GitHub
· Git : 코드 변경사항을 기록하는 시스템
· GitHub : 깃을 업로드하고 관리하는 플랫폼
→ bitbucket : 사적인 깃 관리가 무료로 가능함
※ GitHub Desktop
[HTML]
· mark-up 언어라는 것이 중요! //단순 텍스트 언어
· 브라우저에게 각각이 무엇을 뜻하는지 알려주기 위해 작성하는 것 //tag로 작성할 것임
· 태그 <태그명 속성 = "값">내용</태그명>
※ 웹서버들이 index 파일을 제일 먼저 찾도록 설계되어있다. 디폴트 값으로 index파일을 생성한다.
<!DOCTYPE html>
· self-contained 태그로 혼자 스스로 열고 닫는 태그이다.
<head>
· 유저에게 보이지 않는 태그로 브라우저에게 내 웹사이트에 관한 필요한 정보를 제공한다.
<meta>
· 추가정보에 관한 태그
ex)<meta charset="utf-8"> : UTF-8 방식의 encoding으로 해당 문서를 작성할 것
<meta name="description" content="welcome my kakao clone"> : 구글에서 검색시 설명
semantic / non-semantic 태그
· semantic tag : 의미가 있는 태그
· non-semantic tag : 의미가 없는 태그
id / class
· id : 고유하고, 1개만 생성 가능
· class : 반복해서 여러번 사용 가능
[CSS]
- 어떻게 생겨야 하는지 알려주는 언어
1. CSS 작성법
/* css == selector / property */
h1 {
property-name : value;
}
.class {
property-name : value;
}
#id {
property-name : value;
}
2. 적용 방식
1)inline 방식
- 태그 사이에 style태그를 집어넣는 방식 → 추천하지 않는 방식
2)external 방식
- 새로운 css파일을 만들고, 작성하는 방식
- <link href="style.css" rel="stylesheet">과 같이 html문서 head에 링크를 시켜놓기만 하면 된다. → 효율적
3. BOX
- CSS를 배울 때 가장 먼저 이해해야 할 것은 많은 element들이 box라는 사실이다. → F12번으로 확인 가능
1)contents
2)margin
3)border
4)padding
- .box>.inside-box
<div class="box">
<div class="inside-box"></div>
</div>
4. 속성
1) display
· block : element가 크기와 상관없이 그 옆에 다른 element가 위치하는 것을 허용하지 않는 것
· inline-block : 박스의 폭, 높이가 존재하고 그 옆에 서로서로 놓을 수 있음
→ 인라인과 같은 설정값을 원하면서 동시에 박스 형태를 유지하고 싶을 때 사용하는 것
· inline : 박스의 모든 property 설정값을 지우고 내가 작성한 박스의 폭, 높이 만큼의 스타일만 적용
2) position
- top/bottom/right/left로 위치를 지정할 수 있다.
① static : element를 거기 높으면 거기 있을 것이다.
※ 디폴트로 모든 박스는 포지션이 static이다.
② fixed : element가 그 위치에 오버랩해서 고정되어 스크롤해도 볼 수 있다.
③ absolute : relative에 상대적으로 포지션을 잡는 것
- fixed와 비슷. 어디에든 붙일 수 있지만, 스크롤한다고 보이지 않는다.
- absolute가 설정되면 html상에서 해당 element와 관계가 있는 element를 살펴보고 이에따라 postion이 결정됨
단, relative 포지션이 없을 경우 absolute는 문서의 본문 body에 맞춰 포지션을 잡는다.
- 따라서 absolute 포지션을 부모 element에 상대적으로 사용하려면,
부모 element에 꼭 relative 포지션을 먼저 설정해 주어야 한다. 자식 element는 부모 element안에 위치하게 된다.
④ relative : 부모 박스라고 설정하는 과정
3)flex
- 자동으로 완성되는 그리드
- 부모 컨테이너를 플렉스로 선언하면, 그 안에 종속된 자식 박스들을 움직일 수 있기 때문에
각 박스에게 일일히 명령할 필요가 없다.
① flex를 사용할 때는 부모 클래스에만 적용한다. ex)display:flex;
- flex를 쓰면 자동으로 박스가 inline-block으로 되어 보여진다.
② justify-content: 수평 방향 정렬 방식
- center : 컨텐츠 가운데 정렬
- space-between : 컨텐츠를 같은 간격으로 정렬
- space-around : 컨텐츠 뿐만 아니라 주변도 같은 간격으로 정렬
③ align-item : 수직 방향 정렬 방식
- center : 아이템 가운데 정렬
- flex-end : 아이템을 같은 간격으로 정렬
④ flex-direction : 컨텐츠 추가 방향 결정
- row : 수평 방향으로 추가 → default 값, justify-content가 수평, align-item: 수직 으로 적용됨
- column : 수직방향으로 추가 → justify-content가 수직, align-item: 수평 으로 적용됨
⑤ flex-wrap : 박스를 포장하는 방식
- wrap : 폭을 유지하고 박스의 수가 많아지면 밑으로 박스를 떨어뜨리고 싶을 때 작성한다.
- no-wrap : 디폴트 값이고 폭은 무시하고 박스들의 크기가 줄어든다.
⑥ flex-direction : 박스의 순서
- row-reverse : 박스의 순서가 반대로 나온다.
- wrap-reverse : 반대방향으로 그리드 방식을 볼 수 있다.
4) 기타
① cursor
- allowed : 손가락 표시
- not-allowed : X 표시
② vh : view for height
5. pseudo-selector(가상 셀렉터)
- 셀렉터이나 element가 아닌 것 ex)input[type='submit']{}
1) :child
- .box:last-child : 마지막 박스 선택
- .box:first-child : 첫번째 박스 선택
- .box:nth-child : n번째 박스 선택
2) input + .box : input태그의 형제 box
3) input > .box : input태그의 직계 box 선택
4) 필수 입력찬인 경우 required를 사용
6. css status
1) active : 클릭할 때 상태가 변하게 하는 것
2) hover : 그 위에 뭔가 올라가면 변하게 하는 현상
3) focus : 누군가가 형식이나 링크를 선택하거나 활성화 // 입력할 때 주로 사용
4) visited : 클릭했던 적이 있는 경우 표시하는 것
7. 애니메이션
- 키 프레임을 생성한다.
.box{
animation:1.5s scaleAndRotateSquare infinite ease-in-out;
}
@keyframes scaleAndRotateSquare{
from {
transform : none;
}
to {
transform : rotate(1turn) scale(.5, .5);
}
}
from, to 대신 0% 50% 100% 등등으로 나눠 적을 수 있다.
8. 트랜지션
- 하나의 state에서 다른 state로 넘어갈 때 나타나는 효과
- 사용방법 : 무엇을 변경할 지 적어주면 됨
ex) transition : background-color 5s ease-in-out;
- 1개 이상의 설정값을 바꾸고 싶다면
ex) transition : all 5s ease-in-out;
- 트랜지션은 어떤 state가 바뀔 때 적용되는 것으로
state는 hover, active, focus, visited 등이 있다.
9. 트랜스포메이션
- html 문서의 element들을 변경, 모습이 변하는 효과를 뜻함
- 사용 방법
ex) transform : rotate(20deg);
10. 미디어쿼리
- 사용 방법
ex) @media screen and (최소) and (최대)
최소 : min-width:320px; 최대 : max-width : 640px;
1)휴대폰 모드
① landscape 모드
- and (orientation:landscape)
② portrait 모드
- and (orientation:portrait)
[실습]
· div.header__top+div.header__bottom // emmet 단축키
→ 자동으로 클래스 이름이 header__top, header__bottom인 div가 생성된다.
· font awesome에 있는 Icon 사용
- https://www.bootstrapcdn.com/fontawesome/
- Font Awesome CSS 링크를 복사하고 head 사이에 넣는다. (title 태그 위)
· div.profile__actions*2>span.profile_action-circle(i,fa)+span.profile
<div class="profile__actions">
<span class="profile_action-circle"></span>
<i class="fa"></i>
<span class="profile"></span>
</div>
<div class="profile__actions">
<span class="profile_action-circle"></span>
<i class="fa"></i>
<span class="profile"></span>
</div>
· flex-direction:row; justify-content:space-between; align-item:flex-start
- 화면 너비에 맞춰 자동으로 박스 사이의 폭이 줄어든다.
· div.box{$}*10 : class가 box인 div 태그 내에 1~10까지 입력된 10줄이 출력된다.
1. 만들고자하는 화면을 파악 후 해당의 이름을 지정해 html 파일을 생성한다.
- 공통된 부분은 무엇이 있는지 파악한다.
2. 화면별 html 코딩
- 기본적인 html 코딩 폼을 작성 후, body 영역을 크게 나누며 클래스로 명칭을 지정해준다.
<body>
<header class="top-header">
</header>
<main class="friends">
</main>
<nav class="tab-bar">
</nav>
</body>
- 위 body 영역을 나눈 부분 안으로 들어가 해당 영역을 나눈다.
<header class="top-header">
<div class="header__top">
</div>
<div class="header__bottom">
</div>
</header>
- 세부 html을 진행한다.
<header class="top-header">
<div class="header__top">
<div class="header__column">
<!-- 비행기 아이콘 필요 -->
<i class="fa fa-fighter-jet"></i>
<!-- 와이파이 아이콘 필요 -->
<i class="fa fa-wifi"></i>
</div>
<div class="header__column">
<span class="header__time">18:38</span>
</div>
<div class="header__column">
<!-- 달 아이콘 -->
<i class="fa fa-moon-o"></i>
<!-- 블루투스 아이콘 -->
<i class="fa fa-bluetooth"></i>
<span class="header__battery">66%
<!-- 배터리 아이콘 -->
<i class="fa fa-battery-three-quarters"></i>
</span>
</div>
</div>
<div class="header__bottom">
<div class="header__column">
<span class="header__text">Manage</span>
</div>
<div class="header__column">
<span class"header__text">Friends
<span class="header__number">1</span>
</span>
</div>
<div class="header__column">
<i class="fa fa-cog fa-lg"></i>
</div>
</div>
</header>
※ 클래스 명 지정
1) 부모__자식
2) 요소-이름(단어 분리)
3. CSS를 진행한다.
- 한 화면씩 html과 CSS를 매핑하는 방법도 있겠지만 노마드 코더에서 진행하던 방식을 따르기로 했다.)
- html에는 style.css 하나만을 연결한다.
- 추가적으로 CSS를 작업하며 style.css에 @import 'CSS파일명.css'; 시켜준다.
- 화면 결과물을 실시간으로 확인하며 CSS를 작업해준다.
html 작업
- 우선 header 영역을 header__top과 header__bottom으로 나누었다.
- 그 내부에 div로 class명을 지정해준 뒤 다시 재 영역을 나누었다.
- 그리고 세부 항목에 들어갈 정보를 입력해줬다.
- 글씨가 들어가는 항목들은 span을 사용해 입력해줬다.
- main class="friends" 부분도 내부를 div로 나눠준 뒤 클래스를 통해 명칭을 입력해준다.
- div 내부에서도 section, header, div를 사용해 영역을 나눠 작성한다.
- nav="tab-bar" 부분은 a 태그를 통해 구분을 나눠줬다.
CSS 작업
- 초기 세팅 파일인 reset.css 파일을 연결 후 작업을 진행한다.
- 공통되는 header 부분은 header.css
글꼴 및 body 관련 지정은 global.css
friends로 줄로 프로필 나오는 부분은 friends.css
tab-bar 부분은 navigation.css
- display : flex를 사용해 작업
[참고 사이트]
· flex 실습 사이트
- flexboxfroggy.com/#ko
· 가상 셀렉터 실습
- http://www.topdesignagencies.com/nth-test/
· 글꼴 적용
- fonts.google.com
· 디자인 도구
- 색상 : chrome.google.com/webstore/detail/colorzilla/bhlhnicpbhignbdhedgjhgdocnmhomnp?
- 사이즈 : chrome.google.com/webstore/detail/page-ruler-redux/giejhjebcalaheckengmchjekofhhmal
· box-sizing 참고
- paulirish.com/2012/box-sizing-border-box-ftw
. block element modifier
- http://getbem.com/introduction
· easing function
- easing.net/en
· 추가적으로 공부할 링크
- http://getbem.com/introduction/
- https://en.bem.info/methodology/key-concepts/
- https://en.bem.info/methodology/quick-start/
- https://github.com/at-import/breakpoint/wiki/advanced-media-queries
- https://www.sitepoint.com/advanced-css3-animations
· 웹사이트를 웹앱으로 전환하기
- <head>에 몇개의 <meta> 태그를 추가하면 된다.
- 참고 링크
- ConfiguringWebApplications.html
- https://speckyboy.com/creating-a-mobile-web-application-with-meta-tags/
[보너스]
· 웹사이트를 위한 무료 호스팅을 얻는 방법
- Github 페이지
조건 1. index.html을 가지고 있어야 하고
조건 2. repository에서 브랜치의 이름이 github pages여야 함
- 브랜치 생성
브랜치 이름 : gh-pages
publish 한다.
- username.githb.io/name-of-project
ex)https://seongjinsong.github.io/kakao-clone/
- 추가로 수정할 사항이 있는 경우에는 gh-page에서 수정하는 것이 아닌
1)master에서 수정 후 커밋하고 push
2)gh-pages로 이동 후 브랜치 → 업데이트 하고 push해야 반영된다.