강의노트

입문자를 위한 CSS 기초 강의 (유노코딩)

꼽파 2023. 3. 29. 20:49
  • CSS란? CSS의 역할 알아보기!
  • 기본 문법 및 사용 방법
  • 선택자 1편
  • 텍스트 꾸미기 속성
  • display 속성 & border 속성
  • 박스모델 1편, 박스모델 소개
  • 박스모델 2편, margin padding 다루기
  • 박스모델 3편, box-sizing
  • 박스모델 4편, background
  • float 그리고 clear
  • position 1편, relative absolute
  • position 2편, fixed sticky
  • flexbox 1편, 정의 및 사용 방법
  • flexbox 2편, 몇 가지 관련 속성
  • 선택자 2편, 특성 선택자와 결합자
  • 의사클래스(가상클래스)
  • 의사요소
  • inherit, initial, unset
  • z-index

  • CSS란? CSS의 역할 알아보기!

    • CSS : Cascading Style Sheets

     

    Cascading : 계단식

    Style : 멋을 내다

    Sheets : (종이) 한 장

    → 계단식으로 스타일을 정의하는 문서!

     

    CSS는 HTML 문서에 스타일을 더해줌.

    HTML 문서는 태그가 태그를 포함하는 계단식 구조를 지니고 있음.

     

    • CSS가 일하려면

    - CSS 문서(코드) 자체는 독립적으로 존재할 수 있지만, 그 목적이 구조화된 HTML 문서의 스타일을 정의하는 데 있으므로 HTML 문서가 없는 CSS 문서는 사실상 의미가 없음.

     

    - HTML : 웹 문서의 콘텐츠를 구성하는 언어

    - CSS : 웹 문서의 콘텐츠에 스타일을 추가하는 언어 (색상, 크기, 위치 등)

     

    HTML과 함께 사용되지 않는 CSS는 단순 텍스트일 뿐이며, 

    웹브라우저를 통해 결과물을 확인하기 위해서는 반드시 HTML 문서 작성이 선행되어야 함.


    기본 문법 및 사용 방법

    CSS 기본 문법

     

    선택자{

      속성명: 속성값;

    }

     

    • 선택자 : 어떤 요소에 스타일을 적용할 지에 대한 정보

     {중괄호} : 선택한 요소에 적용할 스타일을 정의하는 영역

     속셩명 : 어떤 스타일을 정의하고 싶은지에 대한 정보 (색상, 크기 등)

     속성값 : 어떻게 정의하고 싶은지에 대한 정보

     

    CSS 기본 문법 사용 예

     

    p{

       color: red;

    }

     

    → 그러면 p 태그가 이렇게 됩니다

     

     선택자 : p태그에 스타일을 적용하겠다.

     {중괄호} : 이 안에 p태그에 대한 스타일을 정의하겠다.

     속성명 : color를 정의하겠다. 이건 글자색을 의미한다.

     속성값 : red로 정의하겠다. 빨간색 글자를 원한다.

     

    주석

     

    p{

      /*

     이 안에 작성하면

     주석으로 처리된다

     */

     /* color: red; */

    }

     

     주석은 사람에게는 보이지만, 컴퓨터(웹브라우저)에게는 보이지 않는 코드임.

     주로 코드에 대한 메모를 남기기 위한 용도로 사용됨.

     

    HTML에 CSS를 더하려면

     

    HTML 문서에 CSS문서(코드)를 적용하는 방식

    인라인 스타일 : 태그에 직접 기술하기

    스타일 태그 : 스타일시트를 위한 태그를 추가하여 기술하기

    문서 간의 연결 : 스타일시트 문서를 따로 작성하여 HTML 문서와 연결하기

     

    인라인 스타일

     

    태그에 style 속성을 추가하여 요소에 직접적으로 스타일을 정의하는 방식, 선택자가 필요 없음.

    웹 콘텐츠와 스타일시트를 분리하기 위해서는 사용하지 않는 편이 좋음.

    (코드 유지보수가 어려움)

     

    <p style="color: blue;">

     글자를 파랗게 만들어줘

    </p>

     

    스타일 태그

     

    HTML 문서에 <style></style> 태그를 추가하여 그 안에 CSS 코드를 작성할 수 있음.

     

    <style>

      /* style 태그 안에는 CSS 코드를 작성해야 한다 */

      p{ color: red; }

    </style>

     

     

    문서 간의 연결

     

    확장자가 *.css인 스타일시트 파일을 생성해 그 안에 CSS 코드를 작성하고,

    HTML문서에 이를 연결해줄 수 있음. 이때는 <link> 태그를 사용함.

     

    <link href="./style.css" rel="stylesheet">

     

    href : 연결하고자 하는 외부 소스의 url을 기술하는 속성

    rel : 현재 문서(HTML)와 외부 소스의 연관 관계를 기술하는 속성

    → <link> 태그는 HTML 문서의 <head></head> 내부에서 사용해야 함.

     


    선택자 1편

    선택자

     

    선택자{

      속성명: 속성값;

    }

     

    선택자 : 어떤 요소에 스타일을 적용할 것인지에 대한 정보

    기본 선택자

    그룹 선택자

    • 특성 선택자

    • 결합 선택자

    • 의사 클래스

    • 의사 요소

     

    기본선택자

     

    1. 전체 선택자

     

    모든 요소를 선택한다.

    *(애스터리스크)는 '문서 내의 모든 요소'를 의미하는 기호

     

    *{

        color: blue;

    }

    → 문서 내 모든 요소의 글자 색을 파란색으로 지정함.

     

     

    2. 태그 선택자

     

    주어진 이름을 가진 요소를 선택함. (유형 선택자)

    주어진 이름을 가진 요소가 다수일 경우, 해당 요소들을 모두 선택함.

     

    p{

      color: blue;

    }

    문서 내 모든 p태그 요소의 글자 색을 파란색으로 지정함.

     

    3. 클래스 선택자

     

    주어진 class 속성값을 가진 요소를 선택함.

    주어진 class속성값을 가진 요소가 다수일 경우, 해당 요소를 모두 선택함.

     

    .text{

      color: blue;

    }

    문서 내 class가 'text'인 모든 요소의 글자 색을 파란색으로 지정함.

     

    4. 아이디 선택자

     

    주어진 id 속성값을 가진 요소를 선택함.

    id는 고유한(unique) 식별자 역할을 하는 전역 속성

    (class는 동일한 속성값을 가진 요소가 여러 개 있을 수 있지만, id는 문서 내에서 고유한 값을 가짐.)

     

    #topic{

      color: blue;

    }

    문서 내 id가 "topic"인 요소의 글자 색을 파란색으로 지정함.

     

    그룹 선택자

     

    다양한 유형의 요소를 한꺼번에 선택하고자 할 때 사용함.

    쉼표(,)를 이용해 선택자를 그룹화함.

     

    h1, p, div{

      color: blue;

    }

    → 문서 내 모든 h1, p, div 태그 요소의 글자 색을 파란 색으로 지정함.

     

    ※ 선택자가 겹치는 경우

    - 기본적으로 나중에 작성된 스타일이 적용됨.

    - 선택자가 다르지만 요소가 겹치는 경우, 선택자 우선순위에 의해 적용될 스타일이 결정됨.

    아이디 선택자 > 클래스 선택자 > 태그 선택자 

     

    아이디 선택자가 더 우선순위이므로,

    p선택자에 지정된 red가 아닌 id 선택자에 지정된 green이 표시됨.


    텍스트 꾸미기 속성

     

    font-family : 글꼴을 정의한다.

    font-size : 글자 크기를 정의한다.

    text-align : 정렬 방식을 정의한다.

    color : 글자 색상을 정의한다.

     

    font-family

    요소를 구성하는 텍스트의 글꼴을 정의함.

    글꼴명을 속성값으로 지정함.

    여러 개의 글꼴을 연달아 기입하여 우선순위를 지정할 수 있음.

     

    *{

        font-family: times, monospace, serif;

    }

    → Times를 우선 지정하되, 지원되지 않을 경우 monospace를 지정한다.

     

    산돌마니또가 우선 적용되어야 하는데, 컴퓨터에 없기 때문에 그 다음 폰트인 serif가 적용됨. 

     

    font-size

     

    수치와 단위를 지정해 글자의 크기를 정의할 수 있음.

    px : 모니터 상의 화소 하나 크기에 대응하는 절대적인 크기

    rem : <html> 태그의 font-size에 대응하는 상대적인 크기

      html태그는 html문서의 최상위요소임. 거기의 몇 배의 폰트 사이즈인지 지정함.

    em : 부모태그(상위태그)의 font-size에 대응하는 상대적인 크기

     

    사용 예)

    span{ font-size: 16px; }

    span{ font-size: 2rem; }

    span{ font-size: 1.5rem; }

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          html{ font-size: 18px }
          h1{ font-size: 2rem; }
          p{ font-size: 16px; }
          span{ font-size: 5em; }
         </style>
      </head>
      <body>
        <!-- 크기 지정하지 않은 폰트 기본 크기
        h1은 32px, p는 16px-->
        <h1>아무 내용</h1>
        <p>하하 반가워요! ^^
        <span>호호홋!</span></p>
      </body>
    </html>
     
     

    text-align

    블록 내에서 텍스트의 정렬 방식을 정의함. 미리 정의된 키워드 값을 지정함.

    left / right : 왼쪽 또는 오른쪽 정렬한다.

    center : 가운데 정렬한다.

    justify : 양끝 정렬한다(마지막 줄 제외)

     

    사용 예)

    p{ text-align: right; }

     

     

    Color

    텍스트의 색상을 정의함. 다양한 방법으로 색상을 지정할 수 있음.

    키워드 : 미리 정의된 색상별 키워드를 사용함(ex. red, blue 등)

    RGB 색상 코드 : # + 여섯자리 16진수 값 형태로 지정함.

    RGB 함수 : Red, Green, Blue의 수준을 각각 정의해 지정함.

     

    사용 예)

    span{ color: red; }

    span{ color: #FF0000; }

    span{ color: rgb(100%, 0%, 0%); }

     

    RGB :

    빛의 삼원색(Red, Green, Blue)을 혼합하여 색을 정의하는 방식

    모든 수치가 가장 높을 때 흰색이 됨.

     

    /* R: 00, G: 00, B: 00 */

    span{ color: #000000; }

     

    /* R: 70%, G: 10%, B: 20% */

    span{ color: rgb(70%, 10%, 20%); }

     


    display 속성 & border 속성

    블록 레벨 요소 vs 인라인 요소

     

    블록 레벨 요소 : 

    자기가 속한 영역의 너비를 모두 차지하여 블록을 형성함.

    (ex. div, p, h1 등)

     

    인라인 요소 :

    자기에게 필요한 만큼의 공간만 차지한다.

    (ex. span, a 등)

     

    display 속성

     

    요소를 블록과 인라인 요소 중 어느 쪽으로 처리할지 정의함.

     

    /*

    블록 레벨 요소인 div 요소를 인라인으로 처리하고 싶다면

    */

    div{ display: inline; }

     

    /*

    인라인 요소인 a 요소를 블록 레벨로 처리하고 싶다면

    */

    a{ display: block; }

     

    display에는 미리 정의되어 있는 키워드를 속성값으로 지정함.

    inline : 인라인으로 처리함.

    block : 블록 레벨로 처리함.

    inline-block : 인라인으로 배치하되, 블록 레벨 요소의 속성을 추가할 수 있도록 처리함.

    none : 디스플레이(표시)하지 않음.

     

    border 속성

     

    border 속성을 사용하면 요소가 차지하고 있는 영역에 테두리를 그릴 수 있음,

    단축속성 : border 속성에는 속성값으로 테두리의 두께, 모양, 크기 등을 함께 지정할 수 있음.

     

    span{ border: 2px solid green; }

    → 두께가 2px인 직선 모양(solid)의 초록(green) 테두리를 만들어줘!

     

    border속성의 하위 속성

     

    border-color : color 정의 방식과 동일

    border-width : thin, medium, thick 등의 키워드 또는 px, em, rem 등의 단위

    border-style : none(기본값), solid(직선), dotted(점선), dashed(긴 점선) 등

     

    display: inline 지정으로 필요한 영역에만 블록이 생김.

     

    display: none 지정시 보이지는 않지만, 요소에서 사라진 것이 아님.

     

    display: inline-block;

    inline처럼 배치하되 블록의 속성은 가질 수 있음.

     

    inline요소는 기본적으로 자기가 필요한 영역만 차지하기 때문에, 높이와 너비를 임의로 조정할 수 없음.

    그러나 block은 조정 가능함.


    박스모델 1편, 박스모델 소개

     

    박스모델 (Box-Model)

     

    브라우저가 요소를 렌더링 할 때, 각각의 요소는 기본적으로 사각형 형태로 영역을 차지하게 됨.

    이 영역을 '박스'라 표현하며, CSS는 박스의 크기, 위치, 속성(색, 배경, 테두리 모양 등)을 결정할 수 있음.

     

    하나의 박스는 다음 네 개의 영역으로 구성됨.

    • 콘텐츠 영역

    • 안쪽 여백

    • 경계선 (테두리)

    • 바깥쪽 여백

    출처 : 유노코딩

    박스 각 영역의 크기

     

    콘텐츠 영역 : width, height

    안쪽 여백 : padding

    바깥쪽 여백 : margin

    테두리 : border-width

     


    박스모델 2편, margin padding 다루기

     

    다양한 경우의 수

     

    여백은 상하좌우 네 개의 면에 존재하는 영역이다.

    각 면에 개별적으로 두께를 정의하는 방법 2개

     

    • 하위 속성 정의하기

    • 여러 값을 한 번에 정의하기

     

    padding과 margin에 동일한 접미사를 붙여서 개별 정의할 수 있음.

     

    padding: 10px;, margin: 20px; 있어도 밑에 있는 속성값들이 적용됨.

     

    여러 값을 한 번에 정의하기

     

    padding과 margin은 네 면의 여백에 대한 단축속성

     

    span{

      display: inline-block;

      width: 100px; height: 100px;

      margin: 10px 20px 30px 40px; ---> 위/오른쪽/아래/왼쪽

    }

     

    margin: 10px 30px 20px 40px

    2개인 경우 : 1) 위/아래, 2) 좌/우

    3개인 경우 : 1) 위, 2) 좌/우, 3) 아래

    4개인 경우 : 1) 위, 2) 좌, 3) 우, 4) 아래 [시계방향]

     


    박스모델 3편, box-sizing

    출처 : 유노코딩

    박스모델(Box model)

    콘텐츠 영역 : 개발자가 태그 안에 표시해주는 너비, 높이 수치를 지정해 주어서 그 크기를 조절할 수 있음. 

    안쪽 여백 : padding 속성을 통해 정함. 테두리 안쪽에 여백을 두어서 테두리와 콘텐츠 사이의 공간 확보.

    경계선(테두리) : 콘텐츠를 감싸주어 요소와 요소가 아닌 공간 사이에 경계선을 그어주는 역할을 함. 이는 border속성을 활용하면 그 두께를 조절할 수 있음.

    바깥쪽 여백 : 해당 요소와 다른 요소 사이에 여백을 두어서 요소와 요소 사이의 공간을 확보하는 역할을 함.

     

    콘텐츠 영역, 안쪽 여백, 경계선(테두리) → 실제 요소의 크기로서 역할

    바깥쪽 여백   요소간 거리를 벌려주는 역할

     

    box-sizing

    box-sizing 속성은 요소의 너비(witdth)와 높이(height)를 계산하는 방법을 지정함.

    • content-box : 기본값. 너비와 높이가 콘텐츠 영역만을 포함함.

    • border-box : 너비와 높이가 안쪽 여백과 테두리까지 포함함.

    → 너비와 높이가 같더라도, box-sizing 속성값에 따라 크기가 달라질 수 있음.

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          div{
            box-sizing: content-box;
            width: 100px; height: 100px;
            border: 5px solid tomato;
            padding: 30px;
          <!-- 세 영역의 크기를 합쳐서 계산해야 됨-->
          }
         </style>
      </head>
      <body>
        <div>위아래는 10, 좌우는 20</div>
      </body>
    </html>

    박스모델 4편, background

    background

    배경(background)은 콘텐츠의 배경을 정의함.

    단축 속성으로써 색상, 이미지, 반복 등 다양한 하위 속성을 정의할 수 있음.

     

    background-color : 배경 색을 정의함.

    background-image : 배경 이미지를 정의함.

    background-position : 배경 이미지의 초기 위치를 정의함.

    background-size : 배경 이미지의 크기를 정의함.

    background-repeat : 배경 이미지의 반복 방법을 정의함.

     

    사용하는 이미지 소스 크기가 요소의 크기보다 작은 경우

    → 바둑판으로 반복해서 채움

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          div{
            box-sizing: border-box;
            width: 500px; height: 500px;
            border: 1px solid red;
            background-image: url(./fodd.jpg);
            background-repeat: no-repeat; → 반복하지 않게 함.
          }
         </style>
      </head>
      <body>
        <div>헬로우</div>
      </body>
    </html>

    내가 사용한 이미지 소스는 지정한 픽셀값보다 큼

    background-position으로 위치 지정해주면 콘텐츠 영역 안에서 움직임.

     

    박스 크기가 500x500이므로 이미지가 안에 꽉 차게 됨.

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          div{
            box-sizing: border-box;
            width: 500px; height: 500px;
            border: 1px solid red;
            background-image: url(./fodd.jpg);
            background-repeat: no-repeat;
            background-position: center bottom;
            background-size: cover;
            <!-- cover는 이미지의 비율이 깨지지 않는 선에서
              최대 사이즈로 나옴-->
            background-size: contain;
            <!-- contain은 이미지가 찌그러지거나 잘리지 않은 한도에서
              최대 사이즈로 나옴-->

          }
         </style>
      </head>
      <body>
        <div>헬로우</div>
      </body>
    </html>

     

    background-size: cover;
    이미지의 비율이 깨지지 않는 선에서최대 사이즈로 나옴

     

    background-size: contain;
    이미지가 찌그러지거나 잘리지 않은 한도에서 최대 사이즈로 나옴

     

    background: no-repeat url

    background: url no-repeat 

    순서 바꿔써도 상관없음.

    → 하위 속성을 한 번에 정의할 경우, 정의할 속성과 정의를 생략할 속성을 다양하게 선택할 수 있어서 여러 경우의 수가 존재함.


    float 그리고 clear

     

    float

    요소가 문서의 일반적인 흐름에서 제외되어 자신을 포함하고 있는 컨테이너의 왼쪽이나 오른쪽에 배치되게 하는 속성.

    • none : 기본값, 원래 상태

    • left : 자신을 포함하고 있는 박스의 왼편에 떠 있어야 함.

    • right : 자신을 포함하고 있는 박스의 오른편에 떠 있어야 함.

    → 문서의 흐름에선 제외되지만, 필요한 만큼의 공간은 차지함.

     

     

    clear

    clear 속성은 float 요소 이후에 표시되는 요소가 float을 해제(clear)하여 float 요소의 아래로 내려가게 할 수 있음.

    • none : 기본값, 아래로 이동되지 않음을 나타내는 키워드

     left : float이 left인 요소의 아래로 내려가겠다

     right : float이 right인 요소의 아래로 내려가겠다

     both : float이 left 및 right인 요소의 아래로 내려가겠다

    clear : both;를 사용하면 한방에 해결

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          #a{ width: 100px; height: 50px;
          background-color: orange;
          float: right;}
          #b{ width: 100px; <span style="color: #

     

    position 2편, fixed sticky

    fixed

    요소를 일반적인 문서 흐름에서 제거하고, 지정된 위치에 고정시킴.

     

    .pos{

      width: 200px; height: 200px;

      background: peru;

      position: fixed;

      top: 50px; left: 50px;

    }

    → 위에서부터 50px, 왼쪽에서부터 50px 떨어진 자리에서 움직이지 않음.

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          .pos{
            width: 200px; height: 200px;
            background: tomato;
            position: fixed; top: 50px; left: 50px;
          }
         </style>
      </head>
      <body>
        <div>
          첫번째<br/>첫번째<br/>첫번째<br/>첫번째<br/>
          첫번째<br/>첫번째<br/>첫번째<br/>첫번째<br/>
          첫번째<br/>첫번째<br/>첫번째<br/>첫번째<br/>
          첫번째<br/>첫번째<br/>첫번째<br/>첫번째<br/>
          첫번째<br/>첫번째<br/>첫번째<br/>첫번째<br/>
          첫번째<br/>첫번째<br/>첫번째<br/>첫번째<br/>
          첫번째<br/>첫번째<br/>첫번째<br/>첫번째<br/>
        </div>
        <div class="pos"></div>
        <div>
          두번째</br>두번째</br>두번째</br>두번째</br>
          두번째</br>두번째</br>두번째</br>두번째</br>
          두번째</br>두번째</br>두번째</br>두번째</br>
          두번째</br>두번째</br>두번째</br>두번째</br>
          두번째</br>두번째</br>두번째</br>두번째</br>
          두번째</br>두번째</br>두번째</br>두번째</br>
          두번째</br>두번째</br>두번째</br>두번째</br>
        </div>
      </body>
    </html>

     

    sticky;

    요소를 일반적인 문서 흐름에 따라 배치하고, 스크롤(scroll) 되는 가장장 가까운 상위 요소에 대해 오프셋을 적용함.

     

    .pos{

      width: 200px; height: 200px;

      background: peru;

      position: sticky;

      bottom: 0px;

    }

    → 스크롤 이동으로 요소가 움직여도 스티키 요소는 고정된 상태를 유지함.

     

    스크롤 쭈욱 내려서 첫번째 요소(첫번째로 도배된 글자들) 끝나고부터

    위에서 100px, 오른쪽에서 130px 떨어진 곳에 쭈욱 고정됨. 


    flexbox 1편, 정의 및 사용 방법

    flexbox

    박스 내 요소 간의 공간 배분과 정렬 기능을 제공하기 위한 1차원 레이아웃 모델

    flexbox를 1차원 모델이라 부르는 이유 : 레이아웃을 다룰 때 한번에 하나의 차원(행이나 열)만을 다룬다는 특성 때문임.

     

    <div>

      <div class="item">하나</div>

      <div class="item">둘</div>

      <div class="item">셋</div>

    </div>

     

     

    flexbox를 flex 컨테이너라고도 함(요소들을 포함하기 때문).

    flex 컨테이너를 만들기 위해서는 컨테이너에 display:flex;를 적용해야 함.

     

    <div style="display: flex;">

      <div class="item">하나</div>

      <div class="item">둘</div>

      <div class="item">셋</div>

    </div>

     

    flex 컨테이너는 기본적으로 요소를 행(가로)방향으로 요소를 배치함.

     

    flexbox에는 주축(main-axis)과 교차축(cross-axis)이 있음.

    사용자는 목적에 따라 주축과 교차축을 바꿔가며 레이아웃을 결정할 수 있음.

    세로방향=주축  --->  가로방향=교차축

     

    flex-direction

    flexbox 내 요소를 배치할 때 사용할 주축 및 방향(정방향, 역방향)을 지정함.

     

    row : 기본값. 주축은 행, 방향은 콘텐츠의 방향과 동일.

    row-reverse : 주축은 행, 방향은 콘텐츠의 방향과 반대.

    column : 주축은 열, 방향은 콘텐츠 방향과 동일.

    column-reverse : 주축은 열, 방향은 콘텐츠 방향과 반대.

     

    flex-direction: row; -> 행

    flex-direction: row; -> 열

    flex-direction: row-reverse; -> row와 데칼로마니 해놓은 것처럼 대칭으로 반대방향


    flexbox 2편, 몇 가지 관련 속성

    flexbox 다루기

    flexbox를 다루기 위해 사용할 수 있는 속성들

    • 주축 배치 방법 : justify-content

    • 교차축 배치 방법 : align-items

    • 교차축 개별요소 배치 방법 : align-self

    • 줄 바꿈 여부 : flex-wrap

    justify-content: flex-start (요소를 앞쪽에 몰아넣기)

    justify-content: flex-end (요소를 끝쪽에 몰아넣기)

    justify-content: space-around; (주축에서 요소들간의 여백을 동일하게 맞춤)

    justify-content: space-between; (주축에서 양끝 요소들 끝에 고정시킨 후 사이 여백을 동일하게 맞춤)

    align-items: flex-end; (교차축 맨 끝에 정렬함)

    align-items: center; (교차축 가운데에 정렬함)

    align-self: flex-start; (self 클래스 요소만 교차축 가장 앞쪽에 정렬)

    flex 컨테이너에서 자식요소가 자기보다 크면 자식요소의 크기를 줄인다. 안 삐져 나옴.

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          .container{
            display: flex;
            width: 300px; height: 300px;
            border: 2px solid black;
            flex-wrap: wrap;
            <!-- flex-wrap은
              flex 컨테이너의 하위 요소들이
              상위 컨테이너보다 커졌을 때 처리방법
              nowrap은 기본 상태
              wrap은 두 행 이상으로 처리-->
          }
          .item{
            width: 300px; height: 60px;
            background-color: teal;
          }
          .self{
          }
         </style>
      </head>
      <body>
        <div class="container">
          <div class="item">1</div>
          <div class="item">2</div>
          <div class="item">3</div>
        </div>
      </body>
    </html>

    wrap-reverse는 반대로 함.


    선택자 2편, 특성 선택자와 결합자

     

    선택자{

       속성명: 속성값;

    }

     

    선택자 : 어떤 요소에 스타일을 적용할 것인지에 대한 정보

     

    특성 선택자 1. 컨셉

     

    특성 선택자(속성 선택자) :

    - 주어진 속성의 존재 여부나 그 값에 따라 요소를 선택함.

    - 기본형태는 [] 대괄호로 묶어주는 것.

     

    [class]{

      background-color: tomato;

    }

    -> 클래스 속성을 가지고 있는 요소를 선택하기

     

    [class="item"]{

       background-color: tomato;

    }

    -> 클래스가 "item"인 요소를 선택하기

     

    특성 선택자 2. 값 확인

    기호를 추가하여 요소를 선택하는 방식을 다양화할 수 있음.

     

    [class *= "it"]{ color: white; } ---> 클래스 값에 "it"이 포함되는 요소 선택하기

    [class ^= "it"]{ color: white; } ---> 클래스 값이 "it"로 시작하는 요소 선택하기

    [class $= "it"]{ color: white; } ---> 클래스 값이 "it"으로 끝나는 요소 선택하기

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          [class*="t"]{
            color: blueviolet;
          }
          [id^="uni"]{
            color: red;
          }
         </style>
      </head>
      <body>
        <h1>선택자 연습하기</h1>
        <p>1번 문단입니다 그냥 태그</p>
        <p class="text">2번 문단입니다 클래스 있음</p>
        <p id="unique">3번 문단입니다 아이디 있음</p>
        <p class="Teletubbies">4번 문단입니다 클래스 있음</p>
        <p>5번 문단입니다 <span>스판 있는</span> 태그</p>
      </body>
    </html>

     

    결합 선택자

     

    1. 컨셉

    결합 선택자(결합자) : 두 개 이상의 선택자를 결합시켜서 결합된 조건을 만족하는 요소를 선택함.

    • 자손 결합자

    • 형제 결합자

     

    2. 자손 결합자
    두 개의 선택자 중 첫 번째 선택자 요소의 자손을 선택할 수 있음.
    div p{ color: white; } ---> div 요소 안에 위치하는 모든 p요소를 선택하기

    div > p{ color: white; } ----> div 요소의 바로 아래에 위치하는 모든 p요소를 선택하기

     

    3. 형제 결합자

    두 개의 선택자 중 첫 번째 선택자 요소의 형제(동일선상 요소)를 선택할 수 있음.

    h1 ~ p{ color: red; } ----> h1 요소의 뒤에 오는 형제 중 모든 p요소를 선택하기

    h1 + p{ color: red; } ----> h1 요소의 바로 뒤에 오는 형제 p요소를 선택하기

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
             <!--첫번째 선택자 + 두번째 선택자
            첫번째 선택자의 하위요소 중
            두번째 선택자에 해당하는 건 모두 선택하겠다-->
         <style>
          p > span{
            color: palevioletred;
          }
          h1 ~ p{ color: red;
          }
         </style>
          <!--h1을 뒤따르는 p형제 모두-->  
      </head>
      <body>
        <h1>선택자 <span>h1안에 스판 넣음</span> 연습하기</h1>
        <p>1번 문단입니다 그냥 태그</p>
        <p class="text">2번 문단입니다 클래스 있음</p>
        <p id="unique">3번 문단입니다 아이디 있음</p>
        <p class="Teletubbies">4번 문단입니다 클래스 있음</p>
        <p>5번 문단입니다 <span>스판 있는</span> 태그</p>
      </body>
    </html>

     


    의사클래스(가상클래스)

     

    의사클래스(가상클래스)

    - 선택자에 추가하는 키워드

    - 요소가 어떤 특정한 상태가 되었을 때 요소를 선택하겠다는 의미임.

     

    선택자: 의사클래스{

      속성명: 속성값;

    }

     

    h1:hover{

      color: red;

    }

    -> h1 요소에 마우스 커서가 올라오면(hover) 글자를 빨간색으로 하겠다.

     

    hover : 마우스 포인터가 요소에 올라가 있다.

    active : 사용자가 요소를 활성화했다. (예를 들면, 마우스로 누르기와 같은)

    focus : 요소가 포커스를 받고 있다.

    disabled : 비활성 상태의 요소이다.

    nth-child() : 형제 사이에서의 순서에 따라 요소를 선택한다.

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
           /* hover active focus disabled nth-child()*/
           [type="button"]{
            width: 300px; height: 80px;
            background-color: tomato; color: white;
            border: none; border-radius: 8px;
           }
           [type="button"]:hover{
            background-color: gray;
           }
           [type="button"]:active{
            background-color: blueviolet;
           }
         </style>
         <!-- hover일 경우에만 회색임 -->
      </head>
      <body>
        <input type="button" value="버튼">
      </body>
    </html>
     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
           /* hover active focus disabled nth-child()*/
           input:focus{
            color: white;
            background-color: red;
           }
           input:disabled{
            width: 200px; height: 100px;
            color: yellow;
            background-color: blue;
           }
         </style>
      </head>
      <body>
        <input type="text" placeholder="아무거나 쓰기">
      </body>
    </html>

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
           /* hover active focus disabled nth-child()*/
           body{
            display: flex;
            justify-content: space-between;
           }
           .box{
            width: 50px; height: 50px;
            background-color: blue; color: white;
           }
           .box:nth-child(2n-1){
            width: 100px;
            background-color: red;
           }
         </style>
         <!-- nth-child() 여기 안에 숫자 말고 n 쓸 수 있음
         n, 2n, 4n -->
      </head>
      <body>
        <div class="box">1번</div>
        <div class="box">2번</div>
        <div class="box">3번</div>
        <div class="box">4번</div>
        <div class="box">5번</div>
      </body>
    </html>

    의사요소

     

    의사요소(pseudo-elements) :

    선택자에 추가하는 키워드로, 이를 이용하면 선택한 요소의 특정 부분에 대한 스타일을 정의할 수 있음.

     

    선택자::의사요소{

       속성명: 속성값;

    }

     

    li::first-letter{

       font-size: 20px;

    }

    -> li 요소의 첫 번째 글자만 크기를 20px로 하겠다(기본값은 16px)

     

    after : 요소의 앞에 의사 요소를 생성 및 추가

    before : 요소의 뒤에 의사 요소를 생성 및 추가

    first-line : 블록 레벨 요소의 첫 번째 선에 스타일을 적용

    marker : 목록 기호의 스타일을 적용

    placeholder : 입력 요소의 플레이스홀더(자리표시자) 스타일을 적용

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          p::before{
            content:"앞에다가 추가한 텍스트! ";
            color: red; font-weight: 900;
          }
          p::after{
            content: "♥ 뒤에다가 추가한 텍스트!";
            color: blueviolet; font-weight: 100;
          }
        </style>
      </head>
      <body>
        <p>원래 쓰여 있던 내용</p>
      </body>
    </html>

    inherit, initial, unset

     

    상속(Inheritance)

    하위 요소가 상위 요소의 스타일 속성값을 물려받는 것을 의미함.

     

    ul{

      color: tomato;

    }

    -> li 요소를 선택하지 않아도도 상위요소 ul의 색깔이 반영됨.

     

    상속이 되는 속성 vs 그렇지 않은 속성

    상속 되는 속성 : color, font-family, font-size, font-weight, text-align, cursor 등

    상속 안 되는 속성 : background-color, background-image, background-repeat, border, display 등

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          div{
            display: flex;
            justify-content: center;
            align-items: center;
            width: 300px; height: 300px;

            color: tomato;
            font-size: 24px;
            border: 3px dashed red;
          }
          p{
            color: teal;
            border: 1px solid tomato;
          }
        </style>
        <!--상속은 자기한테 지정된 스타일 없는 경우에만 적용
        지금은 p에 스타일 적용됨-->
      </head>
      <body>
        <div>
        <p>가운데 p태그</p>
        </div>
      </body>
    </html>

     

    공용 키워드

    모든 CSS 속성에 사용 가능한 키워드로, 전역 값이라 표현하기도 함.

    inherit : 상위 요소로부터 해당 속성의 값을 받아 사용한다.

    initial : (브라우저에 지정되어 있는) 해당 속성의 기본값을 요소에 적용함.

    unset : 상속 속성에 대해서는 inherit처럼, 상속되지 않는 속성에 대해서는 initial처럼 적용된다.

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
         <meta charset="UTF-8">
         <title>HTML 문서</title>
         <style>
          div{
            display: flex;
            justify-content: center;
            align-items: center;
            width: 300px; height: 300px;

            color: tomato;
            font-size: 24px;
            border: 3px dashed red;
          }
          p{
            color: inherit;
            border: inherit;
          }
       </style>
      </head>
      <!-- border는 원래 상속 안 받는데,
      inherit을 쓰면 상속 받게 됨-->
      <body>
        <div>
        <p>가운데 p태그</p>
        </div>
      </body>
    </html>

     


    z-index

     

    z-index 속성 : 요소의 쌓임 순서(stack order)을 정의할 수 있음.

    정수 값을 지정하여 쌓임 맥락(stacking context)에서의 레벨을 정의하는 방식으로 적용되며, 위치 지정 요소에 대해 적용할 수 있는 속성임.

    정수 값은 상대적인 값 (반드시 순차적일 필요가 없음)

    위치 지정 요소(positioned element) : position 속성이 정의되어 있는 요소

     

    z-index 값은 정수로

    z-index 기본값은 auto이다.

    auto는 새로운 쌓임 맥락이 형성되지 않은 자연스러운 상태이다.

     

    '겹'이라고 써있는 first class 요소가 더 위에 쌓임

    -> 두번째 요소인 '쳐'는 아예 보이지 않음.

    '쳐'가 '겹'보다 더 위에 쌓임.

    '있'이 깔림. ('있'이 auto 상태이기 떄문임)

    z-index가 같으면 나중에 생성된 요소가 더 위에 쌓이게 됨.

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <style>
          *{ font-size: 24px }
         div{ width: 100px; height: 100px; position: relative; }
         div:nth-child(1){ background-color: yellow; }
         div:nth-child(2){ background-color: cyan; bottom:50px; }
         div:nth-child(3){ background-color: magenta; bottom:100px; }
         div:nth-child(4){ background-color: green; bottom:150px; }
         .first{ z-index: 6; }
         .second{ z-index: 2; }
         .third{ z-index: 2; }
         .fourth{ z-index: 1; }
       </style>
      </head>
      <body>
        <div class="first"></div>
        <div class="second"></div>
        <div class="third"></div>
        <div class="fourth"></div>
      </body>
    </html>
    728x90