ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTML & CSS ( 4. CSS 이해하기 / 5. 단위, 배경, 박스모델 / 6. 폰트,텍스트 / 7. 레이아웃 / 8. 미디어쿼리)
    팀플 2022. 5. 5. 12:40

    4. CSS 이해하기

    (1) CSS소개

    • Cascading Style Sheets
    • HTML(마크업 언어)를 꾸며주는 언어
    • HTML : 웹페이지 정보 표현 / CSS : HTML을 디자인

    (2) CSS 문법과 적용

    h1 { color: yellow; font-size:2em; }
    
    선택자(selector) - "h1"
    속성(property) - "color"
    값(value) - "yellow"
    선언(declaration) - "color: yellow", "font-size: 2em"
    선언부(declaration block) - "{ color: yellow; font-size:2em; }"
    규칙(rule set) - "h1 { color: yellow; font-size:2em; }"
    • HTML > attribute / CSS > property
    # 주석 Comment tags
    /* 내용 */
    1. Inline : 직접 선언
    <div style="color:red;"> 내용 </div>
    
    2. Internal : <style> 이용 / <head> 안에 위치
    <style> div {color: red;} </style>
    
    3. External : 외부 스타일 시트 이용
    div {color: red;}     ------ 외부 파일
    <link rel="stylesheet" href="css/style.css">

    (3) 선택자

    • 그룹화 Grouping
    # 선택자
    h1, h2, h3, h4, h5, h6 { color: yellow; }
    
    # 전체선택자
    * { color: yellow; }
    
    # 선언
    h1 { color: yellow; font-size: 2em; background-color: gray; }
    
    # 선택자&선언
    h1, h2, h3, h4, h5, h6 { color: yellow; font-size: 2em; background-color: gray; }
    • class 선택자
    .foo { font-size: 30px; }  --- class="foo"로 적용된 요소는 다 적용
    <p class="foo"> ... </p>
    
    # 다중클래스
    .foo { font-size: 30px; }
    .bar { color: blue; }
    <p class="foo bar"> ... </p>     --- foo 와 bar 2개 적용
    • id 선택자
    #bar { background-color: yellow; }
    <p id="bar"> ... </p>
    
    class선택자와 비슷
    .대신 #써야 함
    class 대신 id 속성 써야 함
    문서 내 유일한 요소에 사용
    구체성의 값이 class와 다름
    • 선택자의 조합
    /* 요소와 class의 조합 */
    p.bar { ... }
    
    /* 다중 class */
    .foo.bar { ... }
    
    /* id와 class의 조합 */
    #foo.bar { ... }
    
    
    # 단순 속성
    p[class] { color: silver; }  --- class 값
    p[class][id] { text-decoration: underline; } --- class 값/id 값
    
    # 정확한 속성
    p[class="foo"] { color: silver; }
    p[id="title"] { text-decoration: underline; }
    
    # 부분 속성
    [class~="bar"] : class 속성의 값이 공백으로 구분한 "bar" 단어가 포함되는 요소 선택
    [class^="bar"] : class 속성의 값이 "bar"로 시작하는 요소 선택
    [class$="bar"] : class 속성의 값이 "bar"로 끝나는 요소 선택
    [class*="bar"] : class 속성의 값이 "bar" 문자가 포함되는 요소 선택

    (4) 문서 구조 관련 선택자

    # 자손선택자
    div span { color: red; }  --- 공백으로 구분
    
    # 자식 선택자
    div > h1 { color: red; } ---  > 기호 / 공백 상관 x 
    
    # 인접형제 선택자
    div + p { color: red; } --- + 기호 / 공백 상관 x

    (5) 가상 선택자 / 가상 클래스

    # 문서 구조와 관련
    :first-child : 첫 번째 자식 요소 선택
    :last-child : 마지막 자식 요소 선택
    
    # 앵커 요소
    :link : 하이퍼 링크이면서 아직 방문하지 않은 앵커
    :visited : 이미 방문한 하이퍼링크를 의미
    
    # 사용자 동작
    :focus: 현재 입력 초점을 가진 요소에 적용
    :hover: 마우스 포인터가 있는 요소에 적용
    :active: 사용자 입력으로 활성화된 요소에 적용
    
    # 가상 요소
    :before : 가장 앞에 요소를 삽입
    :after : 가장 뒤에 요소를 삽입
    :first-line : 요소의 첫 번째 줄에 있는 텍스트
    :first-letter : 블록 레벨 요소의 첫 번째 문자

    (6) 구체성

    구체성은 선택자를 얼마나 명시적으로(구체적으로) 선언했느냐를 수치화한 

    구체성의 값이 클수록 우선으로 적용이 됨 (왼쪽에 있는 값부터 비교, 왼쪽이 클수록 높은 구체성)

    0, 1, 0, 0 : 선택자에 있는 모든 id 속성값
     0, 0, 1, 0 : 선택자에 있는 모든 class 속성값, 기타 속성, 가상 클래스
     0, 0, 0, 1 : 선택자에 있는 모든 요소, 가상 요소
     전체 선택자는 0, 0, 0, 0을 가진다.
     조합자는 구체성에 영향을 주지 않는다. (>, + 등)
    • 인라인 스타일 : 1,0,0,0 규칙 중 제일 큰 구체성을 가짐
    • !important : 구체성 없음, 모든 구체성을 무시하고 우선권을 가짐

    (7) 상속

    • 박스모델 속성은 상속되지 않음
    * { color: red; }
    h1#page { color: gray; }
    
    <h1 id="page">Hello, <em>CSS</em></h1>
    
    > color:Red
    • 상속되는 속성은 아무런 구체성을 가지지 못함

    (8) 캐스캐이딩 Cascading

    • 규칙

      1. 중요도(!important)와 출처

         - !important 로 선언된 규칙을 최우선

         - 출처는 제작자, 사용자, 사용자 에이전트로 구분

      2. 구체성

         - 구체성이 높은 규칙을 우선

      3. 선언 순서

         - 뒤에 선언된 규칙을 우선

    5. 단위, 배경, 박스모델

    (1) 단위

    • 절대 길이
    px ( 1px = 1/96th of 1 inch )
    pt ( 1pt - 1/72 of 1 inch )
    • 상대길이
    % : 부모의 값에 대해서 백분율로 환산한 크기를 갖게 됩니다.
    em : font-size를 기준으로 값을 환산합니다. 소수점 3자리까지 표현 가능합니다.
    rem : root의 font-size를 기준으로 값을 환산합니다.
    vw : viewport의 width값을 기준으로 1%의 값으로 계산됩니다.

    (2) 색상

    • 컬러키워드
    • 16진법 : #RRGGBB / 
    • RGB(R,G,B)  : 0~255 / 검>흰
    • RGBA(R,G,B,A) : a는 투명도 / 0~1의 값 / 소수점 표기 / 투명 > 불투명 

    (3) Background

    • background-color : 배경의 색상 지정
    • background-image : url() : 배경의 이미지 지정
    • background- repeat : 반복여부
    repeat : x, y축 으로 모두 반복합니다.
    repeat-x : x 축 방향으로만 반복합니다.
    repeat-y : y 축 방향으로만 반복합니다.
    no-repeat : 이미지를 반복하지 않습니다.
    • background-position : 위치지정
    % : %만큼 떨어진 곳
    px : px만큼 떨어진 곳
    키워드 : top, bottom 은 y축 기준
    		left, right 는 x축 기준
    • background-attachment : 화면 스크롤에 따른 배경이미지 움직임 여부
    scroll : 배경 이미지는 요소 자체를 기준으로 고정, 내용과 함께 스크롤 안 됨
    local : 배경 이미지는 요소의 내용을 기준으로 고정, 내용과 함께 스크롤 됨
    fixed : 배경 이미지는 뷰포트를 기준으로 고정, 스크롤에 영향 x

    (4) Box model

    • border-width : 선의 굵기
    • border-style : 선의 모양 지정
    none : 표시 x
    solid : 실선
    double : 이중실선
    dotted : 점선
    # 축약
    border: [-width] [-style] [-color];

    (5) Padding

    • 요소의 안쪽 여백
    • length : 고정 값 / percent : 상대적인 크기 
    padding: [-top] [-right] [-bottom] [-left];

    (6) Margin

    • 요소의 바깥 여백
    • length : 고정 값 / percent : 상대적인 크기 / auto : 브라우저에 의해 계산된 값
    margin: [-top] [-right] [-bottom] [-left];

    (7) Margin & Padding

      + - auto 단위

    Margin

    o o o px, % ...  

    Padding

    o x x px, % ...  

    (8) Width 가로 크기 / Height 세로 크기

    • auto : 자동 / length : 고정값 / percent : 상대적인 크기
    • auto가 아닌 값을 지정하면 margin을 제외한 모든 영역에 대해 영향을 받음

    6. 폰트, 텍스트

    (1) Typography

    (2) 글꼴 Font-family

    font-family: family-name | generic-family ( | initial | inherit );
    • family-name: 사용할 폰트의 이름 / 여러개 선언 가능 / 한글일 경우 '돋움' 
    • generic-family : family-name으로 지정할 수 없을 때 선택가능하게 함

    (3) 줄 간격 Line-height

    line-height: normal | number | length | initial | inherit ;
    • 텍스트 라인의 높이 / 행간 제어

    (4) 글꼴 크기 Font-size

    font-size: keyword | length | initial | inherit ;
    • small / medium / large ...  

    (5) 글꼴 굵기 Font-weight

    font-weight: normal | bold | bolder | lighter | number | initial | inherit ;

    (6) 글꼴 스타일 Font-style

    • em : 강조 / italic체
    • normal : font-family 에 분류된 기본 값
    • italic : italic 스타일
    • oblique : oblique 스타일 / 기울기 각도 지정 가능

    (7) 글꼴 변환 Font-variant

    font-variant: normal | small-caps | initial | inherit ;
    • font-variant : small-caps : 소문자를 작은 대문자로 변형

    (8) 글꼴 속성의 축약형

    font: font-style font-variant font-weight font-size/line-height font-family | initial | inherit;
    • font-size와 font-family는 반드시 선언해야 함
    • 빠진 속성이 있으면 기본 값으로 지정
    • 각 속성의 선언 순서를 지켜야 함

    (9) 웹 폰트 @Font-face 

    @font-face { 
        font-properties 
    }
    • 웹페이지에 있는 글꼴을 컴퓨터로 다운로드하여 적용

    (10) 수직 정렬 Vertical-align

    vertical-align: keyword | length | percent | initial | inherit ;
    • 인라인 요소 또는 테이블 셀 상자의 수직 정렬 지정
    • 대부분 부모요소에 상대적으로 정렬됨

    (11) 수평 정렬 Text-align

    text-align: left | right | center | justify | initial | inherit ;
    • inline-level 에 적용 / block-level에 정렬 x
    • block 요소를 가운데 정렬하고 싶다? margin:auto

    (12) 텍스트 들여쓰기 Text-indent

    text-indent: length | initial | inherit;
    • 음수 값 사용 가능 . 사용 시 왼쪽으로 이동

    (13) 텍스트 장식 Text-decoration

    text-decoration: text-decoration-line text-decoration-color text-decoration-style | initial | inherit;
    
    # text-decoration-line 
    none : 아무것도 없음 / 기본값
    underline : 밑줄
    overline : 윗줄
    line-through : 중간줄
    
    # text-decoration-color
    색깔 지정
    
    # text-decoration-style 
    solid : 한줄 / 기본값
    double : 이중선 
    dotted : 점선 
    dashed : 파선
    wavy : 물결

    (14) 단어 관련 속성

    normal : 공백과 개행을 무시, 필요한 경우에 자동 줄바꿈
    nowrap : 공백과 개행을 무시, 자동 줄바꿈이 일어나지 않음.
    pre : 공백과 개행을 표현, 자동 줄바꿈이 일어나지 않음.
    pre-line : 공백은 무시, 개행만 표현. 필요한 경우에 자동 줄바꿈 발생.
    pre-wrap : 개행은 무시, 공백만 표현. 필요한 경우 자동 줄바꿈 발생.
    • letter-spacing 자간
    letter-spacing: normal | length | initial | inherit;​
    • word-spacing 단어 사이의 간격
    word-spacing: normal|length|initial|inherit;
    • word-break 단어가 라인 끝에 나올 경우, 어떻게 처리할 것인지 지정
    word-break: normal | break-all | keep-all | initial | inherit;
    
    normal : 기본 값. 중단점은 공백이나 하이픈(-)(CJK는 음절)
    break-all : 중단점은 음절. 모든 글자가 요소를 벗어나지 않고 개행
    keep-all : 중단점은 공백이나 하이픈(-)(CJK는 그 외 기호도 포함)
    • word-wrap 요소를 벗어난 단어의 줄바꿈
    word-wrap: normal|break-word|initial|inherit;
    
    normal : 기본 값. 중단점에서 개행
    break-word : 모든 글자가 요소를 벗어나지 않고 강제로 개행

    7. 레이아웃

    (1) Display

    • 렌더링 박스 유형을 결정
    display: value;
    
    none : 요소가 렌더링 되지 않음
    inline : inline level 요소처럼 렌더링
    block : block level 요소처럼 렌더링
    inline-block : inline level 요소처럼 렌더링(배치)되지만 block level의 성질을 가짐
    		* height 나 width 등과 같은 박스모델 속성을 적용할 수 있다
    display width height margin padding border
    block O O O O O
    inline X X 좌/우 O O
    inline-block O O O O O

    (2) Visivility

    • 요소를 어떻게 숨길 것인지 결정
    visibility: visible | hidden | collapse | initial | inherit;
    
    visible : 화면에 표시
    hidden : 화면에 표시되지 않음(공간은 차지함)
    collapse : 셀 간의 경계를 무시하고 숨김(테이블 관련 요소에만 적용 가능)
    
    # display : none 과 차이점
    display : none > 요소가 렌더링 되지 않음
    visibility : hidden > 요소가 보이지 않지만 렌더링 되어 화면에 공간이 있음

    (3) Float

    float: none | left | right | initial | inherit;
    • 요소를 보통의 흐름에서 벗어나 띄워지게 함
    • 주변 텍스트나 인라인 요소가 주위를 감싸는 특징
    • 대부분 요소의 display 값을 block으로 변경 (display 값 변경 예외: inline-table, flex 등)

    (4) Clear 

    clear: none | left | right | both | initial | inherit;
    • floating 된 요소의 영향에서 벗어나 다음 행으로 이동
    • block-level 요소만 적용 가능

    (5) Position

    position: static | absolute | fixed | relative | sticky | initial | inherit;
    
    static : offset 적용 x
    absolute : 부모를 기준으로 배치됨 / 흐름에서 벗어남 / 부모가 static 아니어야 함
    fixed : 부모의 위치에 영향 x / 브라우저를 기준으로 배치
    relative : 부모의 영향 x / 원래 있어야 할 위치를 기준으로 배치
    • 요소의 위치를 원하는 곳으로 이동시킬 때 사용

    (6) z-index

    z-index: auto | number | initial | inherit;
    
    auto : 쌓임 순서를 부모와 동일하게 설정(기본값)
    number : 해당 수치로 쌓임 순서를 설정(음수 허용)
    • position 값이 static이 아닌 경우 지정가능
    • 순서 값이 없을 경우 생성순서(코드상 순서)에 따라 쌓임
    • 부모가 z-index 값이 있을 경우 부모 안에서만 의미있음
    • 큰 값이 가장 위쪽(음수 사용 가능)
    • 부모 z-index끼리 값이 같으면 자식 z-index 값이 큰 게 위로 올라감 / 부모가 작으면 자식이 커도 밑으로 내려감

    8. 미디어쿼리

    (1) 미디어쿼리 소개

    • 각 미디어 매체에 따라 다른 스타일 시트를 적용할 수 있게 만드는 것

    (2) 미디어 타입 & 미디어 특성

    @media mediaqueries { /* style rules  */ }
    
    at media : 미디어 쿼리를 시작한다.
    mediaqueries 가 참이면 { 스타일 규칙 } 적용
    
    # 미디어 타입
    all, print, screen 
    
    # 미디어 특성
    width , orientation (세로모드/가로모드 구분)

    (3) 미디어쿼리 Syntax

    s* : 공백
    [ a ] : a가 나올 수도, 나오지 않을 수도
    a | b : a 또는 b 둘 중에 하나를 선택
    a? :  a가 0번 나오거나 1번만 나올 수 있음
    a* : a가 0번 나오거나 그 이상 계속 나올 수 있음

    (4) 실습

    디스플레이 크기에 따른 background-color 변경

    # mobile first
    
    body { background-color: gold; }
    @media (min-width: 768px) and (max-width: 1024px) {
    	body { background-color: lightblue; }
    }
    @media (min-width: 1025px) {
    	body { background-color: lightpink; }
    }
    
    
    # desktop first
    body { background-color: lightpink; }
    @media (min-width: 768px) and (max-width: 1024px) {
    	body { background-color: lightblue; }
    }
    @media (max-width: 767px) {
    	body { background-color: gold; }
    }
Designed by Tistory.