CSS

  • html
  • css
  • javascript
  • deeperjs
  • node.js
  • site
  • web
  • wish list
  • 1.CSS의 개념

    1. CSS(Cascading Style Sheets)는 디자인을 위한 언어.html의 태그는 검색엔진에게 정보를 제공해주지만,
      디자인은 정보로서의 가치가 없다.
    2. Web Browser는 기본적으로 코드를 HTML이라고 생각하기에 HTML에게 CSS를 해석하라는 태그가 필요.
      <style>
      "Web Browser야 여기있는건 CSS니까 CSS 문법에 맞게 처리해"
      </style>
    3. <style>
         a{ ---> 선택자(Selector)
           color:red; --->폰트 색깔
         }
      </style>
      :모든 a태그를 제어하므로 중복을 제거하고, 디자인 관련 코드를 style태그 안으로 집약시키므로 관리가 용이.

    2.CSS 사용법

    1. Web Page 안에 CSS를 삽입하는 2가지 방법
      1.style 태그를 쓴다.(선택자/selector + 선언/declaration)
      2.style 속성을 쓴디.(속성/atribute + 선언/declaration)
    2. CSS 속성 : <h1 style="color:red;"></h1>
      style이라는 속성을 쓰면, 그 속성의 값을 Web Browser는 CSS 문법에 따라서 해석해서,
      style 속성이 위치하고 있는 태그에게 적용한다.
      style=" " --->HTML
      color:red --->CSS
    3. CSS 태그:
      a { ---> 선택자(selector)
       color:black;----> 선언(declaration)/효과:style 태그를 직접 사용한 경우,
                              위치한 태그에게 효과를 줄 것이기 때문에 선택자 필요X
      }
    4. style태그보다 직접적인 style 속성이 더 계급이 높다.
    5. 선언(declaration)은 속성(property)와 값(value)로 이루어진다.

    3.CSS 선언(declaration)의 종류

    1. color:black;:텍스트의 색깔 지정.
    2. text-decoration:none;/underline;:텍스트의 효과 없애기,밑줄 긋기.
    3. font-size:50px;:text size property.
    4. text-align:center;/left;/right;:텍스트 정렬.

    4.CSS 선택자(seletor)

    1. class="";(class seletor),id=";(id selector) :id>class>tag(selector 계급,같은 계급일 때는 밑>위)
      class=>.class
      id =>#id
      둘 다 HTML의 속성(attribute)이다.
    2. 클래스 속성의 값은 여러개가 들어갈 수 있고 띄어쓰기로 구분한다.
    3. 하나의 태그에는 여러개의 속성이 들어갈 수 있고, 여러개의 selector를 통해
      하나의 태그를 공동으로 제어할 수 있다.
      ex)class="active saw"
      .saw{
        color:red;
      }
      .active{
        color:gray;
      }
    4. #grid ol{
      }

      :gird라는 id를 가진 tag 밑에 있는 ol 태그.
    5. ul li{
        color:red;
      }

      #lecture>li{
        border:1px solid red;
      }


      ul,ol{
        background-color:powderblue;
      }
      ul과 ol을 동시에 선택. #lecture 바로 밑에 있는 li만을 선택
    6. 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
    7. 여러가지 선택자들

      1. *: 웹페이지의 모든 선택자를 선택.
      2. ul *: 모든 ul태그 밑의 태그들을 선택.
      3. plate+apple: plate 옆에 인접한(위 아래) apple 태그들을 선택
      4. bento~pickle: bento를 밑에 있는 모든 pickle 태그를 선택
      5. plate>apple: plate의 직계 자식을 선택(plate 바로 밑에 있는 apple)
      6. plate orange:first-child: plate밑에 있는 orange 중에 첫번째. 그냥 :first-child를 쓰면 모든 첫번째 태그를 선택
      7. plate :only-child: 누군가의 자식인데 형제가 없음.
      8. .small:last-child: 클래스가 small인 누군가의 자식들 중 마지막 태그.
      9. :nth-child(3): 누군가의 3번째 자식
      10. bento:nth-last-child(3): nth-child의 역순. 누군가의 밑에서 3번째 자식 중 bento태그
      11. apple:first-of-type: 처음 등장하는 apple 태그
      12. plate:nth-of-type(even/odd/3):짝수/홀수에 등장하는 plate태그
      13. :nth-of-type(2n+3): 수열로 선택
      14. apple:only-of-type: 모든 apple중 같은 타입의 형제가 없는 apple만 선택
      15. .small:last-of-type: 모든 small클래스 중에 같은 타입의 형제 중 마지막.
      16. bento:empty: 자식이 없이 비어있는 bento 태그
      17. :not(#fancy)/div:not(first-child)/:not(.big, .medium): id가 fancy가 아닌 모든 태그/ 첫번째 자식이 아닌 모든 div 태그/ big이나 medium 클래스가 아닌 모든 태그.
      18. a[href]/[type]: 모든 href속성을 가지고 있는 a태그/ 모든 type속성을 가지고 있는 태그
      19. input[type="checkbox"]: 모든 type속성의 값이 checkbox인 input태그
      20. .toy[category^="swim"]: 모든 toy클래스 중 category값이 swim으로 시작하는 태그
      21. img[src$=".jpg"]: .jpg으로 끝나는 모든 img태그
      22. img[src*="/thumbnails/"]/[class*="heading"] : thumbnails폴더에서 가져오는 모든 img 태그/클래스명에 heading이 포함된 모든 태그

    5.박스 모델

    1. block level element vs inline element
      display:block(화면 전체) ex) h1, div, p...
      display:inline(자신크기만큼) ex) a, span...
      display:none(안보임)
    2. 테두리 만들기
      a,h1{
        border-width:5px;
        border-color:red;
        border-style:solid;
        padding:20px; => 테두리와 글자간의 간격
        margin:0px; => 테두리끼리의 간격
        width:200px; => 테두리의 크기(폭)
      }
      =>border:5px red solid;
    3. box model
      margin
      border
      padding
      content

    6.Flexbox

    1. container(parent) 와 item(child)
    2. main axis 와 cross axis
    3. 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라고 보면됨)
    4. 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

    1. Position은 "부모 태그 안에서의 위치" 조정하는 속성
    2. 기본값-position:static;
    3. position의 값이 static 일때 left,right,top,bottom속성은 사용X
    4. position:relative;
    5. position의 값이 relative 일때 left,right,top,bottom속성 사용가능
      *자신의 원래 위치를 기준으로 움직임
    6. position:absolute;
    7. position의 값이 absolute 일때 left,right,top,bottom속성 사용가능
      공중부양하는 느낌으로 자신의 content 크기만큼의 크기를 가지고 다른 자식 태그를 무시한채 움직임.
      *부모와 자신의 위치의 차를 값으로 정한다.ex)top:0;부모 태그의 맨위
      *단 부모 태그가 static일 경우에는 무시하고 그 위 태그로 간다.
    8. position:fixed;
    9. position 값이 fixed일때 left,right,top,bottom속성 사용가능
      공중부양하는 느낌으로 자신의 content 크기만큼의 크기를 가지고 다른 자식 태그를 무시한채 움직임.
      *무조건 body 태그와 자신의 위치의 차를 값으로 정한다.
      *스크롤을 무시하고 화면상에서 그 위치에 항상 있다.
    10. element{
        position:static/relative/absolute/fixed;
        left:0px;
        right:0px;
        top:0px;
        bottom:0px;
      }

    8.Grid

    1. <div>, <span>: 무색 무취의 아무 의미 없는 디자인용 태그
      <div>:block level element
      <span>:inline element
    2. 디자인용 태그를 부모 자식 태그로 자유롭게 응용 (id,class으로 구분)
    3. #grid{
        border:5px solid pink;
        display:grid;
        grid-template-columns:150px 1fr;
      }
      1fr:화면 크기에 맞춤.
    4. 그리그 사용시 내용 태그들을 감싸는 부모 태그를 만든 후 부모 태그를 grid로 만든다.

    9.Responsive Web(반응형 웹/디자인)

    1. 화면의 크기에 따라서 web page의 각 요소들이 반응해서 최적화된 외형으로 바뀌게 하는 것.
    2. web은 모든 시스템에서 동작하는 정보 시스템.
      =수많은 형태의 화면에서 동작 해야함.
    3. 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;
        }
      }
    4. *중복의 제거
      <link>
      <link rel="stylesheet" href="style.css">
      rel = relationship: link에서 문서와의 관계를 말해줌. 사용자에게 혜택이 없지만 부라우저나 검색엔진에게 링크 관계에 대한 정보를 줌.
      href 속성의 추가 정보

      CSS 파일을 만들어서 모든 웹페이지와 연동시킨다.

      효과
      -CSS 파일에서만 수정해도 모든 웹페이지에서 수정된다.(폭발적)
      -각각 웹페이지의 CSS 코드를 비교할 필요가 없다.
      -CSS 파일의 내부적인 코딩의 원리를 몰라도 사용가능하다.

      네트워크적인 측면(트래픽)으로 보면, CSS를 HTML에 내장하는게 더 효율적이여보일 수 있지만 "캐싱"이라는 테크닉 때문에 그렇지 않다.

      "캐싱"(저장)
      :한번 파일을 다운로드 받았다면, 파일이 바뀌기 전까지는 웹브라우저는 우리의 컴퓨터에 저장해 놓았다가, 파일을 요청하면 저장된 결과를
      가져와서 속도를 높일 수 있고(네트워크 사용X), 사업자들은 돈을 덜 쓸 수 있는 효과 제공.

      따라서, 캐싱을 사용하면 훨씬 더 빠르게 웹페이지를 보여주면서, 네트워크의 트래픽(=사용료)를 훨씬 더 적게 낼 수 있다.

      결론: 가급적 CSS를 만들었다면 꺼내서 별도의 파일로 저장. 선택자와 속성이 제일 중요(2개의 뿌리)

    10.속성

    1. font-size: 글꼴의 크기 지정 (px/em/rem)
      rem: 폰트 크기를 사용자가 지정할 수 있음.html태그(최고층 태그)의 폰트 크기에 따라서 상대적으로 크기가 결정됨. (사용자가 브라우저의 글꼴크기를 키웠을때 바뀜, 권장)
      em: 부모 태그의 영향을 받는 상대적인 크기. 파악하기가 어려움. (권장하지 않음) px: 고정된 값으로 사용자가 브라우저의 글꼴크기를 바꿔도 바뀌지 않음(권장하지 않음)
    2. 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;
    3. text-align
      text-align: center/left/right/justify
      Lorem ipsum. justify= 좌우 균등하게 끝에 정렬.
    4. 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-sezefont-family는 필수로 포함되어야 하는 정보.

    11.조화

    1. 상속: 부모 태그의 속성을 자식 태그가 물려받는 것.(생산성을 올림)
      Inheritance
      부모 태그의 속성을 지정한다음, 개별적으로 자식 태그들 중 다른 속성을 가져야하는 것들을 수정.
      속성 중에 상속이 되는 속성이 있고, 상속이 안되는 속성이 있다. site참조. inherited? yes/no
    2. stylish

    Tips

    1. /* 주석 */
    2. div.container>div.item.item${$}*10 + tab
      div태그 container클래스 그안에 div태그 item클래스의 item클래스(1번부터 번호)
      (1번부터번호) 를10번
    3. 100vh: 부모 태그에 상관없이 보이는 화면의 100%
      그냥 100%일 경우 부모태그의 영역에서 100%
    4. caniuse.com이나 MDN사이트에서 새로운 속성들은 사용가능한 브라우저 확인
    5. lab,map,nthchild