CSS#1#2024-12-17

itroqkfwk·2024년 12월 17일

CSS

목록 보기
1/1

2024-12-13

https://www.w3schools.com/ 튜토리얼

1.CSS(Cascading StyleSheet) 역할 및 버전

1)역할

html에 시각적 표현을 지정해서 스타일 관리.

2)버전

CSS1: 1996년

CSS2: 1998년

CSS3: 현재까지 계속 개발중.(표준화 버전)

2.html에 CSS 적용하는 방법

1)인라인 스타일(inline style)

-html의 시작태그에서 style 속성을 이용해서 스타일 적용.

예>

Hello

2)내부 스타일(internal style)

-

예>

Hello

3)외부 스타일(external style)

-html 파일 외부에 .css 형식의 파일작성해서 스타일 설정하는 방법. 필요한 html에서 참조해서 사용(<link rel=”stylesheet” href=”.css”>)

-같은 .css 파일을 사용하는 여러 html 페이지는 맨 처음 요청한 페이지에서 다운로드 받아서 웹 브라우저 캐시 메모리에 저장된 .css 파일을 재사용해서 참조한다.

예>

// test.css

선택자{

css속성명(property): css속성값(value) ;

}

// html

4)우선순위

인라인 스타일 > 내부 스타일 > 외부스타일

3.CSS 선수 내용

1)캐스케이딩 (Cascading)

html

|

head body

     |

   div

     |

    p

개념: DOM 트리의 상위에서 정의한 스타일이 하위 요소로 전달되는 개념이다. 하나의 요소에 여러 스타일이 지정될 수 있다. 이러한 규칙은 충돌이 발생될 수 있다. 하위에서 재정의도 가능.

2)명시도(Specificity)

https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity

개념: 선택자(selector)마다 우선순위가 있음.

같은 명시도를 가지면 나중에 정의한 선택자가 적용됨.

명시도만 고려하면 나중에 설정했다고 해서 덮어쓰는 것이 아니다.

우선순위☆

인라인 > id > class, 속성명(예> href)> 태그

!important

⇒권장안함

⇒기본적인 명시도의 가중치값을 무시하고 가장 최우선 순위를 갖는다.

예>

a{
color: blueviolet !important;
}

선택자를 결합해서 구체적으로 지정할 수록 명시도가 올라간다. 이유는 지정된 선택자를 모두 사용하기 때문이다.

4.CSS 선택자 (selector)

1)개념

html

|

head body

        |            |

    div           div

       |              |

      p           div

                           |

                        span

DOM 트리에서 특정 태그를 선택하는 방법.

2)문법

가.전체 선택자

-* 표현

-DOM 트리에 있는 모든 태그가 선택됨.

예>

나.태그 선택자

-태그명으로 표현

만약에 여러개 표현할 때는 ,(쉼표) 지정하고 나열.

-명시도(0,0,1)

예>

다.id 선택자

-#id 표현

-유일한값 지정.

-명시도(1,0,0)

예>

hello

라.class 선택자☆

-.class값 표현

-중복값 가능

-한번에 여러값을 지정 가능 예> class=”값 값1 값2”

예>

hello1

hello2

hello1

hello1

마. 계층구조1- 자식

  - 부모태그  >  자식태그
     예>
    <style>
        .xxx > p{
          color:red;
    }
    </style>

마. 계층구조2- 자손 (공백)

  - 부모태그    자손태그
  - 자식포함

     예>
    <style>
        .xxx  p{
          color:red;
    }
    </style>

마.계층구조3-형제(sibling)

-선택자 + 형제 태그

-인접한 바로 뒤 형제만 참조(바로 뒤에 없으면 참조 불가)

예>

마.계층구조4-형제들(siblings)

-선택자 ~ 형제 태그

-인접한 바로 뒤의 모든 형제 참조

예>

바.속성으로 찾기

a.속성명으로 찾기

-[속성명] 표현, 태그[속성명] <= and 조거

예> [href]{

}

b.속성값으로 찾기(속성값은 정확하게 일치해야 됨)

-[속성명=”속성값”] 표현, 태그[속성명=”속성값”] <= and 조거

예> [class=”xxx”]{

}

c.특정 속성값으로 시작하는 요소 찾기

-[속성명^=”속성값”] 표현, 태그[속성명^=”속성값”] <= and 조거

예> a[href^=”https”]{

}

d.특정 속성값으로 끝나는 요소 찾기

-[속성명$=”속성값”] 표현, 태그[속성명$=”속성값”] <= and 조거

예> a[href$=”com”]{

}

e.특정값을 포함하는 요소 찾기

-[속성명*=”속성값”] 표현, 태그[속성명*=”속성값”] <= and 조거

예> a[href*=”www”]{

}

5.의사코드(pseudo code)

-html의 시멘티 태그처럼 이름안에 기능이 내포되어 있는 선택자 의미.

1)의사 클래스(pseudo class)

-:클래스명

예> :first-child

:last-child

:only-child

:checked

가.a 태그의 link 관련 의사 클래스(순서 중요)

방문전(기본:blue): a:link {color:red;}

방문후(기본:purple): a:visited {color:red;}

마우스오버: a:hover {color:yellow;}

누르고 있을때(기본:red): a:actvie{color:blue;}

나.자식 선택하는 의사 클래스(지정된 선택자의 부모기준☆)

a.선택자: first-child

예> p:first-child () <= p 태그를 찾고 찾은 p태그의 첫 번째 자식을 참조(X) p태그의 부모를 찾고 그 부모의 첫번째 자식인 p태그 참조(O)

b.선택자: last-child

예> p:last-child () <= p 태그를 찾고 찾은 p태그의 마지막 자식을 참조(X) p태그의 부모를 찾고 그 부모의 마지막 자식인 p태그 참조(O)

c.선택자: only-child

예> p:only-child () <= p태그의 부모를 찾고 그 부모의 유일한 자식인 p태그 참조(O)

d.n번째 자식: nth-child()

선택자: nth-child(n) <= n 번째 자식 참조, 1부터 시작

선택자: nth-child(2n) <= n에 1부터 값을 설정해서 2,4,6, 짝수번째

선택자:nth-child(even)

선택자: nth-child(2n+1) <= 홀수번째

선택자:nth-child(odd)

다. 사용자 입력 태그에서 사용하는 의사 클래스

  a.   :focus  <== 포커스를 받았을 때

예> input:focus{ } // blur 는 focus를 잃어버렸을 때

  b.  :checked <== checkbox 및 select 태그에서 값을 선택했을 때

    예> input:checked{ }

  c.  :enabled  <== 활성화
  :disabled <== 비활성화

예>input:enabled{ }
      input:disabled{ }

2)의사 요소 ( pseudo elements )

  • ::요소
  • 의사 클래스는 태그 전체(whole)가 스타일이 적용되고
    의사 요소는 부분(part)적으로 스타일이 적용됨.

예> ::first-line
::before
::after

가. ::first-line

  • 문단의 첫줄

    예> p::first-line{}

      <p>
         AAA1 <br>
         AAA2 <br>
         AAA3 <br>

    나. ::first-letter

  • 텍스트의 첫글자

    예> p::first-letter{}

    다. 특정요소에 컨텐츠(문자열,image등) 삽입

    ::after{
        content: 값|url('이미지경로')

    }

    ::before{
    content: 값|url('이미지경로')
    }

6.BOX 모델

1)개요

CSS(html)에서 모든 요소(tag)는 box로 관리한다

2)구성요소

가.내용(content)

나.패딩(padding, 안쪽여백)

다.보더(border, 테두리)

라.마진(margin바깥쪽 여백)

⇒body 태그에 기본적으로 margin: 8px로 되어 있음.

3)블럭레벨 vs 인라인 레벨

가.블럭레벨

-기본적으로 웹 브라우저의 전체 너비(width)를 차지한다.

따라서 다음 요소는 새로운 라인(new line)에 추가가 된다.(가로 배치)

-크롬 브라우저의 개발자도구(F12)에서 Box Model 그림을 보면 명시적인 width와 height 값이 보인다. 예> 248 X 21

-width와 height 지정하면 적용이 된다.

나.인라인레벨

-기본적으로 자신의 content 크기만큼만 너비(width)를 차지한다.

따라서 다음 요소는 같은 라인에 추가가 된다.(세로 배치)

-크롬 브라우저의 개발자도구(F12)에서 Box Model 그림을 보면 width와 height 값이 auto로 보인다. 예> auto X auto

-width와 height 지정하면 적용이 안된다.☆

4)width와 height

-Box 모델에서의 content(내용)의 너비와 높이를 의미한다. 지정하지 않으면 블럭레벨인 경우에는 웹브라우저의 전체 너비(width)를 차지하고 인라인 레벨인 경우에는 자신의 content 크기만큼만 너비(width)를 차지한다.

-문법:

width: 절대값(px)|상대값(%,rem) <=상대값은 부모 기준, 만약에 부모가 100px이고 자식이 50%라고 하면 자식 너비는 50px 됨

height: 절대값(px)|상대값(%,rem) <=생대값은 부모 기준, 만약에 부모가 100px이고 자식이 50%라고 하면 자식 너비는 50px 됨

  1. box-sizing 속성
  2. 개념
요소의 너비(width)와 높이(height)를 계산하는 방식이다.
  1. 종류

가. content-box

  • 기본
  • 지정된 width 와 height 값이 아닌
    padding 과 border 값이 추가되어 최종적으로 box의 실제 크기가 정해지는 방식이다.
    따라서 실제 너비와 높이는 더 커지게 된다.
    최종 width = 지정 width + ( 2*padding) + (2*border)
최종 height = 지정 height + ( 2*padding) + (2*border)

나. border-box (****)

  - context-box와 다르게 padding과 border값을 포함하여
    명시적으로 지정된 width와 height값으로 맞춰준다.

최종 width = 지정 width
최종 height = 지정 height

  - 실제로는 다음과 같이 설정하고 사용한다.
*{
       box-sizing: border-box;
}
  1. margin ( 바깥쪽 여백 )
  2. 기능
  • box와 box 사이의 여백(바깥쪽 여백) 제어.
  • px 와 % 지정 가능
  • 기본적으로 body 태그에 margin:8px 로 설정되어 있음.
    따라서 다음과 같이 요소가 페이지에 바로 배치되도록 수정해서 사용한다.
    *{
    margin:0px
    }
  1. 문법
가. 개별적으로 위치 지정

   margin-top: 10px
   margin-right: 10px
   margin-bottom: 10px
   margin-left: 10px

나. 축약 표현

  a. 개별위치 4개 모두 지정

     margin:  top  right  bottom  left

   예> margin: 10px   10px   10px   10px;

 b. 개별위치 3개만 지정

     margin:  top  right|left   bottom

예> margin: 10px   10px   10px;

 c. 개별위치 2개만 지정

     margin:  top|bottom  right|left

예> margin: 10px  10px;

  d. 개별위치 1개만 지정 (**********)

     margin:  top|bottom|right|left

예> margin: 10px;
  1. margin의 상쇄
 - 인접한 box의 margin 는 서로 겹쳐질수 있는데
   이때 하나로 합쳐서 margin이 만들어지는 것이 아니고
   큰 크기의 margin으로 적용된다.
   이유는 요소간 거리가 너무 멀어지는 것을 방지한다.
  1. 중앙정렬 ( 수평으로 가운데 정렬 )

    margin: auto;

    반드시 블럭 레벨이면서 width 값을 가져야 적용이 된다.

  2. padding ( 안쪽 여백 )

    1. 기능
    • content와 border 사이의 여백(안쪽 여백) 제어.
    • px 와 % 지정 가능
    1. 문법

    가. 개별적으로 위치 지정

    padding-top: 10px
    padding-right: 10px
    padding-bottom: 10px
    padding-left: 10px
    

    나. 축약 표현

    a. 개별위치 4개 모두 지정

      padding:  top  right  bottom  left
    
    예> padding: 10px   10px   10px   10px;
    

    b. 개별위치 3개만 지정

      padding:  top  right|left   bottom
    

    예> padding: 10px 10px 10px;

    c. 개별위치 2개만 지정

      padding:  top|bottom  right|left
    

    예> padding: 10px 10px;

    d. 개별위치 1개만 지정 (**)

      padding:  top|bottom|right|left
    

    예> padding: 10px;

  3. border ( 테두리 )

  4. 기능

  • margin과 padding 사이의 테두리 의미.
  • 3가지 속성을 이용해서 스타일 지정이 가능하다. 가. width: border 두께
    나. style: border 스타일 ( 실선, 점선 ,... )
    다. color: border 색상
  1. 문법 - 개별적으로 지정

    가. width

    border-top-width: 5px
    border-right-width: 5px
    border-bottom-width: 5px
    border-left-width: 5px

    나. style

    border-top-style: solid|dotted|dashed;
    

    border-right-style: solid|dotted|dashed;
    border-bottom-style: solid|dotted|dashed;
    border-left-style: solid|dotted|dashed;

    다. color

    border-top-color: red;
    border-right-color: red;
    border-bottom-color: red;
    border-left-color: red;
    
  2. 문법2 - 개별적으로 축약 지정

가. width

  border-width: top  right bottom left    // 4개 지정
  border-width: top  right|left  bottom   // 3개 지정
      border-width: top|bottom  right|left    // 2개 지정
  border-width: top|bottom|right|left     // 1개 지정

  나. style

      border-style: top  right bottom left    // 4개 지정
  border-style: top  right|left  bottom   // 3개 지정
  border-style: top|bottom  right|left    // 2개 지정
  border-style: top|bottom|right|left     // 1개 지정

  다. color

      border-color: red;
  1. 문법3 - width 와 style 과 color 한꺼번에 축약 표현 (***)

    border: width style color;

 예> border: 5px  solid  yellow;
  1. border-radius 속성
 - box의 border(테두리)를 둥글게 설정할 때 사용.
 - 값이 클수로 더 많이 동글해짐.

  예>   border-radius: 30px
       border-radius:  50%;  // 원
  1. 요소 배치

  2. display 속성

    • 블럭레벨로 배치 / 인라인 레벨로 배치 / 랜더링 방지 / 인라인레벨 + width와 height 적용
    • 문법:
      display: block; // 블럭레벨로 배치
      display: inline; // 인라인 레벨로 배치
      display: none; // 화면 랜더링 방지. 영역유지 안됨
      display: inline-block; // 인라인레벨 + width와 height 적용
  3. position 속성

    • display 속성만 이용해서는 블럭레벨(세로배치) 및 인라인레벨(가로배치) 정도만 지정 가능함.
    • position 속성 + top,right,bottom,left 속성을 이용해서 요소의 실제 위치를 바꿀 수 있다.
    • 종류 5가지

    가. position: static

    • 기본

    • 기본적인 배치방법( document flow: 문서 대열 )를 따른다.
      블럭레벨은 세로 배치, 인라인 레벨은 가로 배치, left와 top이 8px 마진값이 적용되어 보여진다.

    • top,right,bottom,left 속성을 지정해도 적용이 안됨.
      역으로 top,right,bottom,left 속성을 적용할려면 static이 아닌 다른 값(relative,absolute,fixed)을
      반드시 지정해야 된다.

    나. position: relative

    • 기준은 기본적인 문서 대열이다.

    • top,right,bottom,left 속성을 지정하면 적용이 됨

    다. position: absolute

    • 기준은 부모 요소

    • top,right,bottom,left 속성을 지정하면 적용이 됨

      • 부모 요소와 같이 사용됨
        예>

        <== 부모에 position 존재여부에 따라서 자식요소의 기준이 달라짐.
        <== position:absolute a. 부모 요소에 position:relative 가 있는 경우 (*************)
        <== position:relative
        <== position:absolute
         ==> 자식 요소 기준은 부모 요소가 된다.
        
        b. 부모 요소에 position이 없는 경우
        
        <== position:static
        <== position:absolute
        ==> 자식 요소 기준은 웹브라우저 화면 ( 뷰포트: viewport)가 된다.
        

    라. position: fixed

    • 기준은 웹브라우저 화면 ( 뷰포트: viewport)이다.

    • top,right,bottom,left 속성을 지정하면 적용이 됨

    • 스크롤 해도 고정됨.

    마. position:sticky

    - 최근에 추가된 기능. 따라서 지원 여부를 확인해야 됨. (  caniuse.com )
    
    • 평시에는 static 으로 동작되고 특정 임계값을 만나면 fixed 로 동작됨.

    예>
    postition:sticky;
    top: 40px // top이 40px이 되면 fixed 됨.

  4. z-index 속성

    • position: fixed 또는 abso수ute 같은 경우에는 겹쳐서 보여질 수 있다.
    • 요소 배치하는 방식 3가지
 x 배치: 인라인
 y 배치: 블럭
 z 배치: 깊이

   - 문법:

      z-index: auto|값   // 기본은 auto 이고 0 과 동일
                        // 값이 작을수로 밑에 배치된다.

        양수
         0 (auto)
    음수
  1. 배경(background) 관련
  2. 배경색
문법:
   background-color: 색상;
  1. 배경 이미지
문법:
   background-image: url("경로")

   background-image: url("경로1"), url("경로2")  // 경로1이 가장 위에 보임

특징
   - x축 및 y 축으로 반복적으로 이미지가 출력됨
   - 배경색과 같이 사용가능.
  1. 배경 이미지 반복 제어

    문법:
    background-repeat: repeat-x|repeat-y|repeat(기본값)|no-repeat

  2. 배경 이미지 크기

 문법:

      background-size:auto(기본값)|px|contain|cover

    예>
      backgroudn-size: 너비값  높이값;
  예> backgroudn-size: 30px  50px;  // width:30px  height:50px

  backgroudn-size: contain

  ==> 처음부터 이미지를 보여주는 컨테이너(div)에 최대한 맞춰서 보여진다.
     화면을 작게하면 이미지도 같이 작아지고 화면을 크게하면 이미지도 같이 커진다. 단 일정 크기만 커진다.
     결국 이미지를 모두 볼 수 있음.

  backgroudn-size: cover

  ==> 이미지의 비율을 관리하기 때문에 처음부터 이미지 전체가 안 나올수 있음.
      화면을 작게하면 일정부분까지만 작아지기 때문에 화면이 잘려 보임.
      화면을 크게하면 비례해서 커지기 때문에 화면이 잘려 보임.
  1. 배경 이미지 위치
 문법:

      // 값 하나 지정 ( top/right/bottom/left 모두 적용 )
      background-position: x축|y축(px|%);

  // 값 두개 지정
  background-position: x축(px|%)  y축(px|%);
  background-position: bottom 10px right 20px;;
  1. 배경 이미지 scroll 여부
문법:

    background-attachment: scroll(기본)|fixed

13.크기 단위 ( unit )

1)단위 종류

  • px ( cm, inch )
  • %
  • rem ( em )
  • vw, vh

2) 적용 css 속성

  • width/height : %, vw. vh
  • font-size : rem
  • margin/padding/border : %, rem

border : px

  • position( top/right/bottom/left ) : %

    3) 단위 종류 2가지

    가. 절대 단위
    - px 만 사용하자.

    나. 상대 단위

    a. %
    • 기본적으로 부모 기준

    • position에 따라서 기준이 달라진다.

      position:static : 지정된 top,right,bottom,left 적용안됨.
      position:relative : 지정된 top,right,bottom,left 적용됨.
      기준은 static으로 지정했을 때의 기본 문서대열(document flow)이다.

      	position:fixed   :  지정된 top,right,bottom,left 적용됨.
      	                    기준은 웹 브라우저(뷰포트)이다.
      
       	position:absolute   :  지정된 top,right,bottom,left 적용됨.
      	                       부모에 position:relative로 지정되었으면 기준은 부모요소이고
      			       부모에 position 지정 안되 있으면 기준은 웹 브라우저(뷰포트)이다.
      
       -max-width 속성
      
       	=⇒ %를 사용하면 화면크기가 커지면 이미지가 계속 커질 수 있음. 이때 이미지의 부모 크기를 제한하면 더 이상 커지지 않을 수 있다. 문법→ max-width: 값

    b. vw, vh ( vw: viewport width, vh: viewport height )
    - 기준은 뷰포트 이다.

    예> vw, vh 사용하지 않는 경우

       <div>
    	  <h1> <== position:fixed;  width:50%
    
           vw, vh 사용하는 경우
    
       <div>
    	  <h1> <== width:50vw;

c. rem(em)

-글꼴에서 주로 사용됨.

-1rem(1em) = 16px(16px는 웹 브라우저에서 설정된기본글꼴크기)

가.em

-부모요소의 em값을 상속해서 글꼴크기가 정해짐

예>

←- 1.2em(16 * 1.2 = 19.2px)
←- 1.3em(16 * 1.2 * 1.3 = 24.96px)

나.rem(root em)☆

-root인 html(body) 상속해서 글꼴크기가 정해짐

-권장

예>

←- lem(16px)
←- 1.2em(16 * 1.2 = 19.2px)
←- 1.3em(16 * 1.3 = 20.8 px)

14.색상

1)영단어 표기(120여개 됨)

예> color:red|blue|…

2)16진수(0~15)

-#RRGGBB(6비트), #RGB(3비트)

-#FFFFFF(흰색)

#000000(검정)

예> color:#34F145;

3)10진수(0~255) + rgb(r,g,b)

-rgb(0~255, 0~255, 0~255)

-rgb(255,255,255) - 흰색

-rgb(0, 0, 0) - 검정색

예> color:rgb(0, 0, 0);

4)투명도(alpha)

-rgba(0~255, 0~255, 0~255, 0~1)

0: 완전투명

1: 완전불투명

예> color:rgba(0, 0, 0, 0.4);

15.visibility 속성

-요소를 보이거나 안보이게 설정가능.

문법:

visibility:visbile(기본)|hidden|collapse(

를 안보이게)

-display:non 차이점

displauy: none; // 화면 랜더링 방지. 영역유지 안됨

visibility: hidden; // 화면 랜더링 방지. 영역유지 됨

-visibility: collapse; //

화면 랜더링 방지. 영역유지 안됨

16.투명도(opacity) 속성

-요소의 투명도 제어

문법:

opacity: 값(0~1)

0: 완전투명

1: 완전불투명

17.글꼴(font)관련

1)글꼴 스타일

font-style: normal|italic|…

2)두께

font-weight: bold|bolder|ligher|100~900

3)사이즈

font-size: rem|px

4)글꼴 속성

-문법: font-family: 값1(font family), 값2(font family), 값3(generic family);

-값 종류 2가지

가.generic family

-실제 글꼴들의 카테고리로서

글꼴들이 가지는 특별한 주요 특징을 가짐.

-종류

serif

sans-serif

monospace(고정폭글꼴)

..

나.font family

-generic family에 속하는 실제 글꼴 의미

-serif : Times New Roman, Geogia <= 글꼴에 꼬리가 있음

sans-serif: consolas

-크롬 브라우저에서 글꼴 확인 방법

설정> 모양> 글꼴 맞춤 설정

표준 글꼴: Malgun Gothic <= font family

Serif: Batang <= generic family

Sans-serif: Malgun Gothic <=generic family

-웹 브라우저가 글꼴을 결정하는 방법 2가지

가.font-family 속성을 명시적으로 지정하지 않은 경우

-웹 브라우저에서 기본값으로 설정된 글꼴 이용해서 랜더링 됨. 따라서 표준 글꼴: Malgun Gothic 으로 랜더링 됨.

나.font-family 속성을 명시적으로 지정한 경우

a.generic family 만 지정한 경우

예> font-family: serif; <= Serif: Batang 적용

font-family: Sans-serif; <= Sans-Serif: Malgun Gothic 적용

b.font family 지정한 경우(가장 마지막에는 generic family를 지정)

예> font-family: ‘Consolas’, ‘Malgun Gothic’, serif

font-family: ‘Consolas’, ‘Malgun Gothic’, Sans-serif

5)글꼴관련 축약표현식

문법:

font: style weight size family;

예> font: italic bold 2rem ‘Consolas’, ‘Malgun Gothic’, serif

19.구글 폰트

-웹 폰트(web font)라고 부름.

-로컬에 글꼴이 없어도 사용 가능.

-https://fonts.google.com > filters 선택 > language: korean, Generic Family 선택(serif, sans-serif) > 원하는 글꼴 선택 > 오른쪽 상단 Get font 클릭 > Get Embed code 선택 > 복사해서 사용

20.text 관련 속성

1)색상

color: 값;

2)수평 정렬

text-align: center|left|right|justify(양쪽)

3)밑줄 및 취소선

text-decoration:underline|overline|line-through(취소선)

4)첫 라인 들여쓰기

text-indent: 10px;

5)줄 간격

-font-size = 16px 값에 비례해서 적용.

line-heihgt: 값

예> line-height: 1 <= 16px

line-height: 2 <= 32px

line-heihgt: 0.3 <= 4.8px

6)첫글자 대문자, 대문자, 소문자

text-transform: catalize|lowercase|uppercase

21.Flex Box 모델

1)개념

-전통적으로 레이아웃(layout)을 만드는 방법은 position 및 top/right/bottom/left 및 float 속성을 이용했음.

-Flex Box 이용하면 매우 쉽게 레이아웃 및 수직 정렬 및 요소 순서(ordering) 및 동적 사이징이 가능.

2)2가지 구성요소

-반드시 부모에 display:flex 지정해야 된다.

실행결과는

a.모든 item들이 가로(행) 배치됨.

b.명시적으로 지정된 height 제외하고 나머지는 가장 큰 height 값이 적용됨.

c.브라우저 화면을 줄이면 일정크기까지만 줄어듬.

만약에 display: inline-flex 지정하면 a와 b는 동일하고 브라우저 화면을 줄여도 요소 크기가 변경안됨.

-자식만 flex item으로 동작된다.(자손은 제외됨)

-item 배치는 가로(row, 행), 세로(column, 열) 가능

기본은 가로(row, 행)이다.

가.flex Container

-display: flex;

나.flex item

3)Flex box 속성

가.flex Container에서만 사용되는 속성

*2가지 축

주축:item 이 배치되는 방향의미

기본은 row

교차축: 주축에 수직인 방향의미

a.flex-direction 속성

-가로배치(가로) 또는 세로배치 설정

-문법: flex-direction: row(기본)|column|row-reverse|column-reverse

row: 기본값, 왼—> 오

row-reverse: 오—> 왼

column: 위 —> 아래

column-reverse: 아래 —> 위

b.flex-wrap 속성

-화면크기를 줄이면 어느정도까지는 축소되고 결국에는 item이 안보이게 된다.

축소되지 않고 다음줄에 보이게 설정하는 방법

-문법:

flex-wrap:nowrap(기본)|wrap|wrap-reverse

wrap: 상단기준(아래로 wrap됨)

wrap-reverse: 하단 기준(위로 wrap 됨)

-특징:

wrap 되면 기존의 최대 height 가졌던 요소가 원래 height로 변경됨.

계속 화면을 줄이면 하나의 열로 표현된다.

c.flex-flow 속성

-flex-direction 과 flex-wrap 한꺼번에 표현

-문법:

flex-flow: direction wrap

예> flex-flow: row wrap;

d.justify-content 속성

-주축에 대한 정렬

-문법:

justify-content:center|flex-start|flext-end|space-around|space-between|space-evenly

e.align-items 속성

-교차축에 대한 정렬

-문법:

align-items: center|flex-start|flex-end|stretch(기본)|baseline

stretch: item을 늘려서 container에 꽉 채운다.

center: 원래 height값을 가지고 center 정렬됨

flex-start: 요소의 위 테두리에 맞춰서 정렬됨.

flex-end: 요소의 아래쪽 테두리에 맞춰서 정렬됨.

baseline: 테두리가 아닌 요소의 실제 컨텐츠의 기준선에 맞춰서 정렬됨.

f.align-content 속성

-justify-content와 align-items 합성 기능

-wrap 항목에서만 적용됨.

-문법:

align-content: center|flex-start|flex-end|stretch(기본)|space-around|space-between|space-evenly

/////////////////////////////////////////////////////

나.flex item에서만 사용되는 속성

a.order 속성

-기본적으로 코드에 명시된 순서로 표현됨.

order 속성 이용하면 순서를 변경할 수 있다.

-문법:

order: 0; (0이 기본값)

-1 0 1

(앞) 기본 (뒤)

b.align-self 속성

-Container에서 설정된 align-items 속성(교차축 정렬)값을 재정의할 때 사용.

-문법:

align-self: center|flex-start|flex-end|stretch(기본)|baseline

c.flow-grow 속성

-화면을 크게할 때 item의 커지는 비율을 관리하는 방법.

-문법:

flow-grow: 0 (0이 기본값)

예>

flow-grow: 1로 지정하면 flow-grow: 0인 요소들이 모두 너비를 차지하고 나머지 영역을 flow-grow: 1이 차지한다.

flow-grow: 1, flow-grow: 3 로 지정하면 flow-grow: 0인 요소들이 모두 너비를 차지하고 나머지 영역을 flow-grow: 1은 1/4이 차지, flow-grow:3은 3/4이 차지한다.

d.flow-shrink 속성

-화면을 작게할 때 item의 작아지는 비율을 관리하는 방법.

-문법:

flow-grow: 1 (1이 기본값)

flow-shrink: 0 크기변경이 안됨.

e.flex-basis 속성

-item의 기본 크기 설정 용도.

일반적으로 width/height 사용함.

그런데 flex-basis 사용하면 width/height 덮어씀.

-문법:

flex-basis: auto|px|%

-동작방식

주축이 row인 경우: (width 고려)

flex-basis: auto <= width: 50px이면 flex-basis: 50px로 설정

flex-basis: 100px <= width: 50px이면 flex-basis: 100px로 설정

주축이 column 경우: (height 고려)

flex-basis: auto <= height : 50px이면 flex-basis: 50px로 설정

flex-basis: 100px <= height : 50px이면 flex-basis: 100px로 설정

22.Grid 모델

https://developer.mozilla.org/ko/docs/Glossary/Grid

1)개요

-FlexBox는 1차원인 행/열만 따로따로 제어가 가능했음.

-Grid는 2차원인 행/열만 같이 제어가 가능함.

2)2가지 구성요소

-반드시 부모에 display:gird지정해야 된다.

실행결과는 행으로 추가됨.(flex box는 열로 추가됨)

가.Grid Container

-display:grid;

나.Grid item

3)Grid 속성

가.Grid Container에서만 사용되는 속성

a.grid-auto-flow 속성

-item 배치

-문법:

grid-auto-flow: row(기본)|column

b.grid-template-columns 속성

-열을 생성

-문법:

grid-template-columns: 값1 값2 값3 값4

예> grid-template-columns: 20px 20px 20px 20px

grid-template-columns: repeat(4, 20px)

grid-template-columns: 20% 20% 20% 20%(기준은 Container)

grid-template-columns: repeat(4, 20%)

grid-template-columns: 20% 30px 20% 50px

grid-template-columns: 20% 30px 20% auto

grid-template-columns: 20px 30px 1fr 2fr(fr: fraction이고 나머지여백을 비율로 계산)

c.grid-template-rows 속성

-행을 생성

-문법:

grid-template-rows: 값1 값2 값3

나.Grid item 에서만 사용되는 속성

23.media 쿼리

나머지

-애니메이션

profile
itroqkfwk

0개의 댓글