CSS
1.CSS의 개념
- CSS(Cascading Style Sheets)는 디자인을 위한 언어.html의 태그는 검색엔진에게
정보를 제공해주지만,
디자인은 정보로서의 가치가 없다.
- Web Browser는 기본적으로 코드를 HTML이라고 생각하기에 HTML에게 CSS를 해석하라는
태그가 필요.
<style>
"Web Browser야 여기있는건
CSS니까 CSS 문법에 맞게 처리해"
</style>
- <style>
   a{ ---> 선택자(Selector)
     color:red; --->폰트 색깔
   }
</style>
:모든 a태그를 제어하므로 중복을 제거하고,
디자인 관련 코드를 style태그 안으로 집약시키므로 관리가 용이.
2.CSS 사용법
- Web Page 안에 CSS를 삽입하는 2가지 방법
1.style 태그를 쓴다.(선택자/selector + 선언/declaration)
2.style 속성을 쓴디.(속성/atribute + 선언/declaration)
- CSS 속성 : <h1 style="color:red;"></h1>
style이라는 속성을 쓰면, 그 속성의 값을 Web Browser는 CSS 문법에 따라서
해석해서,
style 속성이 위치하고 있는 태그에게 적용한다.
style=" " --->HTML
color:red --->CSS
- CSS 태그:
a { ---> 선택자(selector)
 color:black;----> 선언(declaration)/효과:style 태그를 직접 사용한 경우,
                       
위치한 태그에게 효과를 줄 것이기 때문에 선택자 필요X
}
- style태그보다 직접적인 style 속성이 더 계급이 높다.
- 선언(declaration)은 속성(property)와 값(value)로 이루어진다.
3.CSS 선언(declaration)의 종류
- color:black;:텍스트의 색깔 지정.
- text-decoration:none;/underline;:텍스트의 효과 없애기,밑줄 긋기.
- font-size:50px;:text size property.
- text-align:center;/left;/right;:텍스트 정렬.
4.CSS 선택자(seletor)
-
class="";(class seletor),id=";(id selector)
:id>class>tag(selector 계급,같은 계급일 때는 밑>위)
class=>.class
id =>#id
둘 다 HTML의 속성(attribute)이다.
-
클래스 속성의 값은 여러개가 들어갈 수 있고 띄어쓰기로 구분한다.
-
하나의 태그에는 여러개의 속성이 들어갈 수 있고, 여러개의 selector를 통해
하나의 태그를 공동으로 제어할 수 있다.
ex)class="active saw"
.saw{
  color:red;
}
.active{
  color:gray;
}
-
#grid ol{
}
:gird라는 id를 가진 tag 밑에 있는 ol 태그.
-
ul li{
  color:red;
}
#lecture>li{
  border:1px solid red;
}
ul,ol{
  background-color:powderblue;
}
ul과 ol을 동시에 선택.
#lecture 바로 밑에 있는 li만을 선택
-
pseudo class selector(가상 클래스 선택자): 엘리먼트들의 상태에 따라서 클래스 선택자처럼 여러 엘리먼트를 선택할 수 있음.
a:active{
  color:green;
}
a:hover{
  color:yellow;
}
a:visited{
  color:red;
}
a:link{
  color:black;
}
a:focus{
  color:white;
}
input:focus{
  background-color: black;
  color:white;
}
:link - 방문한 적이 없는 링크, :visited - 방문한 적이 있는 링크, :hover - 마우스를 롤오버 했을때,
:active - 마우스를 클릭했을 때, :focus - tab키를 누르거나 focus됬을 때 (이상 순서대로 지정하는게 좋음)
visited의 경우 보안상의 이유로 아래와 같은 속성만 변경 가능.
color, background-color, border-color, outline-color, The color parts of the fill and stroke properties
-
여러가지 선택자들
- *: 웹페이지의 모든 선택자를 선택.
- ul *: 모든 ul태그 밑의 태그들을 선택.
- plate+apple: plate 옆에 인접한(위 아래) apple 태그들을 선택
- bento~pickle: bento를 밑에 있는 모든 pickle 태그를 선택
- plate>apple: plate의 직계 자식을 선택(plate 바로 밑에 있는 apple)
- plate orange:first-child: plate밑에 있는 orange 중에 첫번째.
그냥 :first-child를 쓰면 모든 첫번째 태그를 선택
- plate :only-child: 누군가의 자식인데 형제가 없음.
- .small:last-child: 클래스가 small인 누군가의 자식들 중 마지막 태그.
- :nth-child(3): 누군가의 3번째 자식
- bento:nth-last-child(3): nth-child의 역순. 누군가의 밑에서 3번째 자식 중
bento태그
- apple:first-of-type: 처음 등장하는 apple 태그
- plate:nth-of-type(even/odd/3):짝수/홀수에 등장하는 plate태그
- :nth-of-type(2n+3): 수열로 선택
- apple:only-of-type: 모든 apple중 같은 타입의 형제가 없는 apple만 선택
- .small:last-of-type: 모든 small클래스 중에 같은 타입의 형제 중 마지막.
- bento:empty: 자식이 없이 비어있는 bento 태그
- :not(#fancy)/div:not(first-child)/:not(.big, .medium): id가 fancy가 아닌
모든 태그/ 첫번째 자식이 아닌 모든 div 태그/ big이나 medium 클래스가 아닌 모든 태그.
- a[href]/[type]: 모든 href속성을 가지고 있는 a태그/
모든 type속성을 가지고 있는 태그
- input[type="checkbox"]: 모든 type속성의 값이 checkbox인 input태그
- .toy[category^="swim"]: 모든 toy클래스 중 category값이 swim으로
시작하는 태그
- img[src$=".jpg"]: .jpg으로 끝나는 모든 img태그
- img[src*="/thumbnails/"]/[class*="heading"]
: thumbnails폴더에서 가져오는 모든 img 태그/클래스명에 heading이 포함된 모든 태그
5.박스 모델
- block level element vs inline element
display:block(화면 전체) ex) h1, div, p...
display:inline(자신크기만큼) ex) a, span...
display:none(안보임)
- 테두리 만들기
a,h1{
  border-width:5px;
  border-color:red;
  border-style:solid;
  padding:20px; => 테두리와 글자간의 간격
  margin:0px; => 테두리끼리의 간격
  width:200px; => 테두리의 크기(폭)
}
=>border:5px red solid;
-
box model
margin
border
padding
content
6.Flexbox
- container(parent) 와 item(child)
- main axis 와 cross axis
- container properties
dispaly:flex;
flex-direction:row/row-reverse/column/column-reverse;
(row:L to R/column:T to B)
flex-wrap:nowrap/wrap/wrap-reverse;
(화면의 크기가 변할때 item의 크기를 유지시키고 다음줄로 넘어감)
flex-flow:column nowrap;
(flex-direction+flex-wrap)
justify-content:flex-start/flex-end/center/space-around/space-evenly/space-between;
(main axis를 기준으로/direction은 안변함)
(around:item주위를 두르는 공간/evenly:균등하게/between:좌우는 화면끝에)
align-items:center/baseline;
(cross axis를 기준으로/ baseline:텍스트 라인을 맞추게)
align-content:flex-start/flex-end/center/space-around/space-evenly/space-between;
(cross axis를 기준으로하는 justify-content라고 보면됨)
- item properties
order:0/1/2...;
(item 개개인의 순서 조정)
flex-grow:0/1/2/3...;
(화면의 크기에 맞춰 숫자의 비율대로 늘어남)
flex-shrink:0/1/2/3...;
(화면의 크기에 맞춰 숫자의 비율대로 줄어들음 *숫자가 클수록 더 작아짐)
flex-basis:10%/20%/30%/auto;
(grow+shrink:늘어나든 줄어들든 이 비율 유지)
align-self:center;
(container안에서 item하나만 align하고 싶을때)
7.Position
- Position은 "부모 태그 안에서의 위치" 조정하는 속성
- 기본값-position:static;
- position의 값이 static 일때 left,right,top,bottom속성은 사용X
- position:relative;
- position의 값이 relative 일때 left,right,top,bottom속성 사용가능
*자신의 원래 위치를 기준으로 움직임
- position:absolute;
- position의 값이 absolute 일때 left,right,top,bottom속성 사용가능
공중부양하는 느낌으로 자신의 content 크기만큼의 크기를 가지고 다른 자식 태그를 무시한채 움직임.
*부모와 자신의 위치의 차를 값으로 정한다.ex)top:0;부모 태그의 맨위
*단 부모 태그가 static일 경우에는 무시하고 그 위 태그로 간다.
- position:fixed;
- position 값이 fixed일때 left,right,top,bottom속성 사용가능
공중부양하는 느낌으로 자신의 content 크기만큼의 크기를 가지고 다른 자식 태그를 무시한채 움직임.
*무조건 body 태그와 자신의 위치의 차를 값으로 정한다.
*스크롤을 무시하고 화면상에서 그 위치에 항상 있다.
-
element{
  position:static/relative/absolute/fixed;
  left:0px;
  right:0px;
  top:0px;
  bottom:0px;
}
8.Grid
-
<div>, <span>: 무색 무취의 아무 의미 없는 디자인용 태그
<div>:block level element
<span>:inline element
-
디자인용 태그를 부모 자식 태그로 자유롭게 응용 (id,class으로 구분)
-
#grid{
  border:5px solid pink;
  display:grid;
  grid-template-columns:150px 1fr;
}
1fr:화면 크기에 맞춤.
-
그리그 사용시 내용 태그들을 감싸는 부모 태그를 만든 후 부모 태그를 grid로 만든다.
9.Responsive Web(반응형 웹/디자인)
-
화면의 크기에 따라서 web page의 각 요소들이 반응해서 최적화된 외형으로 바뀌게 하는 것.
-
web은 모든 시스템에서 동작하는 정보 시스템.
=수많은 형태의 화면에서 동작 해야함.
-
CSS를 통해 구현하는 핵심적인 개념, mediaquery(미디어쿼리)
dia query: 어떠한 조건을 만족할 때만 CSS의 내용이 동작하게 하는 것.
@media(min-width:800px){
  div{
    display:none;
  }
}
@media() -가로 안에 세미콜론 금지;
min-width:800px == (if)screen width > 800px
max-width:800px == (if)screen width < 800px
@media(max-width:800px){
  #grid{
    display:block; -#grid가 있는 태그 아래 모든 태그의 display 값을 block으로 변경해 columns
이여도 rows 처럼 밖에 안되게 수정
nbsp }
  #grid ol{
    border-right:none;
  }
  h1{
  border-bottom:none;
  }
}
-
*중복의 제거
<link>
<link rel="stylesheet" href="style.css">
rel = relationship: link에서 문서와의 관계를 말해줌. 사용자에게 혜택이 없지만 부라우저나 검색엔진에게 링크 관계에 대한 정보를 줌.
href 속성의 추가 정보
CSS 파일을 만들어서 모든 웹페이지와 연동시킨다.
효과
-CSS 파일에서만 수정해도 모든 웹페이지에서 수정된다.(폭발적)
-각각 웹페이지의 CSS 코드를 비교할 필요가 없다.
-CSS 파일의 내부적인 코딩의 원리를 몰라도 사용가능하다.
네트워크적인 측면(트래픽)으로 보면, CSS를 HTML에 내장하는게 더 효율적이여보일 수 있지만 "캐싱"이라는 테크닉 때문에 그렇지 않다.
"캐싱"(저장)
:한번 파일을 다운로드 받았다면, 파일이 바뀌기 전까지는 웹브라우저는 우리의 컴퓨터에 저장해 놓았다가, 파일을 요청하면 저장된 결과를
가져와서 속도를 높일 수 있고(네트워크 사용X), 사업자들은 돈을 덜 쓸 수 있는 효과 제공.
따라서, 캐싱을 사용하면 훨씬 더 빠르게 웹페이지를 보여주면서, 네트워크의 트래픽(=사용료)를 훨씬 더 적게 낼 수 있다.
결론: 가급적 CSS를 만들었다면 꺼내서 별도의 파일로 저장. 선택자와 속성이 제일 중요(2개의 뿌리)
10.속성
-
font-size: 글꼴의 크기 지정 (px/em/rem)
rem: 폰트 크기를 사용자가 지정할 수 있음.html태그(최고층 태그)의 폰트 크기에 따라서 상대적으로 크기가 결정됨.
(사용자가 브라우저의 글꼴크기를 키웠을때 바뀜, 권장)
em: 부모 태그의 영향을 받는 상대적인 크기. 파악하기가 어려움. (권장하지 않음)
px: 고정된 값으로 사용자가 브라우저의 글꼴크기를 바꿔도 바뀌지 않음(권장하지 않음)
-
color: color name, hexa(16진수), rgb
color name : tomato, powderblue, cyan 등등
RGB : red, green, blue 의 조합. - 255.255.255 ~ 0.0.0.0/ color:rgb(255,255,255);
Hexaecimal colors : #FF0000, #00FF00 / color:#00FF00;
-
text-align
text-align: center/left/right/justify
Lorem ipsum. justify= 좌우 균등하게 끝에 정렬.
-
font
font-family: 서체(글꼴)를 지정.
font-family: arial, verdana, "Helvetica Neue";/cursive/fantasy
arial, verdana, "Helvetica Neue"중 순서대로 있는 글꼴이 적용됨.
serif / sans-serif: 알파벳 끝의 장식 유무를 결정. sans(부정의 의미)
monospace: 고정폭 (반대:가변폭)
font-weight: bold: 폰트 굵기
line-height:1.2; /2;: 줄간격(1.2가 기본값).px로 지정할시 폰트크기에
상관없이 고정됨.
font : bold 5rem/2 arial, verdana, "Helvetica Neue", serif;
축약형: 순서가 중요함/ font: font-style font-variant font-weight font-size/line-height
font-family|caption|icon|menu|message-box|small-caption|status-bar|initial|inherit;
이 중에 font-seze와 font-family는 필수로 포함되어야 하는 정보.
11.조화
-
상속: 부모 태그의 속성을 자식 태그가 물려받는 것.(생산성을 올림)
Inheritance
부모 태그의 속성을 지정한다음, 개별적으로 자식 태그들 중 다른 속성을 가져야하는 것들을 수정.
속성 중에 상속이 되는 속성이 있고, 상속이 안되는 속성이 있다. site참조. inherited? yes/no
-
stylish
Tips
-
/* 주석 */
-
div.container>div.item.item${$}*10 + tab
div태그 container클래스 그안에 div태그 item클래스의 item클래스(1번부터 번호)
(1번부터번호) 를10번
-
100vh: 부모 태그에 상관없이 보이는 화면의 100%
그냥 100%일 경우 부모태그의 영역에서 100%
-
caniuse.com이나 MDN사이트에서 새로운 속성들은 사용가능한 브라우저 확인
-
lab,map,nthchild