*네이버 부스트코스의 웹 ui개발 공부한 것 정리*

 

1) 1단 레이아웃 만들기

  • 1단 레이아웃은 레이아웃의 종류 중에 가장 기본이 되는 레이아웃임
  • 레이아웃 제작과정중에 가장 단순하고 쉬움

  • 1단 레이아웃은 위의 이미지와 같이 하나의 행(column)으로 이루어진 레이아웃의 형태를 일컫음
  • 이런 형태의 레이아웃은 웹에서 가장 기본이 되는 레이아웃이며 위의 이미지처럼 상단(header), 중단(contents), 하단(footer)의 구성으로 이루어져 있는 것이 가장 일반적임
  • 1단 레이아웃 형태를 가진 사이트 예시
 

네이버쇼핑

온/오프라인 상품 탐색과 쇼핑정보, 가격비교, 제품리뷰 등을 만나보세요

shopping.naver.com

 

  • 스타일 정보
    • 컨텐츠 최대 가로 길이: 1200
    • 사이트 최소 가로 길이: 800
    • 컨텐츠 가운데 정렬
  • 주요 태그 및 속성
    • HTML
      • div, header, section, footer
    • CSS
      • max-width, min-width, margin
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>1단 레이아웃</title> <!--페이지 내용 요약-->
  </head>
  <style>
    .wrap {
        min-width: 800px; /* 최소 가로길이 */
        text-align: center;
    }
    .header {
        height: 100px;
        background-color: lightgray;
    }
    .content {
        max-width: 1200px; /* 최대 가로길이 */
        margin: 0 auto; /* 가운데 정렬 */
        height: 300px;
        background-color: lightsalmon;
    }
    .footer {
        height: 100px;
        background-color: lightblue;
    }
  </style>
  <body>
    <div class="wrap"> <!-- 도화지를 만들어준다고 생각 -->
        <div class="header">header</div>
        <div class="content">content</div>
        <div class="footer">footer</div>
    </div>
  </body>
</html>

 

 

 

 

 

 

 

 

 

 

2) 1단 메뉴 만들기

  • 메뉴 UI는 웹 사이트에서 주요 섹션으로 바로 이동할 수 있도록 하는 네비게이션 역할을 하므로 많이 사용되는 UI 
  • 그 중 간단한 형태는 1단 메뉴임
  • 메뉴 제작 시에는 메뉴 간 영역을 균등하게 하는 방법과 전 체 메뉴의 최소/ 최대 값을 갖는 방법에 유의해야 함

 

  • 주요 기능
    • 5개의 항목을 갖는 가로 메뉴
    • 메뉴의 간격은 모두 동일
    • 선택 메뉴는 볼드 처리
    • 메뉴 활성화 시 배경색과 폰트 컬러 변경

 

  • 스타일 정보
    • 메뉴 - 전체 너비(min/max): 500px, 700px
    • 메뉴 - 높이: 36px
    • 메뉴 - 폰트: 12px/#333, 외곽선: 1px/#ddd
    • 메뉴(활성화 시) - 배경색: gray, 폰트: 12px/bold/#fff, 외곽선: 1px/#555

 

  • 주요 태그 및 속성
    • HTML
      • div, ul, li, a
    • CSS
      • display, position, bolder, margin, background
      • table-layout, :hover
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>1단 메뉴</title> <!--페이지 내용 요약-->
    <style>
      /* 기본 설정 */  
      body {
        font-family: '나눔고딕', NanumGothic, Dotum, '돋움', sans-serif;
      }
      body, ul, ol, li, div, a {
        margin: 0;
        padding: 0;
      }
      ul, ol {
        list-style: none;
      }
      a {
        color: inherit;
        text-decoration: none;
      }
      /* 스타일 추가 */
      .wrap {
        max-width: 700px;
        min-width: 500px;
        margin: 5px;
      }
      .menu {
        display: table; /* 요소가 table의 성질을 갖게 한다는 의미 */
        table-layout: fixed; /* 메뉴의 간격을 동일하게 하는 속성*/
        width: 100%;
      }
      .menu_item {
        display: table-cell;
      }
      .menu_link {
        display: block; /* table-cell이 갖고있는 최대 넓이에 맞추기*/
        height: 36px;
        border: 1px solid #ddd;
        font-size: 12px;
        line-height: 36px;
        color: #333;
        text-align: center;
    }
    /* 메뉴 사이사이에 있는 border 두께 줄여주기 */
    .menu_item + .menu_item .menu_link {
        margin-left: -1px; /* border 겹침 현상 없애기 위함 */
    }
    /* .menu_link가 아닌 .menu_item에 :hover 부여*/
    /* 코드의 관리가 용이하도록 */
    .menu_item:hover .menu_link {
        color: green;
        font-weight: bold;
    }
    .menu_item.active .menu_link {
        position: relative; /* 47번째 줄 margin-left: -1px; 때문에 */
        border-color: #555;
        font-weight: bold;
        color: #fff;
        background-color: gray;
    }
    </style>
  </head>
  <body>
    <div class="wrap">
        <ul class="menu">
            <li class="menu_item"><a href="#" class="menu_link">메일</a></li>
            <li class="menu_item active"><a href="#" class="menu_link">카페</a></li>
            <li class="menu_item"><a href="#" class="menu_link">소프트웨어</a></li>
            <li class="menu_item"><a href="#" class="menu_link">지식백과</a></li>
            <li class="menu_item"><a href="#" class="menu_link">영화</a></li>
        </ul>
    </div>
  </body>
</html>

 

 

 

 

 

 

 

 

 

 

3) CSS 리셋

  • 크로스 브라우징(Cross Browsing)이란?
    • 어떤 웹 브라우저를 써도 화면이 똑같이 나오고, 브라우저에 따라 입력과 사용에 문제가 생기지 않는 것
    • 브라우저마다 태그를 렌더링하는 기본 스타일이 다르기 때문에 필요함
  • 모든 브라우저에서 동일한 뷰를 보여주기 위해 기본값을 초기화해야 함
  • 리셋 CSS는 정해진 형식이나 코드가 없음
  • 사용하지도 않는 태그들을 초기화 할 필요는 없으며 프로젝트 성격에 맞추어 작성해주면 됨

https://cssdeck.com/blog/

 

CSS Reset - 2019's most common CSS Resets to copy/paste, with documentation / tutorials

All the most common CSS Reset scripts in one place to copy/paste, with complete documentation, guides and tutorials.

cssdeck.com

 

  • 실습 코드
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>CSS 리셋</title> 
    <style>
        body,
        h1, h2, h3, h4, h5, h6 {
            margin: 0;
        }

        ul, ol, dl, dd {
            margin: 0;
            padding: 0;
        }
        ul, ol {
            list-style: none;
        }

        table {
            border-collapse: collapse;
        }

        p {
            margin: 0;
            padding: 0;
        }
        
        em {
            font-style: normal
        }
        
        a {
            color: inherit;
            text-decoration: none;
        }
        
        a:hover {
            text-decoration: underline;
        }
        
        img {
            vertical-align: top;
        }

        fieldset, legend {
            margin: 0;
            padding: 0;
        }
        
        body, input, textarea, select, button {
            font-size: 14px;
            font-family: Dotum,'돋움',Helvetica,"Apple SD Gothic Neo",sans-serif;
        }
        
        fieldset {
            border: 0;
        }
    </style>
  </head>
  <body>
    <h1>h1</h1>
    <h2>h2</h2>
    <h3>h3</h3>
    <h4>h4</h4>
    <h5>h5</h5>
    <h6>h6</h6>
    <ul>
        <li>ul 리스트의 li</li>
        <li>ul 리스트의 li
            <ul>
                <li>ul 리스트의 li</li>
                <li>ul 리스트의 li</li>
            </ul>
        </li>
        <li>ul 리스트의 li</li>
    </ul>
    <ol>
        <li>ol 리스트의 li</li>
        <li>ol 리스트의 li</li>
        <li>ol 리스트의 li</li>
    </ol>
    <dl>
        <dt>dl 리스트의 dt</dt>
        <dd>dl 리스트의 dd</dd>
        <dd>dl 리스트의 dd</dd>
    </dl>
    <table>
        <caption>caption</caption>
        <thead>
        <tr>
            <th>th</th>
            <th>th</th>
            <th>th</th>
            <th>th</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <th>th</th>
            <th>th</th>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
            <th>th</th>
            <th>th</th>
            <td>td</td>
            <td>td</td>
        </tr>
        </tbody>
    </table>
    <p>모든 브라우저에서 <em>동일한</em> 화면을 볼 수 있도록 기본값을 <strong>초기화</strong>합니다.</p>
    <a href="#">자세히 보기</a>
    <div>
	    <img src="./images/pizza.png" alt="pizza">
    </div>
    <form>
        <fieldset>
            <legend>form요소</legend>
    
            <input type="text" title="검색어 입력" value="input text">
    
            <button type="submit">button</button>
    
            <textarea>textarea</textarea>
    
            <label for="checkbox">input checkbox</label><input type="checkbox" id="checkbox">
    
            <select>
                <option>select 옵션</option>
                <option>select 옵션</option>
                <option>select 옵션</option>
            </select>
        </fieldset>
    </form>
  </body>
</html>
  • 코드 설명
    • body, hq, h2, h3, h4, h5, h6
      • 여백만 제거, font-size와 font-weight도 기본 값을 가지고 있으므로 프로젝트에 따라서 초기화해도 됨
    • ul, ol, dl
      • 여백을 제거하고 브라우저에 기본 값으로 list-style-type 속성이 적용되어 있으므로 ul과 ol에 none을 적용시켜주면 부모의 값을 상속받으므로 모든 list 관련 요소에 none이 적용됨
    • table
      • 테이블에 임의로 border 속성 값을 넣어서 확인해보면 border-collapse가 seperate로 되어있음.
      • 허나 셀 사이가 떨어져있는 상태가 일반적이지 않기 때문에 collapse로 변경하였음
    • p, em, strong, a, img
      • <p>는 단순 여백 제거
      • <em>을 font-style이 italic인 초기값을 가지고 있으므로 이를 없애줌
      • <a>는 다양하게 스타일 초기화가 가능하지만 text-decoration를 없애주고 색상을 상속받을 수 있도록 변경함
      • <img> 하단에는 padding이나 margin이 아닌, 인라인 요소이기 때문에 생긴 여백이 있음. vertical-align 속성 값을 top으로 변경하면 이 여백이 사라짐
    • form
      • 폼 요소는 브라우저 기본 스타일이 가장 많이 적용되어 있는 요소임
      • 그렇기 때문에 모두 동일하게  보이도록 커스텀하는 일은 매우 까다로운 작업이며, 디자인 요소로 처리하거나 기본 스타일대로 노출하는 경우도 종종 있음

 

 

 

 

 

 

 

 

 

 

4) 표 (table)

  • 테이블이란?
    • html에서 테이블 태그는 표를 만들 때 사용함. 
    • 표는 어떤 내용을 일정한 형식과 순서에 따라서 보기 쉽게 나타낸 것으로, 셀 안에 제목과 그에 해당하는 내용들을 입력하기 때문에 다른 태그들 보다 사용하는 방법이 좀 더 복잡합
  • 테이블과 레이아웃
    • 레이아웃을 구성하기 위해서 테이블 태그를 사용하는 일이 없도록 해야 함
    • 만약 표로 만들어진 UI더라도, 리스트 태그와 같이 다른 태그로 대체할 수 있다면 그렇게 하는 것이 좋음

 

  • 표의 접근성
    • img 태그에 alt 속성을 추가하는 이유는 접근성 때문
    • 테이블 태그 역시 제목 셀인 th와 내용 셀인 td를 스크린리더가 올바르게 읽을 수 있도록 속성을 추가해주어야 함
    • 모든 제목 셀(th)에는 scope 속성을 추가해서 어떤 내용 셀(td)에 대한 것인지를 알려주어야 함
    • scope 값으로는 col, row, colgroup, rowgroup을 사용할 수 있는데, 같은 열의 제목에는 col, 같은 행의 제목에는 row 값을 추가해 주면 됨, colgroup과 rowgroup은 보통 병합된 제목 셀에 주로 사용됨
    • 정말 복잡한 표의 경우에는 id와 headers 속성을 추가하기도 하는데, 모든 th에 id를 추가하고 내용이라고 생각되는 셀에는 headers를 추가하여 그 값으로 id 값들을 나열해 주면 됨
    • 실습 코드 
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>표의 접근성</title> <!--페이지 내용 요약-->
    <style>
        table {
            border-collapse: collapse;
            border:1px solid #333;
        }
        col, tr, td, th {
            border:1px solid #333;
        }
    </style>
  </head>
  <body>
    <table>
        <col>
        <colgroup span="2"></colgroup>
        <colgroup span="2"></colgroup>
        <tr>
          <td rowspan="2"></td>
          <th colspan="2" scope="colgroup">Mars</th>
          <th colspan="2" scope="colgroup">Venus</th>
        </tr>
        <tr>
          <th scope="col">Produced</th>
          <th scope="col">Sold</th>
          <th scope="col">Produced</th>
          <th scope="col">Sold</th>
        </tr>
        <tr>
          <th scope="row">Teddy Bears</th>
          <td>50,000</td>
          <td>30,000</td>
          <td>100,000</td>
          <td>80,000</td>
        </tr>
        <tr>
          <th scope="row">Board Games</th>
          <td>10,000</td>
          <td>5,000</td>
          <td>12,000</td>
          <td>9,000</td>
        </tr>
    </table>
    <table>
        <caption>
            Availability of holiday accommodation
        </caption>
        <thead>
            <tr>
                <td></td>
                <th id="stud" scope="col">Studio</th>
                <th id="apt" scope="col">Apt</th>
                <th id="chal" scope="col">Chalet</th>
                <th id="villa" scope="col">Villa</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th id="par" colspan="5" scope="colgroup">Paris</th>
            </tr>
            <tr>
                <th headers="par" id="pbed1">1 bedroom</th>
                <td headers="par pbed1 stud">11</td>
                <td headers="par pbed1 apt">20</td>
                <td headers="par pbed1 chal">25</td>
                <td headers="par pbed1 villa">23</td>
            </tr>
        </tbody>
    </table>
  </body>
</html>

 

  • 표와 position 속성
    • table, tr, td 각 요소에 position: relative;를 각각 적용할 경우, 셀 안의 position: absolute;인 요소가 예상대로 위치하는지 확인해보자
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>표와 position 속성</title> 
    <style>
        table {
            border: 1px solid #000;
            table-layout: fixed;
            width: 100%;
            height: 150px;
            border-collapse: collapse;
          }
          .td_relative {
            border-color: red;
          }
          .tr_relative {
            border-color: blue;
          }
          .table_relative {
            border-color: green;
          }
          
          .wrap {
            margin: 50px;
          }
          .relative_section {
            position: relative;
          }
          .absolute_section {
            position: absolute;
            width: 30px;
            height: 30px;
            left: 0;
            top: 0;
            background-color: #000;
          }
          .td_relative .absolute_section {
            background-color: red;
          }
          .tr_relative .absolute_section {
            background-color: blue;
          }
          .table_relative .absolute_section {
            background-color: green;
          }
          .div_relative .relative_section {
            width: 100%;
            height: 100%;
          }
    </style>
  </head>
  <body>
    <div class="wrap">
        <table class="td_relative">
          <caption>td에 relative</caption>
          <tr>
            <td class="relative_section">
              <div class="absolute_section"></div>
            </td>
          </tr>
        </table>
      </div>
      
      <div class="wrap">
        <table class="tr_relative">
          <caption>tr에 relative</caption>
          <tr class="relative_section">
            <td>
              <div class="absolute_section"></div>
            </td>
          </tr>
        </table>
      </div>
      
      <div class="wrap">
        <table class="table_relative relative_section">
        <caption>table에 relative</caption>
          <tr>
            <td>
              <div class="absolute_section"></div>
            </td>
          </tr>
        </table>
      </div>
      
      <div class="wrap div_relative">
        <table>
        <caption>div에 relative</caption>
          <tr>
            <td>
              <div class="relative_section">
                <div class="absolute_section"></div>
              </div>
            </td>
          </tr>
        </table>
  </body>
</html>

 

  • 결과

  • 브라우저마다 position: relative;가 적용되는 방식이 다름을 확인할 수 있음
  • td에 적용시, 가장 정상적으로 노출되고 있지만, 요소의 복잡도에 따라 예상치 못한 버그가 발생할 수 있음
  • td 안에 div를 추가하여 적용시, 일부 브라우저에서 박스가 중앙에 노출되고 있지만, 높이 값과 콘텐츠가 있다며 정상 노출되며 가장 안전한 방법으로 볼 수 있음
  • 따라서 테이블은 각 요소를 배치하는 틀로 보고, 셀 안에 div를 추가하여 position 요소나 꾸미는 요소는 내부 div에 직접 선언하는 것에 좋음

 

  • 표의 Border 속성
    • 테이블 태그가 마크업하기 까다로운 이유 중 하나는 border가 적용되는 방식 때문
    • 기본 스타일인 border-collapse: seperate; 값을 주로 collapse;로 변경하여 스타일을 입히는데 이때 어떤 선이 없어지는지 알 필요가 있음 
    • border-collapse: seperate; (기본 값)                                     
    • border-collapse: collapse: (border 병합)                               
    • 테이블 레이어                                       
      • table < col < tbody < thead < tr < td < th 순서대로 z-index가 높음

 

 

 

 

 

 

 

 

 

 

5) 통계표 제작

 

  • 주요 기능
    • 연령별, 성별, 조회수, 비율에 대한 데이터 통계 표
  • 스타일 정보
    • 표 너비: 500px
    • 각 셀 높이: 40px
    • 연령별 성별의 너비: 90px
    • 조회수, 비율 텍스트 정렬: 오른쪽
  • 주요 태그 및 속성
    • HTML
      • table, caption, colgroup, col, thead, tbody, th, td
      • (속성: scope, rowspan, colspan)
    • CSS
      • table-layout, border-collapse
      • padding, border, color, text-align, background-color
  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>통계표 제작</title> 
    <style>
        table, td, th {
            border-collapse: collapse;
        }
        
        table {
            width: 500px;
            table-layout: fixed;
            font-size: 13px;
        }
        
        .col {
            width: 90px;
        }
        
        th {
            font-weight: normal;
        }
        
        th, td {
            border-bottom: 1px solid #e1e1e1;
        }
        
        thead th {
            padding: 5px 0;
            border-bottom: 2px solid #000;
        }
        
        tbody td {
            height: 40px;
        }
        
        .th_view,
        .th_rate,
        tbody td {
            text-align: right;
        }
        
        .th_male,
        .th_female {
            background: #f8f8f8;
        }
    </style>
  </head>
  <body>
    <table>
        <caption>성별, 연령별 분포 목록</caption>
        <colgroup>
            <col span="2" class="col">
            <col span="2">
        </colgroup>
        <thead>
        <tr>
            <th scope="col">연령별</th>
            <th scope="col">성별</th>
            <th scope="col" class="th_view">조회수</th>
            <th scope="col" class="th_rate">비율</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <th rowspan="2" scope="rowgroup">전체</th>
            <th scope="row" class="th_male">남</th>
            <td>0</td>
            <td>0.0%</td>
        </tr>
        <tr>
            <th scope="row" class="th_female">여</th>
            <td>0</td>
            <td>0.0%</td>
        </tr>
        <tr>
            <th rowspan="2" scope="rowgroup">0-12</th>
            <th scope="row" class="th_male">남</th>
            <td>0</td>
            <td>0.0%</td>
        </tr>
        <tr>
            <th scope="row" class="th_female">여</th>
            <td>0</td>
            <td>0.0%</td>
        </tr>
        </tbody>
    </table>
  </body>
</html>

 

  • 코드 설명
    • <colgroup>, <col>
      • 해당 태그는 하나의 열에 동일한 속성을 적용시킬 때 사용함
      • 보통 width, background, border를 적용시킬 때 사용하는데 렌더링 시 레이어 뎁스가 낮은 편이기 때문에, 주로 width를 제어하기 위해 사용함
      • 여러 열에 동일한 스타일을 적용해야 할 경우에는 col에 span 속성을 사용하여 병합 가능
    • table-layout: fixed;
      • table에 전체 표의 크기를 지정했을 경우, 각 셀의 너비는 내용과 비례하여 자동 균등 분할 됨
      • 성능상의 이슈로 반드시 추가해 주는 것이 좋음
    • th, td에서의 콘텐츠 정렬
      • th에서 text-align: center;
      • td에서 text-align: left;
      • th, td에서 모두 vertical-align: middle;

 

 

 

 

 

 

 

 

 

 

6) 폼 커스텀1 - 텍스트 박스

  • 텍스트 박스가 커스텀된 사이트에는 네이버 로그인 화면이 있음. 이와 비슷하게 커스텀을 해볼 예정

 

 

  • 주요 기능
    • 텍스트 박스의 스타일링
    • placeholder (기본 문구) 스타일링
  • 스타일 정보
    • 회색(#ddd) 선을 갖는 박스 형태
  • 주요 태그 및 속성
    • HTML
      • input, textarea
    • CSS
      • ::placeholder, 비표준 프리픽스(prefix)

 

 

  • 코드 예제
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>폼 커스텀1-텍스트 박스</title> <!--페이지 내용 요약-->
    <style>
      .text_form {
        width: 198px;
        margin-top: 20px;
        padding: 8px;
        border: 1px solid #ddd;
      }
      .text_form input { /* input 창 스타일링 */
        height: 20px;
        line-height: 20px;
        padding: 0;
        border: 0 none;
        font-size: 15px;
      }
      .textarea {
        width: 300px;
        height: 150px;
        margin-top: 20px;
        padding: 8px;
        border: 1px solid #ddd;
      }
      .textarea textarea { /* textarea 창 스타일링 */
        width: 100%;
        height: 100%;
        border: 0 none;
        padding: 0;
        font-size: 15px;
        resize: none; /* 창 크기 변화 없게 */
      }
      /* 모든 브라우저에서 적용되도록 */
      .text_form input[type=text]::placeholder { /* placeholder 색상 변경 */
        color: red;
      }
      .text_form input[type=text]:-ms-placeholder { /* Internet Explorer 10-11 */
        color: red;
      }
      .text_form input[type=text]::-webkit-input-placeholder { /* Edge */
        color: red;
      }
      .text_form input[type=password]::placeholder { /* placeholder 색상 변경 */
        color: blue;
      }
      .text_form input[type=password]:-ms-placeholder { /* Internet Explorer 10-11 */
        color: blue;
      }
      .text_form input[type=password]::-webkit-input-placeholder { /* Edge */
        color: blue;
      }
      .textarea textarea::placeholder {
        color: green;
      }
      .textarea textarea:-ms-placeholder {
        color: green;
      }
      .textarea textarea::-webkit-input-placeholder {
        color: green;
      }
    </style>
  </head>
  <body>
    <div class="text_form">
        <input type="text" name="" value="" placeholder="이름을 입력해주세요.">
    </div>
    <div class="text_form">
        <input type="password" name="" value="" placeholder="비밀번호를 입력해주세요.">
    </div>
    <div class="textarea">
        <textarea name="name" cols="80" rows="8" placeholder="문구를 입력해주세요."></textarea>
    </div>
  </body>
</html>

 

  • 비표준 코드인 placeholder에 유의해야 함

https://www.w3schools.com/cssref/sel_placeholder.asp

 

CSS ::placeholder Selector

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

 

 

 

 

 

 

 

 

 

7) 폼 커스텀2 - 체크박스, 라디오

  • 체크박스와 라디오타입의 버튼의 디자인은 css로 세부적인 컨트롤이 거의 불가능함
  • 따라서 기능을 남겨두고 이미지로 대체하는 방법을 많이 사용함
  • input의 id 속성과 label의 for 속성이 매칭되었을 때 기능이 동작하는 방식에 유의할 것

 

  • 주요 기능
    • checkbox, radio 버튼의 스타일링
    • 각 버튼의 본래 기능 (true/false)
  • 스타일 정보
    • 활성/비활성을 디자인된 버튼으로 교체하여 커스텀
  • 주요 태그 및 속성
    • HTML
      • input:checkbox, input:radio
    • CSS
      • :before, + selector

 

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>폼 커스텀2-체크박스, 라디오</title> <!--페이지 내용 요약-->
    <style>
      body {
        padding: 50px;
      }
      h1 {
        margin: 50px 0 20px;
        font-size: 20px;
        font-weight: bold;
      }
      .check_form {
        margin-top: 20px;
      }
      .check_form label {
        position: relative;
        display: inline-block;
        overflow: hidden; /* 요소 내의 컨텐츠 크기가 더 크면 넘치는 부분을 잘라서 보여주지 않도록*/
        width: 36px;
        height: 21px;
        border-radius: 10px; /* 테두리를 둥글게 만들어주는 속성 */
        background-color: #666;
        color: transparent; /* 투명색 */
      }
      .check_form label:before {
        position: absolute;
        left: 1px;
        top: 1px;
        content: '';
        width: 19px;
        height: 19px;
        border-radius: 50%;
        background-color: #fff;
      }
      /* 체크박스가 체크되었을 때 변하도록 */
      .check_form input:checked + label {
        background-color: blue;
      }
      .check_form input:checked + label:before {
        left: auto;
        right: 1px;
      }
      /* 체크 박스의 input이 보이지 않도록 */
      .check_form input {
        position: absolute;
        overflow: hidden;
        width: 1px;
        height: 1px;
        margin: -1px;
        opacity: 0; /* 불투명도: 0 -> 투명하다는 뜻 */
      }



      /* 체크 박스를 이미지로 스타일링 */
      .check_form2 {
        margin-top: 20px;
      }
      .check_form2 label:before {
        display: inline-block;
        width: 20px;
        height: 20px;
        background: url(./radio/radio.png) no-repeat 0 0;
        background-size: 20px;
        content: '';
        margin: -1px 5px 0 0;
        vertical-align: top;
      }
      .check_form2 input:checked + label:before {
        background-image: url(./radio/radio_on.png);
      }
      /* 체크 박스의 input이 보이지 않도록 */
      .check_form2 input {
        position: absolute;
        overflow: hidden;
        width: 1px;
        height: 1px;
        margin: -1px;
        opacity: 0; /* 불투명도: 0 -> 투명하다는 뜻 */
      }



      /* 라디오를 이미지로 스타일링 */
      .radio_form {
        margin-top: 20px;
      }
      .radio_form label:before {
        display: inline-block;
        width: 20px;
        height: 20px;
        background: url(./radio/radio.png) no-repeat 0 0;
        background-size: 20px;
        content: '';
      }
      .radio_form input:checked + label:before {
        background-image: url(./radio/radio_on.png);
      }
      /* 라디오의 input이 보이지 않도록 */
      .radio_form input {
        position: absolute;
        overflow: hidden;
        width: 1px;
        height: 1px;
        margin: -1px;
        opacity: 0; /* 불투명도: 0 -> 투명하다는 뜻 */
      }
    </style>
  </head>
  <body>
    <h1>체크 박스</h1>
    <div class="check_form">
        <input type="checkbox" id="check1" name="" value="">
        <label for="check1">선택1</label>
    </div>
    <div class="check_form">
        <input type="checkbox" id="check2" name="" value="">
        <label for="check2">선택2</label>
    </div>
    <h1>체크 박스 (img)</h1>
    <div class="check_form2">
        <input type="checkbox" id="checkimg1" name="" value="">
        <label for="checkimg1">선택1</label>
    </div>
    <div class="check_form2">
        <input type="checkbox" id="checkimg2" name="" value="">
        <label for="checkimg2">선택2</label>
    </div>
    <h1>라디오</h1>
    <div class="radio_form">
        <input type="radio" id="radio1" name="radio_form" value="">
        <label for="radio1">선택1</label>
    </div>
    <div class="radio_form">
        <input type="radio" id="radio2" name="radio_form" value="">
        <label for="radio2">선택2</label>
    </div>
    <div class="radio_form">
        <input type="radio" id="radio3" name="radio_form" value="">
        <label for="radio3">선택3</label>
    </div>
  </body>
</html>

 

 

 

 

 

 

 

 

 

 

8) 폼 커스텀3 - SELECT 메뉴

 

  • 주요 기능
    • select의 기본 화살표 변경
  • 스타일 정보
    • select의 기본 화살표를 준비된 이미지로 변경
  • 주요 태그 및 속성
    • HTML
      • select
    •  CSS
      • appearance

 

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>폼 커스텀3-select 메뉴</title> <!--페이지 내용 요약-->
    <style>
      body {
        padding: 50px;
      }
      h1 {
        margin: 50px 0 20px;
        font-size: 20px;
        font-weight: bold;
      }
      .select_form {
        position: relative;
        width: 198px;
        height: 38px;
        line-height: 38px;
        border: 1px solid #ddd;
      }
      .select_form select {
        width: 100%;
        height: 90%;
        border: 0 none;
        font-size: 16px;
        padding: 0 0 0 10px;
        appearance: none; /* 기본 버튼 형태 없애기 */
      }
      .select_form:after {
        position: absolute;
        top: 16px;
        right: 10px;
        display: block;
        background: url(./images/select.png) no-repeat 0 0;
        width: 13px;
        height: 7px;
        content:'';
      }
    </style>
  </head>
  <body>
    <h1>셀릭트 커스텀</h1>
    <div class="select_form">
        <select name="" id="">
            <option value="">선택1</option>
            <option value="">선택2</option>
            <option value="">선택3</option>
        </select>
    </div>
  </body>
</html>

 

 

 

 

 

 

 

 

 

 

9) 리스트 요소1 - 사전 검색 결과

  • 참고 사이트

https://terms.naver.com/entry.naver?docId=1605631&cid=50333&categoryId=50333 

 

프로젝트

프로젝트영양학사전 연구나 새로운 사업의 개발을 위한 유기적이고 조직적인 계획. 원자력개발이나 우주개발 등은 대형 프로젝트를 조직하여 이루어진다. 일반적으로는 특정한 목표, 계획을

terms.naver.com

 

 

 

 

 

 

 

 

 

 

10) 리스트 요소2 - 실시간 검색어

  • 참고 사이트

https://entertain.naver.com/home

 

네이버 TV연예

지금 가장 핫한 연예 이야기

entertain.naver.com

 

 

 

 

 

 

 

 

 

 

11) 리스트 요소3 - 쿠키 이용안내

  • 참고 사이트1
    • HTML 태그 관련 

https://developer.mozilla.org/en-US/docs/Web/HTML/Element#inline_text_semantics

 

HTML elements reference - HTML: HyperText Markup Language | MDN

This page lists all the HTML elements, which are created using tags.

developer.mozilla.org

 

  • 참고 사이트2
    • 리스트 관련 CSS

https://www.w3schools.com/css/css_list.asp

 

CSS Styling Lists

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

 

 

 

 

 

 

 

 

 

12) 리스트 요소4 - 뉴스

  • 참고 사이트

https://www.naver.com/

 

네이버

네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요

www.naver.com

 

 

 

 

 

 

 

 

 

 

13) 이미지 목록 제작

 

  • 이미지 리스트
    • 이미지 리스트는 웹사이트에서 가장 친숙한 리스트 UI 요소 중 하나
    • 이미지 리스트는 이미지와 함께 압축된 정보를 제공하여 콘텐츠를 미리 보여주는 역할을 함
    • 다른 말로 섬네일 리스트라고도 불림

 

  • 제작 화면

 

  • 주요 기능
    • 메인, 서브 리스트로 구성된 2단 이미지 리스트
    • 메인, 서브 리스트는 가로 중앙 정렬 처리
    • 메인 리스트는 이미지 위 레이어 형태의 말줄임 텍스트 노출
    • 서브 리스트는 이미지 하단에 말줄임 텍스트 노출
  • 스타일 정보
    • 메인/서브 리스트-전체 가로 너비: 1000px
    • 메인 리스트 - 메인 이미지: 322x215, 배경색: #ececec, 외곽선: 1px/solid/#000(투명도 5%)
    • 메인 리스트 - 카테고리 폰트: 14px/#fff, 제목 폰트: 18px/#fff
    • 서브 리스트 - 서브 이미지: 188x141, 외곽선: 1px/solid/#000(투명도 3%)
    • 서브 리스트 - 카테고리 폰트: 12px/#7ba7df, 제목 폰트: 15px/#090909
  • 주요 태그 및 속성
    • HTML
      • div, img, a, ol
    • CSS
      • float, position, ellipsis, :after, :nth-child

 

 

  • 핵심 코드 미리보기1 - 이미지 리스트 정렬

See the Pen Untitled by kim seoyoung (@seoooo) on CodePen.

  • 코드 설명
    • HTML
      • 3단 이미지로 구성된 main_list, 5단 이미지로 구성된 ol.sub_list가 있음
      • 참고로 ol 태그는 순서가 있는 리스트를 만들 때 사용하는 태그
      • main_list의 경우에는 wrap으로 한 번 더 감쌌는데 이유는 배경색이 있기 때문
    • CSS
      • 우선적으로, 태그가 기본적으로 가지고 있는 기본 스타일을 제거하기 위해 html, body, ol 태그에 margin, padding의 값을 초기화 하였음
      • 메인 이미지 리스트를 감싸고 있는 main_wrap 클래스에 배경색을 지정
      • 이미지 리스트는 총 300px의 width 값을 가지고 있음
      • 고정 너비를 가지고 있는 블록 요소를 중앙 정렬 시키기 위해 margin: 0 auto;를 선언 (이미지 리스트)
      • li에는 float: left를 적용하여 블록 요소를 좌측으로 이어 붙게 적용하였음
      • 다만, float를 선언할 경우 부모 요소가 자식의 높이 값을 알지 못하기 때문에 반드시 해제를 해줘야 함
      • 해제하기 위한 방법에는 다양한 방법이 있는데 :after를 선언하여 clear 해줄 수 있음
      • 이미지 리스트는 이미지 사이에 간격을 가지고 있는데, 첫 번째 이미지를 제외한 나머지 이미지만 좌측 여백을 가지고 있으므로 인접 형제 선택자를 사용하여 간격을 주었음
      • 서브 리스트에서 5n 번째 리스트에는 margin-right을 없애기 위해 :nth-child(5n)을 사용하였음

 

 

 

  • 핵심 코드 미리보기2 - 텍스트 말줄임

See the Pen HTML - 02 by kimseonghoon (@hoonJJang) on CodePen.

  • 코드 설명
    • HTML
      • p 태그로 구성된 텍스트 3개
    • CSS
      • 말줄임을 하기 위해서는 고정 너비를 가져야 하기 때문에 width를 200px로 선언함
      • 눈에 잘 보이게 하기 위해 font-size, line-height, background-color 속성을 추가함
      • white-space: nowrap;은 글자수가 해당 너비를 넘어서게 되면 자동으로 줄바꿈이 되는데, nowrap을 설정할 경우 자동 줄바꿈을 방지할 수 있음
      • overflow: hidden;을 선언하면 넘치는 부분을 감출 수 있음. 선언되지 않을 경우 요소의 너비를 벗어나게 되는데 이를 방지함
      • 말줄임에서 가장 중요한 부분은 text-overflow:ellipsis;로 컨텐츠가 해당 영역을 벗어날 경우 '···' 처리를 해줌
      • 여러줄 말줄임의 경우에는 조금 다름
      • 먼저 자동 줄바꿈을 방지하는 white-space: nowrap;은 사용하지 않음. 값을 선언하지 않은 경우 기본 normal 값이 적용됨
      • overflow: hidden;과 text-overflow:ellipsis;는 그대로 사용함
      • 다음은 webkit 계열 브라우저(크롬, 오페라, 사파리)의 여러줄 말줄임 적용을 위한 선언 부분임
        • display: -webkit-box : 플렉스 박스 형태로 변환
        • -webkit-box-orient: 플렉스 박스의 방향 설정
        • -webkit-line-clamp: 보여줄 줄의 개수
      • 여러줄 말줄임의 경우 위 3가지 속성을 필수적으로 선언함
      • 여러줄 말줄임에서 주의할 점은 webkit 외 브라우저 같은 크로스브라우징을 위한 처리를 위해 line-height와 height을 반드시 선언해주어야 함
      • height 값은 webkit-line-clamp * line-height를 해주면 됨
      • 만약 이 값을 선언하지 않을 경우 ie에서는 말줄임 없이 모든 텍스트가 노출되어 버리니 주의해야 함

 

 

 

  • 핵심 코드 미리보기3 - 이미지 액자 효과

See the Pen HTML - 03 by kimseonghoon (@hoonJJang) on CodePen.

  • 코드 설명
    • HTML
      • 이미지 url을 가지고 있는 img 태그가 있고 그것을 감싸는 img_wrap이 있음
    • CSS
      • img는 200x134 사이즈이므로 img_wrap에 동일한 width와 height을 선언하였음
      • 이미지 위로 반투명 외곽선과 dimmed(반투명 음영 영역)된 배경을 적용하기 위해 구조를 추가해야 함
      • 보더를 가지는 html 태그를 추가해서 만들 수도 있으나 시멘틱 마크업을 위해 불필요한 구조는 추가하지 않고 before, after 같은 가상 선택자를 사용하여 구조를 추가하는 것이 더 좋음
      • img 위로 보더가 나와야 하므로 absolute를 사용하여 이미지 위로 보더를 띄움
      • absolute 사용 시 부모 안 img_wrap의 너비, 높이 값과 동일하게 맞추기 위해 top, right, bottom, left 값을 0으로 선언하였음. 또한 반투명 컬러값 적용을 위해 rgba를 사용함
      • rgba의 마지막 숫자는 투명도 값으로 값 1은 100%(불투명)인 불투명을 뜻하므로 30% 투명도를 적용하기 위해 0.3을 입력하였음

 

 

 

  • 메인 이미지 리스트

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>메인 이미지 리스트</title>
    <link rel="stylesheet" href="../css/reset.css">
    <link rel="stylesheet" href="../css/메인 리스트 제작.css">
</head>
<body>
    <div class="wrap">
        <h1>TOP100</h1>
        <div class="main_wrap">
            <div class="content">
                <p class="noti_txt">8.21 오전 9시 ~ 오전 10시 기준 (재생수, 재생시간, 좋아요)</p>
                <ol class="main_list">
                    <li>
                        <a href="#" class="item_link">
                            <div class="img_box"> <!--이미지 외곽선 줄 태그-->
                                <img src="images/thumb_image_large.jpg" alt="">
                            </div>
                            <div class="info"> <!-- css 완성 후 나중에 -->
                                <span class="category">산악스키</span>
                                <p class="title">오스트리아 최대의 산악스키 연맹, 산악스키 아마데! 5개 지역에 걸쳐있고, 총 25여개의 슬로프 길이</p>
                            </div>
                        </a>
                    </li>
                    <li>
                        <a href="#" class="item_link">
                            <div class="img_box"> <!--이미지 외곽선 줄 태그-->
                                <img src="images/thumb_image_large.jpg" alt="">
                            </div>
                            <div class="info">
                                <span class="category">산악스키</span>
                                <p class="title">오스트리아 최대의 산악스키 연맹, 산악스키 아마데! 5개 지역에 걸쳐있고, 총 25여개의 슬로프 길이</p>
                            </div>
                        </a>
                    </li>
                    <li>
                        <a href="#" class="item_link">
                            <div class="img_box"> <!--이미지 외곽선 줄 태그-->
                                <img src="images/thumb_image_large.jpg" alt="">
                            </div>
                            <div class="info">
                                <span class="category">산악스키</span>
                                <p class="title">오스트리아 최대의 산악스키 연맹, 산악스키 아마데! 5개 지역에 걸쳐있고, 총 25여개의 슬로프 길이</p>
                            </div>
                        </a>
                    </li>
                </ol>
            </div>

        </div>

    </div>   
</body>
</html>

 

@charset "UTF-8"; /* 유니코드 문자열(비 아스키코드)이 있을 때 utf-8로 명시적으로 선언해주어 utf-8 인코딩 셋을 지정 */

/* 기본 스타일 선언 */
body {
    font-family: Dotum,'돋움', Helvetica, sans-serif;
    font-size: 15px;
    line-height: 18px;
    color: #3c3c3c;
}
a {
    color: inherit;
    text-decoration: none;
    vertical-align: top;
}
img {
    vertical-align: top;
}

/* 스타일 선언 */
h1 {
    width: 1000px; /* 컨텐츠가 가지는 넓이와 동일하게 */
    margin: 0 auto;
    padding: 20px 0;
    font-size: 26px;
    line-height: 38px;
    color: #000;
}
.main_wrap {
    background-color: #ececec;
}
.main_wrap .content {
    position: relative; /* 이걸 선언 안해주면 밑에 .noti_txt 부분이 회색 배경 바깥으로 벗어남 */
    width: 1000px;
    margin: 0 auto;
    padding: 50px 0 20px;
}
.main_wrap .noti_txt {
    position: absolute;
    top: 20px;
    right: 0;
    font-size: 12px;
    color: #7c7c7c;
}
.main_list li {
    float: left; /* 세로로 붙어있던 이미지들이 가로로 붙음 */
    /* 여기까지만 하면 회색 배경이 이미지를 감싸지 못함*/
}
.main_list::after { /* float 해제 하는 부분 */
    display: block;
    content: '';
    clear: both;
}
.main_list li + li { /* 이미지 사이 간격 */
    margin-left: 17px;
}
.main_list .img_box img {
    width: 322px;
    height: 215px;
}
.main_list .item_link { /* 앵커는 인라인 요소이기 때문에 이 설정을 선언하지 않으면 영역을 제대로 인식하지 못하는 상황이 발생하기도 함*/
    display: block; /* 앵커는 블록인 자식요소를 가지고 있다면 항상 이 부분을 선언해주어야 함 */
}
/* 액자 만들기 */
.main_list .img_box {
    position: relative;
}
.main_list .img_box:after {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    content: '';
    background-color: rgba(0, 0, 0, 0.2);
    border: 1px solid rgba(0, 0, 0, 0.05);
}



/* info 이후 */
.main_list .info {
    position: absolute;
    right: 15px;
    bottom: 15px;
    left: 15px;
    color: #fff;
    overflow: hidden;
}
.main_list .item_link {
    position: relative;
}
.main_list .category {
    font-size: 14px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    line-height: 18px; /* font-size 보다 2-4px 정도 더 크게 */
}
.main_list .title {
    font-size: 18px;
    line-height: 22px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    margin-top: 3px;
}
/* http://meyerweb.com/eric/tools/css/reset/ 
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
	margin: 0;
	padding: 0;
	border: 0;
	font-size: 100%;
	font: inherit;
	vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
	display: block;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
	content: '';
	content: none;
}
table {
	border-collapse: collapse;
	border-spacing: 0;
}

 

 

 

 

  • 서브 이미지 리스트

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>서브 이미지 리스트</title>
    <link rel="stylesheet" href="../css/reset.css">
    <link rel="stylesheet" href="../css/서브 리스트 제작.css">
</head>
<body>
    <div class="wrap">
        <h1>TOP100</h1>
        <div class="main_wrap">
            <div class="content">
                <p class="noti_txt">8.21 오전 9시 ~ 오전 10시 기준 (재생수, 재생시간, 좋아요)</p>
                <ol class="main_list">
                    <li>
                        <a href="#" class="item_link">
                            <div class="img_box"> <!--이미지 외곽선 줄 태그-->
                                <img src="images/thumb_image_large.jpg" alt="">
                            </div>
                            <div class="info"> <!-- css 완성 후 나중에 -->
                                <span class="category">산악스키</span>
                                <p class="title">오스트리아 최대의 산악스키 연맹, 산악스키 아마데! 5개 지역에 걸쳐있고, 총 25여개의 슬로프 길이</p>
                            </div>
                        </a>
                    </li>
                    <li>
                        <a href="#" class="item_link">
                            <div class="img_box"> <!--이미지 외곽선 줄 태그-->
                                <img src="images/thumb_image_large.jpg" alt="">
                            </div>
                            <div class="info">
                                <span class="category">산악스키</span>
                                <p class="title">오스트리아 최대의 산악스키 연맹, 산악스키 아마데! 5개 지역에 걸쳐있고, 총 25여개의 슬로프 길이</p>
                            </div>
                        </a>
                    </li>
                    <li>
                        <a href="#" class="item_link">
                            <div class="img_box"> <!--이미지 외곽선 줄 태그-->
                                <img src="images/thumb_image_large.jpg" alt="">
                            </div>
                            <div class="info">
                                <span class="category">산악스키</span>
                                <p class="title">오스트리아 최대의 산악스키 연맹, 산악스키 아마데! 5개 지역에 걸쳐있고, 총 25여개의 슬로프 길이</p>
                            </div>
                        </a>
                    </li>
                </ol>
            </div>
        </div>
        <div class="sub_wrap">
            <ol class="sub_list">
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
                <li>
                    <a href="#" class="item_link">
                        <img src="./images/thumb_image.jpg" alt="">
                    </a>
                    <div class="info"> <!-- css 완성 후 나중에 -->
                        <a href="#" class="title">국제육상경기연맹으로부터 라벨을 부여받은 단 두 개의 마라톤 대회 중 실버라벨을 5년 연속 유지하고 있는 대구국제마라톤대회!</a>
                        <a href="#" class="category_link">마라톤</a>
                    </div>
                </li>
            </ol>
        </div>
    </div>   
</body>
</html>
@charset "UTF-8"; /* 유니코드 문자열(비 아스키코드)이 있을 때 utf-8로 명시적으로 선언해주어 utf-8 인코딩 셋을 지정 */

/* 기본 스타일 선언 */
body {
    font-family: Dotum,'돋움', Helvetica, sans-serif;
    font-size: 15px;
    line-height: 18px;
    color: #3c3c3c;
}
a {
    color: inherit;
    text-decoration: none;
    vertical-align: top;
}
img {
    vertical-align: top;
}

/* 스타일 선언 */
h1 {
    width: 1000px; /* 컨텐츠가 가지는 넓이와 동일하게 */
    margin: 0 auto;
    padding: 20px 0;
    font-size: 26px;
    line-height: 38px;
    color: #000;
}
.main_wrap {
    background-color: #ececec;
}
.main_wrap .content {
    position: relative; /* 이걸 선언 안해주면 밑에 .noti_txt 부분이 회색 배경 바깥으로 벗어남 */
    width: 1000px;
    margin: 0 auto;
    padding: 50px 0 20px;
}
.main_wrap .noti_txt {
    position: absolute;
    top: 20px;
    right: 0;
    font-size: 12px;
    color: #7c7c7c;
}
.main_list li {
    float: left; /* 세로로 붙어있던 이미지들이 가로로 붙음 */
    /* 여기까지만 하면 회색 배경이 이미지를 감싸지 못함*/
}
.main_list::after { /* float 해제 하는 부분 */
    display: block;
    content: '';
    clear: both;
}
.main_list li + li { /* 이미지 사이 간격 */
    margin-left: 17px;
}
.main_list .img_box img {
    width: 322px;
    height: 215px;
}
.main_list .item_link { /* 앵커는 인라인 요소이기 때문에 이 설정을 선언하지 않으면 영역을 제대로 인식하지 못하는 상황이 발생하기도 함*/
    display: block; /* 앵커는 블록인 자식요소를 가지고 있다면 항상 이 부분을 선언해주어야 함 */
}
/* 액자 만들기 */
.main_list .img_box {
    position: relative;
}
.main_list .img_box:after {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    content: '';
    background-color: rgba(0, 0, 0, 0.2);
    border: 1px solid rgba(0, 0, 0, 0.05);
}



/* info 이후 */
.main_list .info {
    position: absolute;
    right: 15px;
    bottom: 15px;
    left: 15px;
    color: #fff;
    overflow: hidden;
}
.main_list .item_link {
    position: relative;
}
.main_list .category {
    font-size: 14px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    line-height: 18px; /* font-size 보다 2-4px 정도 더 크게 */
}
.main_list .title {
    font-size: 18px;
    line-height: 22px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    margin-top: 3px;
}



/* 여기서부터 서브 리스트 관련 */
.sub_wrap {
    margin-top: 30px; /* 메인 리스트와 간격을 주기 위함 */
}
.sub_list {
    width: 1000px;
    margin: 0 auto; /* 가운데 정렬 */
}
.sub_list .item_link img {
    width: 188px;
    height: 141px
}
.sub_list li {
    float: left;
    width: 188px; /* 이미지 크기와 동일하게 */
    margin-bottom: 40px; /* 첫 번째 줄과 두 번째 줄 사이 간격 */
}
.sub_list::after { /* float 해제하는 부분 */
    display: block;
    content: '';
    clear: both;
}
.sub_list li + li {
    margin-left: 15px;
}
.sub_list li:nth-child(5n+1) { /* 1, 6번째 li에만 적용됨 */
    margin-left: 0;
}
/* 액자 만들기 */
.sub_list .item_link {
    display: block;
    position: relative;
}
.sub_list .item_link:after {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    content: '';
    border: 1px solid rgba(0, 0, 0, 0.03);
}



/* info 이후 */
.sub_list .info {
    height: 79px;
    margin-top: 10px;
    padding: 5px;
}
.sub_list .title {
    display: -webkit-box;
    max-height: 36px; /* line-height * -webkit-line-clamp*/
    overflow: hidden;
    text-overflow: ellipsis;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    font-size: 15px;
    line-height: 18px;
    color: #090909;
}
.sub_list .category_link {
    display: block;
    padding-top: 3px;
    font-size: 12px;
    line-height: 15px;
    color: #7ba7df;
    /* 길어졌을 때 한 줄 말줄임 될 수 있도록 */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

 

  • 요약 정리
    • 이미지 정렬: float, clear(부모가 자식요소의 높이를 인식할 수 있도록), :nth-child(an + b)
    • 이미지 액자: :after, position, border, rgba
    • 텍스트 말줄임: text-overflow, overflow, white-space (여기까지가 한줄 말줄임), -webkit-box, -webkit-box-orient, -webkit-line-clamp, height (여러 줄 말줄임)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'HTML&CSS' 카테고리의 다른 글

7. 레이아웃  (0) 2022.09.30
6. 폰트, 텍스트  (0) 2022.09.30
5. 단위, 배경, 박스모델  (0) 2022.09.30
4. CSS 이해하기  (0) 2022.09.15
3. 콘텐츠모델, 시멘틱마크업, 블록&인라인  (0) 2022.09.13

 

*네이버 부스트코스의 웹 ui개발 공부한 것 정리*

 

 

1) 속성-display

  • 모든 요소는 자기가 기본적으로 가지고 있는 display 값이 있음
  • 그 값에 따라 블록 레벨, 인라인 레벨 등 렌더링 박스의 유형이 결정됨
  • display 속성으로 해당 요소의 렘더링 박스의 유형을 변경할 수 있으며 심지어 렌더링 여부도 결정할 수 있음
  • display 속성은 요소가 화면에 표현되는 방식을 이해하기 쉽게 도와줌
display: none;
display: inline;
display: block;
display: inline-block;
display: list-item;
display: flex;
display: inline-flex;
display: table;
display: table-cell;
...

 

  • display 속성
    • 요소의 렌더링 박스 유형을 결정하는 속성
    • 기본 값: - (요소마다 다름)
    • 속성 값                             
    • inline level 요소 사이의 공백과 개행 처리
      •  inline 요소의 경우 공백과 개행에 대해서 하나의 여백으로 받아들임. 따라서 inline와 inline-block의 경우 태그 사이의 공백이나 개행이 있을 경우 약 4px의 여백을 가지게 됨.

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>display</title>
  <style>
    body>div {
      padding: 5px;
      border: 1px dashed #aaa;
    }

    .box {
      padding: 15px;
      background-color: #eee;
      border: 1px solid #aaa;
    }

    .none .box {
      display: none;
    }

    .inline .box {
      display: inline;
    }

    .block .box {
      display: block;
    }

    .inline-block .box {
      display: inline-block;
    }

    .list-item .box {
      display: list-item;
    }
  </style>
</head>

<body>
  <h1>display</h1>
  <h2>none</h2>
  <div class="none">
    <div class="box">box1</div>
    <div class="box">box2</div>
    <div class="box">box3</div>
  </div>
  <h2>inline</h2>
  <div class="inline">
    <div class="box">box1</div>
    <div class="box">box2</div>
    <div class="box">box3</div>
    <div class="box">box4</div>
    <div class="box">box5</div>
    <div class="box">box6</div>
    <div class="box">box7</div>
    <div class="box">box8</div>
    <div class="box">box9</div>
    <div class="box">box10</div>
  </div>
  <h2>block</h2>
  <div class="block">
    <div class="box">box1</div>
    <div class="box">box2</div>
    <div class="box">box3</div>
  </div>
  <h2>inline-block</h2>
  <div class="inline-block">
    <div class="box">box1</div>
    <div class="box">box2</div>
    <div class="box">box3</div>
  </div>
  <h2>list-item</h2>
  <div class="list-item">
    <div class="box">box1</div>
    <div class="box">box2</div>
    <div class="box">box3</div>
  </div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

2) 속성-visibility

  • CSS에서는 요소를 숨기는 몇 가지 방법이 있음
  • display: none을 사용할 수도 있고, 다른 위치 관련 속성들을 이용해서 안 보이게 숨길 수도 있음
  • 요소를 숨긴다는 의미로만 해석하면 가장 명시적인 방법은 visibility 속성을 이용하는 것임

 

  • visibility 속성
    • 요소의 화면 표시 여부를 지정하는 속성
    • 기본 값: visible
    • 속성 값                               
visibility: visible;  /* 보임 기본값 */
visibility: hidden;  /* 숨김, 자신의 박스 영역은 유지(margin까지 모두 포함) */
visibility: collapse; /* 셀간의 경계를 무시하고 숨김(박스영역 없음, 테이블의 행과 열 요소에만 지정 가능, 그 외 요소 지정은 hidden과 같음) */

 

  • display: none 차이점
    • display: none => 요소가 렌더링 되지 않음(DOM에 존재하지 않음, 스크린 리더기가 읽을 수 없음)
    • visibility: hidden => 요소가 보이지는 않지만 렌더링 되며 화면에 공간을 가지고 있음(DOM에 존재함)

 

https://www.w3schools.com/cssref/playit.asp?filename=playcss_visibility_collapse 

 

Playit

This example demonstrates how the visibility property behaves on TABLE elements: A TD element. Another TD element. Note: The value "collapse" can only be used on TABLE elements.

www.w3schools.com

 

 

 

 

 

 

 

 

 

 

3) 속성-float

  • 모든 요소는 기본적으로 보통의 흐름에 따라 위에서 아래로, 그리고 좌측에서 우측으로 배치됨
  • float 속성은 요소를 보통의 흐름에서 벗어나 독자적인 공간 위에 배치되게 함
  • float을 이용하면 주변 요소들과 더욱 자연스럽게 배치될 수 있지만, floating 되지 않은 주변 요소들에도 영향을 주기 때문에 잘 이해하고 사용해야 함

 

  • float 속성
    • 요소를 float(요소를 보통의 흐름에서 벗어나게 함) 시킬지 지정하는 속성
    • 기본 값: none
    • 속성 값                               
    • 요소를 보통의 흐름에서 벗어나 띄어지게 하는데 주변 텍스트나 인라인 요소가 주위를 감싸는 특징이 있음
    • 대부분 요소의 display 값을 block으로 변경함 (display 값 변경 예외: inline-table, flex 등)

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>float</title>
  <style>
.container {
  border: 1px dashed #aaa;
  padding: 15px;
  clear: both;
}
.container div, .container span {
  width: 100px;
  height: 100px;
  border: 1px solid #aaa;
  color: #fff;
}
.container :nth-child(1) {
  background-color: green;
}
.container :nth-child(2) {
  background-color: skyblue;
}


</style>
</head>
<body>
  <h2>요소를 보통의 흐름에서 벗어나 띄워지게 함</h2>

  <div class="container" style="width:400px;">
    <div style="float:left;">Box1</div>
    <div style="float:left;">Box2</div>
  </div>

  <h2 style="margin-top:100px;">주변 텍스트나 인라인요소가 주위를 감싸는 특징이 있음.</h2>
  <div class="container" style="width:400px;">
    <div style="float:left;">Box1</div>
    <div style="float:right;">Box2</div>
    <p>CSS 속성(property) float 은 한 요소(element)가 보통 흐름(normal flow)으로부터 빠져 텍스트 및 인라인(inline) 요소가 그 주위를 감싸는 자기 컨테이너의 좌우측을 따라 배치되어야 함을 지정합니다. 부동(floating) 요소 는 float 의 계산값(computed value)이 none이 아닌 요소입니다.</p>
  </div>

  <h2>대부분의 요소에 display 값을 block으로 변경함.</h2>
  <div class="container" style="width:400px;">
    <span style="float:left;">inline1</span>
    <span>inline2</span>
  </div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

4) 속성-clear

  • floating 요소는 주변 요소들의 배치에도 영향을 주므로 가끔 주변 요소들이 의도하지 않은 대로 나타날 수 있음
  • 이때, clear 속성을 사용하여 이 문제를 해결할 수 있음
  • 의도한 게 아니라면 대부분 floating 요소 다음 요소에 바로 clear를 해주는게 좋음
  • clear는 float와 항상 따라다니는 속성이므로 같이 잘 알아두어야 함

 

  • clear 속성
    • 요소를 floating된 요소의 영향에서 벗어나게 하는 속성
    • 기본 값: none
    • 속성 값                                   
    • block-level 요소만 적용 가능

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>clear</title>
  <style>
    .container {

      border: 1px dashed #aaa;
    }

    div,
    span {
      padding: 20px;
      border: 1px solid red;
    }
  </style>
</head>
<body>
  <h2>clear: none</h2>

  <div class="container">
    <div style="float:left">float:left;</div>
    <span style="display:block;clear:none;">내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로</span>
  </div>

  <h2>clear: left</h2>
  <div class="container">
    <div style="float:left">float:left;</div>
    <span style="display:block;clear:left;">내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로</span>
  </div>

  <h2>clear: right</h2>
  <div class="container">
    <div style="float:right">float:right;</div>
    <span style="display:inline-block;clear:right;">내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로</span>
  </div>

  <h2>clear: both</h2>
  <div class="container">
    <div style="float:left">float:left;</div>
    <div style="float:right">float:right;</div>
    <span style="display:block;clear:both;">내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로내용 맘대로 내용 맘대로 내용 맘대로 내용 맘대로</span>
  </div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

5) 속성-position

  • 요소의 레이아웃을 설정하는 대표적인 속성
  • 요소의 위치를 원하는 곳으로 이동할 수 있게 함
  • position을 사용하기 위해서는 요소를 이동시키기 위한 좌표 속성인 offset에 대해서도 알아야 함
  • position과 offset 속성을 잘 활용하면 더 다양하고 화려한 레이아웃을 구현할 수 있음

 

  • position 속성
    • 요소의 위치를 정하는 방법을 지정하는 속성
    • 기본 값:static
    • 속성 값                             
    • Normal-flow  란? 일반적인 상황에서 각의 요소들의 성질에 따라 배치 되는 순서(흐름). 예를 들면, block 레벨 요소들은 상하로 배치되고, inline 레벨 요소들은 좌우로 배치되는 것.

 

  • offset(top/left/bottom/right)
    • offset의 %단위 사용 
      • 이전에 padding과 margin에서 % 값을 적용할 때, 상하좌우 방향에 관계없이  가로 사이즈를 기준으로 %값을 계산된다고 배웠음. 그러나 offset은 top, bottom (상하) 는 기준이 되는 요소의 height 값 left, right (좌우) 는 width값에 대하여 계산됨.

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>position</title>
  <style>
    .sibling {
      padding: 5px;
      background-color: #eee;
      text-align: center;
    }

    .parent {
      border: 1px dashed #aaa;
      padding: 10px;
    }

    .child,
    .child_offset {
      width: 60px;
      height: 60px;
      padding: 20px;
      background-color: #dc3636;
      text-align: center;
      color: #fff;
      font-weight: bold;
      border: 1px solid #333;
    }

    .child_offset {
      background-color: #3677dc;
    }

    .static {
      position: static;
    }

    .relative {
      position: relative;
    }

    .static {
      position: static;
    }

    .absolute {
      position: absolute;
    }

    .fixed {
      position: fixed;
    }
  </style>
</head>
<body>
  <h1>position (Offset 미지정)</h1>
  <h2>static (기본)</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <div class="child static">static</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>relative</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <!-- offset 값이 설정되어있지 않기 때문에 화면에 변경 사항 없음 -->
    <div class="child relative">relative</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>absolute</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <!-- absolute, fixed는 inline요소일때 display:block으로 변경시킴. inline-block 값을 임의 지정했을 때는 그 값을 유지함 -->
    <span class="child absolute">absolute</span>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>fixed</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <!-- 현재 fixed는 offset값이 없어 뷰포트 밖으로 밀려나오면서 화면 아래로 사라짐 -->
    <div class="child fixed">fixed</div>
    <div class="sibling">Sibling 2</div>
  </div>


  <h1>position (Offset 지정)</h1>
  <h2>static - </h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <!-- offset값이 적용되지 않음 -->
    <div class="child_offset static" style="top: 40px; right: 40px;">static <br>top: 40, left: 40</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>relative</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <!-- 자신의 원래 위치를 기준으로 top:40px, left:40px 이동함 -->
    <div class="child_offset relative" style="top: 40px; left: 40px;">relative <br>top: 40, left: 40</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>absolute - parent relative</h2>
  <div class="parent relative">
    <div class="sibling">Sibling 1</div>
    <!-- 자신의 부모 위치를 기준으로 top:40px, left:80px 이동함 -->
    <div class="child_offset absolute" style="top: 40px; left: 80px;">absolute<br>top: 40, left: 80</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>fixed</h2>
  <!-- 부모가 fixed여도 별개로 위치함 -->
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <div class="child_offset fixed" style="top:100px;left:80%;">fixed<br>top:100, left:80%</div>
    <div class="sibling">Sibling 2</div>
  </div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

6) 속성-z-index

  • 요소의 위치를 지정하다 보면 부득이하게 두 요소가 겹쳐지게 되는 경우가 있음
  • 이런 경우, 둘 중 하나는 다른 요소로 인해 덮어쓰게 됨
  • 이때 어느 요소가 더 위로 올라와야 하는지는 요소들의 쌓임 순서의 규칙에 따라 위치하게 됨
  • 이것을 정하는 것이 바로 z-index의 역할

 

  • z-index 속성
    • 요소가 겹치는 순서(쌓임 순서 또는 stack order)를 지정하는 속성
    • 기본 값: auto
    • 속성 값                               
    • position 값이 static이 아닌 경우 지정 가능
    • 순서 값이 없을 경우 생성순서(코드상 순서)에 따라 쌓임
    • 부모가 z-index 값이 있을 경우 부모 안에서만 의미가 있음
    • 큰 값이 가장 위쪽 (음수 사용 가능)

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>z-index</title>
  <style>
    .parent {
      z-index: 10;
      position: relative;
      width: 300px;
      height: 50px;
      border: 2px solid #000;
      background-color: #ccc;
    }

    .child {
      z-index: 10;
      position: absolute;
      top: 10px;
      right: 10px;
      width: 100px;
      height: 100px;
      background-color: pink;
      border: 2px solid red;
    }
  </style>
</head>
<body>
  <div class="wrap">

    <h1 class="practive_title">z-index 속성</h1>
    <div class="z_area">
      <div class="parent" style="z-index:11">
        position: relative1;
        <div class="child" style="right:20px;z-index:1000;">
          position: absolute2;
        </div>
      </div>
      <div class="parent" style="">
        position: relative3;
        <div class="child">
          position: absolute4;
        </div>
      </div>
    </div>
</div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

7) HTML/CSS 유효성 검사

  • HTML/CSS 코드를 작성하고 나면 항상 유효성 테스트를 실시해야 함
  • 유효성 검사를 통해 마크업 문법상 에러가 없는지 표준에 맞게 작성되었는지 알 수 있음
  • 또한 사용성과 접근성, SEO 최적화 개선에도 도움이 됨
  • HTML/CSS가 익숙하지 않을 때는 반드시 코드 작성 후 항상 유효성 검사를 하면 공부하는 데에 도움이 됨

https://validator.w3.org/

 

The W3C Markup Validation Service

Validate by File Upload Note: file upload may not work with Internet Explorer on some versions of Windows XP Service Pack 2, see our information page on the W3C QA Website.

validator.w3.org

 

 

 

 

 

 

 

 

 

 

'HTML&CSS' 카테고리의 다른 글

8. 실습 1  (0) 2022.10.07
6. 폰트, 텍스트  (0) 2022.09.30
5. 단위, 배경, 박스모델  (0) 2022.09.30
4. CSS 이해하기  (0) 2022.09.15
3. 콘텐츠모델, 시멘틱마크업, 블록&인라인  (0) 2022.09.13

*네이버 부스트코스의 웹 ui개발 공부한 것 정리*

 

1) 속성-typography

  • HTML이 처음 등장했을 때는 이미지를 표현하는 기능도 없는 문자만이 존재하는 미디어였으므로 HTML에서 서체와 관련된 부분은 가장 밀접한 분야이면서 동시에 속성의 빈도수도 가장 많음
  • 폰트 속성, 텍스트 속성, 간격 관련 속성 등 다양한 서체 관련 속성이 있음

 

  • 타이포그래피의 구조
    • 폰트를 이해하기 위해서는 타이포그래피의 구조를 먼저 이해해야 함
    • 모든 폰트는 em 박스를 가지고 있고 아래 그림과 같은 구조로 이루어져 있음
    • em: 폰트의 전체 높이를 의미
    • ex (= x-height): 해당 폰트의 영문 소문자 x의 높이를 의미
    • Baseline: 소문자 x를 기준으로 하단의 라인을 의미
    • Descender: 소문자에서 baseline 아래로 쳐지는 영역 (파란색 부분)을 의미함. 서체에 따라 descender의 길이가 다름
    • Ascender: 소문자 x의 상단 라인 위로 넘어가는 영역 (파란색 부분)을 의미함  

 

 

 

 

 

 

 

 

 

 

2) 속성-font-family

  • font-family는 상속되기 때문에 기본적으로 대표 폰트를 선언하고, 특정 폰트가 필요한 부분에서 재정의해서 사용함

 

  • font-family 속성
    • 글꼴을 지정하는 속성
    • family-name: 사용할 폰트의 이름을 나타내며 ','로 구분하여 여러 개 선언 할 수 있음. 먼저 선언된 순서대로 우선순위가 결정됨. 이름 중간에 공백이 있거나, 한글일 경우 홀따옴표로 묶어서 선언함
    • generic-family: family-name으로 지정된 글꼴을 사용할 수 없을 경우를 대비해, 브라우저가 대체할 수 있는 폰트가 필요한 경우 선택할 수 있게 해줌. font-family 속성의 맨 마지막에 선언해야 하며, 키워드이기 때문에 따옴표 등의 인용부호로 묶지 않는 것이 원칙. 예를 들어 아래와 같이 선언하여 사용할 수 있음
    • 가장 먼저 Helvetica를 사용하고, 이를 사용할 수 없을 때 Dotum을 사용하는 방식으로 우선순위에 따라 차례대로 적용됨. 만약 "abc 가나다 123"이라는 글자가 있다면, "abc"와 "123"은 Helvetica로 표현이 되고, "가나다"는 Dotum으로 표현이 됨. 이유는 Helvetica는 한글을 지원하지 않는 폰트이기 때문임
    • 왜 돋움체는 영어로 한 번, 한글로 한 번 총 두 번이나 선언하였을까? 이유는 한글을 지원하지 않는 디바이스일 경우 해당 한글 폰트를 불러올 수 없으므로 영문명으로도 선언해 주어야 함.
    • 그리고 마지막에는 반드시 generic-family를 선언해주어야 함. 이유는 선언된 모든 서체를 사용할 수 있다는 보장이 없기 때문. 이때 generic-family를 선언해주면, 시스템 폰트 내에서 사용자가 의도한 스타일과 유사한 서체로 적용이 됨. 
    • 또한, 자식 요소에서 font-family를 재선언하면 부모에 generic-family가 선언되어있어도 다시 선언해주어야 함
    • Generic-family의 대표적인 서체
      • serif: 삐침, 글자 획이 삐침이 있는 폰트 (ex. 명조체)
      • sans-serif: 삐침이 없는 폰트 (ex. 돋움체)

https://developer.mozilla.org/ko/docs/Web/CSS/font-family

 

font-family - CSS: Cascading Style Sheets | MDN

CSS font-family 속성은 선택된 요소에 우선 순위가 지정된 font family 이름과 generic family 이름을 지정할 수 있게 해줍니다.

developer.mozilla.org

 

 

 

 

 

 

 

 

 

 

3) 속성-line-height 

  • 장문의 글에서는 가독성을 위해서 글 사이의 간격을 띄우기도 함 => 행간을 조절함
  • line-height 속성은 행간을 조정함
  • 정확하게는 줄의 높이를 의미하고, 이를 이용해서 행간을 조정함

 

  • line-height 속성
    • line-height는 텍스트 라인의 높이를 의미하는 것으로 주로 행간을 제어할 때 사용됨
    • 기본 값: normal
      • line-height로 제어되는 부분을 line-box라고도 하며 이는 타이포그래피 구조에서 배웠던 [em 박스] + [상하단의 여백]까지를 의미함
      • 속성 값                                                         
      • 주의할 점은, line-height의 값으로 number를 선언할 때와 %로 선언할 때의 차이
      • 두 값 모두 font-size를 기준으로 동작하기 때문에 1이나 100%를 같은 것이라고 오해할 수 있음
      • 하지만 두 값은 큰 차이가 있음. 바로 line-height의 값이 자식 요소로 상속되었을 때의 계산 방식이 다름
        • number: 부모 요소의 숫자 값이 그대로 상속됨. 즉, 자식 요소에서도 또 한 번 자식 요소의 font-size를 기준으로 계산된 값을 가짐
        • %: 부모 요소에서 %값이 그대로 상속되는 것은 아니고, %에 의해 이미 계산된 px값이 상속됨
        • 위의 두 경우 모두 <body>에 똑같이 line-height: 40px이 적용됨
        • 하지만 자식 요소로 <p>가 있다고 생각하면 차이가 생김
        • 이처럼 숫자 값을 사용하면 부모 엘리먼트에서 계산된 값 대신 비율을 그대로 상속받을 수 있으므로 가능하면 단위가 없는 값을 사용하는 것이 좋음

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

 

line-height - CSS: Cascading Style Sheets | MDN

The line-height CSS property sets the height of a line box. It's commonly used to set the distance between lines of text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifi

developer.mozilla.org

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>line-height</title>
  <style>
    .parent {
        width: 200px;
        font-size: 10px;
  
        line-height: normal;
        line-height: 20px;
        line-height: 2;
        line-height: 200%;
    }

    .child {
        font-size: 20px;
    }
  </style>
</head>

<body>
  <div class="parent">
    <div class="child">
      Lorem ipsum dolor sit amet consectetur adipisicing elit. 
      Ipsam aspernatur vitae sapiente laudantium velit quo unde cupiditate autem, 
      harum eaque natus perferendis ducimus saepe libero, voluptatibus voluptates possimus.
      Adipisci, delectus.
    </div>
  </div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

4) 속성-font-size

 

/* <absolute-size> values - 브라우저 마다 사이즈가 다르게 정의되어 있음, 부모 상속 없음 */
/* 잘 사용 안함 */
font-size: xx-small;
font-size: x-small;
font-size: small;
font-size: medium; /* 기본 사이즈 */
font-size: x-large;
font-size: xx-large;

/* <relative-size> values */
/* 잘 사용 안함 */
font-size: smaller; /* 부모 사이즈 약 0.8배 */
font-size: larger; /* 부모 사이즈 약 1.2배 */

/* <length> values */
font-size: 12px;
font-size: 0.8em;

/* <percentage> values */
font-size: 80%

/* <viewport-units> values */
font-size: 1vw; /* 1% of viewport width */
font-size: 1vh; /* 1% of viewport height */

/* Global values */
font-size: inherit; /* 부모상속을 받을 수 있는 폰트 크기 속성 */
font-size: initial; /* 태그가 갖고 있는 고유 폰트 크기 속성 */

/* 기본 값 미지정 시 글꼴의 기본크기는 16px (1em) */

 

  • font-size 속성
    • 글꼴의 크기를 지정하는 속성
    • 기본 값: medium
    • 속성값                                                               
    • absolute size (keyword):  기본 값인 medium에 대한 상대적인 크기로, 브라우저마다 사이즈가 다르게 정의되어있음
    • relative size (keyword): 부모 요소의 font-size 크기에 대해 상대적임. smaller는 0.8배, larger는 1.2배
    • length: px, em, rem 등의 단위를 이용하여 고정된 크기를 지정할 수 있음 (em: 부모 요소의 font-size에 em 값을 곱한 크기, rem: 루트의 font-size에 rem 값을 곱한 크기)
    • percent (%): 부모 요소의 font-size를 기준으로 백분율 계산된 값을 지정할 수 있음
    • viewport units: vw, vh 단위로 뷰포트를 기준으로 하여, 유동적인 font-size를 지정할 수 있음. vw는 뷰포트 width의 1%, vh는 뷰포트 height의 1% 값을 가짐

 

https://developer.mozilla.org/ko/docs/Web/CSS/font-size

 

font-size - CSS: Cascading Style Sheets | MDN

font-size CSS 속성은 폰트의 크기(대문자 "M"의 크기)를 지정합니다. 폰트 크기를 바꾸면 em 과 ex <length> 단위로 계산된 다른 항목들의 크기를 바꿉니다.

developer.mozilla.org

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>font-size</title>
  <style>
    .parent {
        font-size: 20px;
    }
    .child {
        font-size: 1em;
    }
  </style>
</head>
<body>
  <div class="parent">
    <div class="child">
      Lorem ipsum dolor sit amet consectetur adipisicing elit. 
      Ipsam aspernatur vitae sapiente laudantium velit quo unde cupiditate autem, 
      harum eaque natus perferendis ducimus saepe libero, voluptatibus voluptates possimus.
      Adipisci, delectus.
    </div>
  </div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

5) 속성-font-weight

  • heading(h1 - h6), strong 태그들을 사용하면 글씨가 굵게 표현되었음
  • 이것은 font-weight라는 속성에 의해서 표현되었던 것임 (위 태그들은 font-weight에서 굵게 표현되는 속성을 기본값으로 가지고 있기 때문)

 

/* 가장 많이 사용함 */
font-weight: normal; /* 400과 같음 */
font-weight: bold; /* 700과 같음 */

/* 부모 요소에 의존적이기 때문에 실무에서는 잘 사용안함 */
font-weight: lighter; /* 부모 요소 보다 얇은 폰트 가중치 */
font-weight: bolder; /* 부모 요소 보다 굵은 폰트 가중치 */

font-weight: 100; /* Thin (Hairline) */
font-weight: 200; /* Extra Light (Ultra Light) */
font-weight: 300; /* Light */
font-weight: 400; /* Normal */
font-weight: 500; /* Medium */
font-weight: 600; /* Semi Bold (Demi bold) */
font-weight: 700; /* Bold */
font-weight: 800; /* Extra Bold (Ultra Bold)*/
font-weight: 900; /* Black (Heavy) */

/* Global values */
font-weight: inherit; /* 상속된 값 */
font-weight: initial; /* 초기 값 */

/* normal과 bold만 지원하는 폰트일 경우, 100-500은 normal, 600-900은 bold임 */

 

 

  • font-weight 속성
    • 글꼴의 굵기를 지정하는 속성
    • 기본 값: normal
    • 속성 값                                                             
    • 폰트가 점차 다양해지면서 굵기 자체를 폰트 family-name으로 가지고 있는 경우도 있음
    • 또한, 굵기는 디바이스 별로 조금 다르게 표현될 수 있음

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>font-size</title>
  <link href='//fonts.googleapis.com/css?family=Open+Sans:400,600,700,800,300' rel='stylesheet' type='text/css'>
  <style>
    body {
 
       padding: 0 20px;
    
       font-family: 'Open Sans';

    }
    .w100 {
 font-weight: 100; 
}
    .w200 {

 font-weight: 200; 
}
    .w300 { font-weight: 300; 
}
    .w400 {
 font-weight: 400;
 }
    .w500 {
 font-weight: 500;
 }
    .w600 { font-weight: 600;
 }
    .w700 { font-weight: 700;
 }
    .w800 {
 font-weight: 800;
 }
    .w900 {
 font-weight: 900;
 }
  </style>
</head>
<body>
  <p class="w100">This is 100 weight</p>
  <p class="w200">This is 200 weight</p>
  <p class="w300">This is 300 weight (available)</p>
  <p class="w400">This is 400 weight (available)</p>
  <p class="w500">This is 500 weight</p>
  <p class="w600">This is 600 weight (available)</p>
  <p class="w700">This is 700 weight (available)</p>
  <p class="w800">This is 800 weight (available)</p>
  <p class="w900">This is 900 weight</p>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

6) 속성-font-style

  • em 태그를 사용했을 때, 글꼴이 기울어졌음
  • em 태그는 기본적으로 font-style 속성에 italic 값을 가지고 있어 기울임꼴로 표시됨

 

font-style: normal /* 기본 */
font-style: italic /* 이탤릭체 */
font-style: oblique /* 기울임 */

/* Global values */
font-style: inherit;
font-style: initial;

 

  • font-style 속성
    • 글꼴의 스타일을 지정하는 속성
    • 기본 값: normal
    • 속성 값                                             
    • oblique
      • 텍스트의 기울기에 대한 각도를 추가로 지정할 수 있음 (ex. font-weight oblique <각도>;)
      • 유효한 값은 -90 ~ 90도이며, 따로 각도를 지정하지 않으면 14도가 사용됨
      • 양수 값은 글의 끝 부분 쪽으로 기울어지며, 음수 값은 글의 시작 부분 쪽으로 기울어짐 
      • CSS 4에서만 지원함

 

 

 

 

 

 

 

 

 

 

7) 속성-font-variant

  • 문자 변환의 의미로 이 속성을 이용해 모든 소문자를 대문자로 변환할 수 있음
  • 변환된 대문자는 실제 대문자 사이즈보다 더 작은 사이즈로 나타나며 대소문자 변환이기 때문에 한글에는 적용되지 않음

 

font-variant: normal; /* 기본 */
font-variant: small-caps; /* 소문자를 작은 대문자로 변환 */

/* Global values */
font-variant: inherit;
font-variant: initial;

 

  • font-variant 속성
    • 글꼴의 형태를 변환하는 속성, 소문자를 작은 대문자로 변환할 수 있음
    • 기본 값: normal
    • 속성 값                               

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>font-variant</title>
  <style>
    p {
      font-variant: small-caps;
    }
  </style>
</head>

<body>
  <p>Font-Variant: Small-Caps</p>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

8) 속성-font

  • 앞서 배운 font와 관련된 다양한 값을 축약 속성에 넣을 수 있음
  • 다만, 속성마다 선언 순서를 지켜야 하는 제약이 있음
  • 또한, 반드시 꼭 넣어야 하는 속성들이 있는 등 지켜야 할 규칙이 많고 가독성이 좋지 않기 때문에 실무에서 선호하는 편은 아님
  • 그렇지만 font로 선언된 속성을 보고 어떤 값들이 적용되어 있는지 해석할 수 있어야 함

 

/* size | family */
font: 2em "돋움", dotum, sans-serif;

/* style | size | family */
font: oblique 2em "돋움", dotum, sans-serif;

/* style | variant | weight | size/line-height | family */
font: oblique small-caps bold 16px/1.5 "돋움";

/* The font used in system dialogs */
font: message-box;
font: icon;

/* Global values */
font: inherit;
font: initial;

/* font-size와 font-family는 반드시 선언해야하는 필수 속성 */
/* 빠진 속성이 있다면 기본 값으로 지정됨 */
/* 각 속성마다 선언 순서를 지켜야 함 */

 

  • font 관련 속성
    • font-style, font-variant, font-weight, font-size/line-height, font-family 속성들을 한 번에 선언할 수 있는 축약형 속성
    • 기본 값: 각 속성들의 기본 값
    • 속성 값                                               

 

 

 

 

 

 

 

 

 

 

9) 속성-webfont

  • 실무에서 폰트 관련해서 주로 사용되는 명칭으로 '시스템 폰트', '이미지 폰트', '웹 폰트'가 있음
    • 시스템 폰트: font-family로 선언한 글꼴이 사용자 시스템에 기본으로 설치가 되어 있어 사용할 수 있는 경우
    • 이미지 폰트: 특정 글꼴을 사용하는 것이 아니고, 글자를 표현함에 있어 시각적인 요소를 많이 넣고 싶을 때 글꼴 대신 이미지를 이용해 표현하는 경우, 정확히 이미지 폰트는 폰트가 아니라 이미지임
    • 웹 폰트: 서버에 저장해 제공하거나, 웹 경로를 통해 사용하는 폰트를 의미

 

  • @font-face
    • 웹에 있는 글꼴을 사용자의 로컬 환경(컴퓨터)으로 다운로드하여 적용하는 속성
    • 기본 값: 없음
    • 속성 값                                               

 

  • 코드 실습
@font-face {
    font-family: webNanumGothic; /* 사용자 지정 웹 폰트명 */
    src: url(NanumGothic.eot); /* 적용 될 웹 폰트의 경로 */
    font-weight: bold; /* 필요에 따라 지정 */
    font-style: italic; /* 필요에 따라 지정 */
}

body {
    font-family: webNanumGothic;
}

/* 웹폰트는 선언 시 필요에 따라 굵기나 스타일 등을 같이 지정해서 사용할 수 있음 */

 

 

 

 

 

 

 

 

 

 

10) 속성-vertical-align

  • css를 통해서 텍스트를 수직, 수평 정렬 할 수 있음
  • 그 중 vertical-align 속성을 이용하여 수직 정렬을 할 수 있음
  • 이때 주의할 점은 block 요소가 아닌 inline 또는 inline-block에서만 사용할 수 있음

 

/* keyword values */
vertical-align: baseline; /* 부모 기본 값 */
vertical-align: sub; /* 부모 아래 첨자 기준선 */
vertical-align: super; /* 부모 위첨자 기준선 */
vertical-align: text-top; /* 부모 텍스트의 맨위 (Ascender 제외) */
vertical-align: text-bottom; /* 부모 텍스트의 맨위 (Descender 제외) */
vertical-align: middle; /* 부모의 중앙에 위치 */
vertical-align: top; /* 부모의 맨위 위치 */
vertical-align: bottom; /* 부모의 맨 아래 위치 */

/* <length> values - 음수값도 사용가능 */
vertical-align: 10em
vertical-align: 4px;

/* 인라인 요소 또는 테이블 셀 상자의 수직정렬을 지정함 */
/* 대부분 부모요소에 상대적으로 정렬됨 */

https://www.w3schools.com/cssref/playdemo.asp?filename=playcss_vertical-align 

 

W3Schools CSS vertical-align demonstration

baseline| sub| super| top| text-top| middle| bottom| text-bottom| 0px| 10px| 25px| -25px| -50px| 1cm| 10%| 50% In this paragraph, the blue span change the vertical-align value

www.w3schools.com

 

  • vertical-align 속성
    • 요소의 수직 정렬을 지정하는 속성
    • 기본 값: baseline (baseline은 소문자 x를 기준으로 하단 라인을 의미)
    • 속성 값                                               
    • keyword 
    • length: px값 사용 시 baseline을 기준으로 이동하며, 음수 값도 사용 가능
    • percent ( % ): line-height를 기준으로 내에서 이동하며 음수 값 사용 가능

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>vertical-align</title>
  <style>
    p {
      padding: 10px;
      border: 1px dashed #aaa;
      line-height: 1;
      font-size: 16px;
    }

    p span {
      background-color: rgba(0, 255, 255, 0.5);
      border: 1px solid #aaa;
    }

    p span:nth-child(1) {
      background-color: rgba(255, 255, 0, 0.5);
    }

    p span:nth-child(2),
    p span:nth-child(4) {
      font-weight: bold;
      font-size: 20px;
    }

    p span:nth-child(3) {
      background-color: rgba(0, 0, 0, 0.2);
    }

    /* table */

    table {
      width: 100%;
      border-collapse: collapse;
    }

    table td,
    table th {
      border: 1px solid #aaa;
      height: 50px;
    }
  </style>
</head>
<body>
    <h1>vertical-align</h1>
    <p><span>vertical-align:</span>
      <span style="vertical-align: baseline;">baseline;</span>
      <span>---</span>
      <span style="vertical-align: baseline;">수직정렬</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: sub;">sub;</span>
      <span>---</span>
      <span style="vertical-align: sub;">수직정렬</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: super;">super;</span>
      <span>---</span>
      <span style="vertical-align: super;">수직정렬</span></p>
    <p>
      <span>vertical-align:</span>
      <span style="vertical-align: text-top;">text-top;</span>
      <span>---</span>
      <span style="vertical-align: text-top;">수직정렬</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: text-bottom;">text-bottom;</span>
      <span>---</span>
      <span style="vertical-align: text-bottom;">수직정렬</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: middle;">middle;</span>
      <span>---</span>
      <span style="vertical-align: middle;">수직정렬</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: top;">top;</span>
      <span>---</span>
      <span style="vertical-align: top;">수직정렬</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: bottom;">bottom;</span>
      <span>---</span>
      <span style="vertical-align: bottom;">수직정렬</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: 4em;">4em;</span>
      <span>---</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: 4px;">4px;</span>
      <span>---</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: 20%;">20%;</span>
      <span>---</span></p>
    <p><span>vertical-align:</span>
      <span style="vertical-align: -10px;">-10px;</span>
      <span>---</span></p>

    <table>
      <caption>table cell vertical-align</caption>
      <thead>
        <tr>
          <th>속성 값</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td style="vertical-align:baseline;">vertical-align:baseline</td>
        </tr>
        <tr>
          <td style="vertical-align:top;">vertical-align:top</td>
        </tr>
        <tr>
          <td style="vertical-align:middle;">vertical-align:middle(cell 기본값)</td>
        </tr>
        <tr>
          <td style="vertical-align:bottom;">vertical-align:bottom</td>
        </tr>
        <tr>
          <td>null</td>
        </tr>
      </tbody>
    </table>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

11) 속성-text-align

  • 인라인 요소의 수평 정렬
  • div와 같은 블록 레벨 요소에는 적용되지 않음

 

/* Keyword values */
text-align: left;
text-align: right;
text-align: center;
text-align: justify; /* 자동 줄바꿈 시 양쪽 끝으로 정렬됨, 마지막 라인은 반응안함 */

https://www.w3schools.com/cssref/playdemo.asp?filename=playcss_text-align 

 

W3Schools CSS text-align demonstration

Align Me! This example demonstrates different text-align values. Have fun! For longer texts, notice that text-align: justify aligns each line so that they look excactly the same width: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus impe

www.w3schools.com

 

  • text-align 속성
    • 텍스트의 정렬을 지정하는 속성
    • 기본 값: left (Right to Left 언어일 경우는 right)
    • 속성 값                                               

 

  • text-align과 display의 관계
    • text-align은 inline-level에 적용
    • text-align은 block-level에 적용불가
    • block 요소를 가운데 정렬하고자 한다면? margin의 auto 값을 이용
    • 가운데 정렬 
      • 인라인 요소 : text-align (center)
      • 블럭 요소 :  margin (auto)

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>text-align</title>
  <style>
    p {
      max-width: 630px;
      border: 1px solid #888;
      padding: 10px;
    }
  </style>
</head>
<body>
  <h1>text-align</h1>
  <h2>left</h2>
  <p style="text-align: left;">이 안내서를 시작하기 전에, 사용법에 익숙한 텍스트 파일을 편잡할 수 있는 편집 툴이 필요하며 최신 브라우저도 필요하다. 파일을 편집하고 싶지 않다면 그냥 안내서를 읽고 해당 예시 그림을 보라. 그러나 배우는데는 더딜 것이다.</p>
  <h2>right</h2>
  <p style="text-align: right;">이 안내서를 시작하기 전에, 사용법에 익숙한 텍스트 파일을 편잡할 수 있는 편집 툴이 필요하며 최신 브라우저도 필요하다. 파일을 편집하고 싶지 않다면 그냥 안내서를 읽고 해당 예시 그림을 보라. 그러나 배우는데는 더딜 것이다.</p>
  <h2>center</h2>
  <p style="text-align: center;">이 안내서를 시작하기 전에, 사용법에 익숙한 텍스트 파일을 편잡할 수 있는 편집 툴이 필요하며 최신 브라우저도 필요하다. 파일을 편집하고 싶지 않다면 그냥 안내서를 읽고 해당 예시 그림을 보라. 그러나 배우는데는 더딜 것이다.</p>
  <h2>justify</h2>
  <p style="text-align: justify;">이 안내서를 시작하기 전에, 사용법에 익숙한 텍스트 파일을 편잡할 수 있는 편집 툴이 필요하며 최신 브라우저도 필요하다. 파일을 편집하고 싶지 않다면 그냥 안내서를 읽고 해당 예시 그림을 보라. 그러나 배우는데는 더딜 것이다.</p>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

12) 속성-text-indent

  • 문서나 코드를 살펴보면 새로운 문단의 시작에서 들여쓰기를 많이 사용함
  • 들여쓰기는 가독성을 향상하는 효과가 있음
  • text-indent를 이용해서 문장의 첫 줄을 들여쓰기 할 수 있음

 

/* <length> values 문단의 첫 줄 들여쓰기, 음수 사용가능 */
text-indent: 1em;
text-indent: 40px;

/* <percentage> value는 텍스트를 포함하는 컨테이너 블록의 폭 기준 */
text-indent: 15%;

 

  • text-indent 속성
    • 텍스트의 들여쓰기를 지정하는 속성
    • 기본 값: 0
    • 속성 값                               
      • length: 문단의 첫 줄에 대한 들여쓰기를 수행함. 음수 값을 사용할 수 있으며, 음수 값 사용 시 왼쪽으로 이동
      • percent (%): 텍스트를 포함하는 컨테이너 블록의 width(부모의 width)를 기준으로 변환된 백분율 값으로 들여쓰기

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>text-indent</title>
</head>
<body>
  <h1>text-indent</h1>
  <h2>length 1em</h2>
  <p style="text-indent: 1em;">이 안내서를 시작하기 전에, 사용법에 익숙한 텍스트 파일을 편잡할 수 있는 편집 툴이 필요하며 최신 브라우저도 필요하다. 파일을 편집하고 싶지 않다면 그냥 안내서를 읽고 해당 예시 그림을 보라. 그러나 배우는데는 더딜 것이다.</p>
  <h2>length 40px</h2>
  <p style="text-indent: 40px;">이 안내서를 시작하기 전에, 사용법에 익숙한 텍스트 파일을 편잡할 수 있는 편집 툴이 필요하며 최신 브라우저도 필요하다. 파일을 편집하고 싶지 않다면 그냥 안내서를 읽고 해당 예시 그림을 보라. 그러나 배우는데는 더딜 것이다.</p>
  <h2>percentage 15%</h2>
  <p style="text-indent: 15%;">이 안내서를 시작하기 전에, 사용법에 익숙한 텍스트 파일을 편잡할 수 있는 편집 툴이 필요하며 최신 브라우저도 필요하다. 파일을 편집하고 싶지 않다면 그냥 안내서를 읽고 해당 예시 그림을 보라. 그러나 배우는데는 더딜 것이다.</p>
  <h2>length -40px (비추천)</h2>
  <p style="text-indent:-40px;">이 안내서를 시작하기 전에, 사용법에 익숙한 텍스트 파일을 편잡할 수 있는 편집 툴이 필요하며 최신 브라우저도 필요하다. 파일을 편집하고 싶지 않다면 그냥 안내서를 읽고 해당 예시 그림을 보라. 그러나 배우는데는 더딜 것이다.<br>들여쓰기에 음수사용은 올바르지 않으며 본래의 기능에서 벗어남</p>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

13) 속성-text-decoration

  • <a>를 사용하면 기본적으로 텍스트 밑에 밑줄이 그어져서 표시됨
  • 이는 <a> 요소에 기본값으로 text-decoration이 있기 때문
  • text-decoration 속성을 이용하여 단순 밑줄 뿐만 아니라 다양한 줄의 스타일과 모양, 색상 등을 제어할 수 있음

 

/* Keyword values */
text-decoration: none;
text-decoration: overline; /* 위쪽 선 */
text-decoration: underline; /* 아래쪽 선 */
text-decoration: line-through; /* 중앙 선 */

 

  • text-decoration 속성
    • 텍스트의 장식을 지정하는 속성
    • 아래 속성들의 단축 속성
    • 기본 값: none currentColor solid
    • text-decoration-line
      • 기본 값: none
      • 속성 값                       
    • text-decoration-color
      • 텍스트 꾸밈의 색상을 지정하는 속성
      • 기본 값: currentColor
      • 색상 값을 사용하여 원하는 색상을 지정할 수 있음
    • text-decoration-style
      • 꾸밈에 사용되는 선의 스타일을 지정하는 속성
      • 기본 값: solid
      • 속성 값                         

 

  • 코드 실습
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>text-decoration</title>
</head>
<body>
  <h2>일반 경우</h2>
  <p style="text-decoration: overline;"> 
  text-decoration: overline;
  </p>
  <p style="text-decoration: underline;"> 
  text-decoration: underline;
  </p>
  <p style="text-decoration: line-through;"> 
  text-decoration: line-through;
  </p>


  <h2>부모 내 자식요소가 float될 경우 상속이 해제됨</h2>
  <a href="#" style="text-decoration: overline;"> <span style="float:left;"> 
  text-decoration: overline;</span>
  </a>
  <br>
  <h2>부모 내 자식요소가 absolute 경우 상속이 해제됨</h2>
  <a href="#" style="text-decoration: overline;"> <span style="position:absolute;"> 
  text-decoration: overline;</span>
  </a>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

14) 속성-단어 관련 속성

  • css에는 앞에서 배운 font와 관련된 텍스트에 대한 속성뿐만아니라, 단어에 대해서 어떻게 표현되게 할지 지정할 수 있음
  • 간단하게, 단어의 공백을 어떻게 처리할지, 단어 사이의 간격을 얼마만큼 가질지, 줄 바꿈이 되는 지점은 어디로 둘지 등을 제어할 수 있음

 

  • white-space 속성
    • 요소 안에 공백을 어떻게 처리할지 지정하는 속성
    • 기본 값: normal
    • 속성 값                               

https://www.w3schools.com/cssref/playdemo.asp?filename=playcss_white-space 

 

W3Schools CSS white-space demonstration

Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

www.w3schools.com

https://developer.mozilla.org/ko/docs/Web/CSS/white-space

 

white-space - CSS: Cascading Style Sheets | MDN

CSS white-space 속성은 요소가 공백 문자를 처리하는 법을 지정합니다.

developer.mozilla.org

 

 

  • letter-spacing 속성
    • 자간을 지정하는 속성
    • 기본 값: normal
    • 속성 값                               

https://www.w3schools.com/cssref/playdemo.asp?filename=playcss_letter-spacing 

 

W3Schools CSS letter-spacing demonstration

See this paragraph with different letter-spacing.

www.w3schools.com

 

 

  • word-spacing 속성
    • 단어 사이의 간격을 지정하는 속성
    • 기본 값: normal
    • 속성 값                               

https://www.w3schools.com/cssref/playdemo.asp?filename=playcss_word-spacing 

 

W3Schools CSS word-spacing demonstration

This example demonstrates the word-spacing property. You can see the result of the different word-spacing properties by clicking on one of the properties on the left.

www.w3schools.com

 

 

  • word-break 속성
    • 단어가 라인 끝에 나올 경우 어떻게 처리할 지(중단점) 지정하는 속성
    • 기본 값: normal
    • 속성 값                               

https://www.w3schools.com/cssref/playdemo.asp?filename=playcss_word-break&preval=break-all 

 

W3Schools CSS word-break demonstration

This is a prettyveryveryveryveryverylong word. Here-we-have-plenty-of-hyphens.

www.w3schools.com

 

 

  • word-wrap 속성
    • 요소를 벗어난 단어의 줄바꿈을 지정하는 속성
    • 기본 값: normal
    • 속성 값                               

https://www.w3schools.com/cssref/playdemo.asp?filename=playcss_word-wrap&preval=normal 

 

W3Schools CSS word-wrap demonstration

This is a prettyveryveryveryveryverylong word.

www.w3schools.com

 

 

 

 

 

 

 

 

 

 

 

'HTML&CSS' 카테고리의 다른 글

8. 실습 1  (0) 2022.10.07
7. 레이아웃  (0) 2022.09.30
5. 단위, 배경, 박스모델  (0) 2022.09.30
4. CSS 이해하기  (0) 2022.09.15
3. 콘텐츠모델, 시멘틱마크업, 블록&인라인  (0) 2022.09.13

 

*네이버 부스트코스의 웹 ui개발 공부한 것 정리*

 

 

1) 속성-정의와 구문

  • CSS의 속성은 그 종류가 매우 다양하고, 지속적으로 업데이트 되고 있기 때문에 CSS 관련 서적이나 강의를 통해서 모든 속성을 파악하는 데는 어려움이 있음 -> CSS reference를 활용하는 것 추천

 

 

CSS Reference

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

 

CSS: Cascading Style Sheets | MDN

Cascading Style Sheets(CSS)는 HTML이나 XML(XML의 방언인 SVG, XHTML 포함)로 작성된 문서의 표시 방법을 기술하기 위한 스타일 시트 언어입니다. CSS는 요소가 화면, 종이, 음성이나 다른 매체 상에 어떻게 렌

developer.mozilla.org

 

  • 확인 가능한 사항들

 

 

 

 

 

 

 

 

 

 

2) 속성-단위

  • CSS 속성과 값을 사용할 때 값과 함께 많이 사용되는 것 중의 하나는 "단위"임

 

  • 절대 길이
    • 절대 길이는 고정된 크기 단위로, 다른 요소의 크기에 영향을 받지 않음
    • 예시: px, pt
      • px (1px = 1/96th of 1 inch)
        • 절대 길이이므로 다른 요소의 영향을 받지 않아 화면에서 고정된 크기를 가지지만, 장치의 해상도에 따라 상대적임
        • 여러 환경에서 디자인을 같게 표현하고 브라우저 호환성에 유리한 구조로 되어 있어서, 디자인 의도가 많이 반영된 웹사이트의 경우 픽셀 단위 사용을 권장
      • pt (1pt-1/72 of 1 inch)
        • 컴퓨터가 없던 시절부터 있던 단위임
        • 인쇄물이나 워드프로세서 프로그램에서 사용된 가장 작은 표준 인쇄단위임
        • 웹 화면에 인쇄용 문서를 위한 스타일을 적용할 때 유용하게 사용할 수 있음
        • 그러나 사용하는 기기의 해상도에 따라 차이(Windows에서는 9pt = 12px, Mac에서는 9pt = 9px )가 있어 W3C에서도 pt는 웹 개발시 권장되지 않음

 

  • 상대 길이
    • 상대 길이는 다른 요소의 크기나 폰트 크기, 브라우저(viewport) 등의 크기에 따라 상대적으로 값이 변함
    • 예시: %, em, rem, vw
      • %
        • 부모의 값에 대해서 백분율로 환산한 크기를 갖게 됨
      • em (배수)
        • 해당 단위가 사용되고 있는 요소의 font-size 속성값을 기준으로 값을 환산, 소수점 3자리까지 표현 가능,
      • rem (배수)
        • root(최상위 요소)의 font-size 속성값을 기준으로 값을 환산함, HTML에서 최상위 요소는 <html>이므로 html 요소의 font-size 속성 값이 기준이 됨, 초보자에겐 rem을 쓰도록 권고 (em의 경우에는 몇 px로 변환될지에 영향을 주는 변수가 많아서 재사용이 어렵고 유지보수가 힘들어지는 경향이 있음)
      • vw
        • viewport의 width값을 기준으로 1%의 값으로 계산됨

 

 

See the Pen Untitled by kim seoyoung (@seoooo) on CodePen.

 

 

 

 

 

 

 

 

 

 

3) 속성-색상

  • 색상 값 지정 방식
    1. 컬러 키워드
      • CSS 자체에서 사용가능한 문자 식별자
      • red, blue, black 등과 같이 미리 정의되어있는 키워드를 이용해 색상을 표현할 수 있음
      • **  참고: transparent는 투명을 나타내는 키워드 **
    2. 16진법 - 6자리 수 
      • #RRGGBB 로 표현함
      • 각 자리수는 16진수(0-9, A-F)로 두 자리씩 세 가지 색상을 나타냄
      • 첫 번째 두 자리는 적색(RR), 가운데 두 자리는 녹색(GG) 마지막 두 자리는 청색(BB)을 의미함
      • 알파벳은 대소문자를 구분하지 않음
    3. 16진법 - 3자리 수
      • #RGB 로 표현함
      • 위 방식에서 같은 색을 표현하는 두 값이 같으면 3자리 수로 축약하여 사용 가능함
      • 예를 들어, #aa11cc는 #a1c로 축약하여 사용 가능
    4. RGB()
      • RGB 값은 rgb(R, G, B)의 형태로 각 변수 값(적색, 녹색, 청색)의 강도를 정의함
      • 0~255의 정수로 된 값을 지정할 수 있으며, 0 -> 255는 검정 -> 흰색으로 값의 변화를 나타냄
    5. RGBA()
      • RGBA 값은 기존 RGB에서 A(투명도) 값이 추가된 형태임
      • A 값은 0 ~ 1 사이의 값을 지정할 수 있으며, 0.5와 같이 소수점으로 표기함
      • 0 -> 1은 투명 -> 불투명으로 값의 변화를 나타냄

 

 

 

<named-color> - CSS: Cascading Style Sheets | MDN

The <named-color> CSS data type is the name of a color, such as red, blue, black, or lightseagreen. Syntactically, a <named-color> is an <ident>.

developer.mozilla.org

 

 

RGB 색상 추출하기

여러분, 하고싶은 작업이 있는데 어떻게 하는지 몰라 답답한적 있으신가요~? 저는 있습니다(너무 많아요ㅠ....

blog.naver.com

 

  • 예시 코드

See the Pen 속성-색상 by kim seoyoung (@seoooo) on CodePen.

 

 

 

 

 

 

 

 

 

 

4) 속성-background

  • background 속성으 요소의 배경에 관련된 속성을 지정할 때 사용함
  • 배경에 관련된 속성에는 색상, 이미지, 반복 여부 등 여러 속성이 존재하고, 이를 한 번에 모아서 사용할 수도 있음

 

  • background-color
    • 배경의 색상을 지정하는 속성
    • 기본 값: transparent
  • background-image
    • 배경으로 사용할 이미지의 경로를 지정하는 속성
    • 기본 값: none
    • url의 경로는 절대 경로, 상대 경로 모두 사용 가능
    • 만약 background-color에 색상이 적용된 상태에서 background-image로 사용된 이미지에 투명한 부분이 있다면, 해당 부분에 background-color 색상이 노출됨
  • background-repeat
    • 이미지의 반복 여부와 방향을 지정하는 속성
    •  기본 값: repeat
    • 기본 값이 repeat이기 때문에 따로 설정하지 않으면 x, y 축으로 반복되어서 표시됨
    • 속성 값으로 사용할 수 있는 것들은 다음과 같음
  • background-position
    • 요소에서 배경 이미지의 위치를 지정하는 속성
    • 기본 값: 0% 0%
    • x축, y축으로부터의 위치를 지정할 수 있으며, 값의 선언 순서는 x축, y축으로부터의 간격임
    • 만약 한쪽만 지정된다면 나머지는 중앙 값(center)으로 적용됨
    • 속성 값으로 사용할 수 있는 것들은 다음과 같음
  • background-attachment
    • 화면 스크롤에 따른 배경 이미지의 움직임 여부를 지정하는 속성
    • 기본 값: scroll
    • 속성 값으로 사용할 수 있는 것들은 다음과 같음
    • ** local은 자주 쓰이지 않으므로 일단넘어감, scroll과 fixed의 차이만 알고 가기 **
  • background 축약
  • 코드 예시

See the Pen 속성-background by kim seoyoung (@seoooo) on CodePen.

 

 

 

 

 

 

 

 

 

 

5) 속성-boxmodel

  • HTML의 모든 요소는 사각형의 박스 형태로 만들어짐
  • 이 박스는 총 4가지의 세분화된 영역으로 구성되어있으며 영역마다 다양한 스타일을 적용할 수 있음
  • 이 4가지 영역을 통틀어서 boxmodel이라 함

 

  • boxmodel의 구성

 

  • Content 영역
    • 요소의 실제 내용을 포함하는 영역
    • 크기는 내용의 너비 및 높이를 나타냄
  • Border 영역
    • content 영역을 감싸는 테두리 선을 포함하는 영역
  • Padding 영역
    • content 영역과 테두리 사이의 여백을 padding이라 함
    • content 영역이 배경, 색 또는 이미지가 있을 때 패딩 영역까지 영향을 미침
    • 따라서 padding을 content의 연장으로 보기도 함
  • Margin 영역
    • 테두리 바깥쪽 영역을 margin이라 함
    • border 영역을 다른 요소와 구별하기 위해 쓰이는 빈 영역
    • 주변 요소와의 여백(간격)을 margin을 이용해 지정할 수 있음

 

  • 코드 예시

See the Pen Untitled by kim seoyoung (@seoooo) on CodePen.

 

 

 

 

 

 

 

 

 

 

6) 속성-border

  • 요소의 테두리에 관련된 속성을 지정할 때 사용함
  • 테두리의 굵기, 모양, 색상을 지정할 수 있는 속성들이 있으며 축약하여 적용할 수도 있음

 

  • border-width
    • 선의 굵기를 지정하는 속성
    • 기본 값: medium
    • border-top-width, border-bottom-width, border-right-width, border-left-width를 이용하여 상하좌우 선의 굵기를 다르게 표현할 수도 있음
    • 여러 축약형을 가짐                   
    • 속성 값 예시                   
  • border-style
    • 선의 모양을 지정하는 속성
    • 기본 값: none
    • border-top-width, border-bottom-width, border-right-width, border-left-width를 이용하여 상하좌우 선의 모양를 다르게 표현할 수도 있음
    • 속성 값 예시             
  • border-color
    • 선의 색상을 지정하는 속성
    • 기본 값: currentColor
    • border-top-width, border-bottom-width, border-right-width, border-left-width를 이용하여 상하좌우 선의 모양를 다르게 표현할 수도 있음

 

  • border 축약
    • 사용 방법
    • 코드 예시                                                                                  

 

  • 코드 예시

See the Pen 속성-border by kim seoyoung (@seoooo) on CodePen.

 

 

 

 

 

 

 

 

 

 

7) 속성-padding

  • padding 속성
    • 기본 값: 0
    • 속성 값 예시                     
    • padding-top: content 영역의 위쪽 여백을 지정함
    • padding-right: content 영역의 오른쪽 여백을 지정함
    • padding-bottom: content 영역의 아래쪽 여백을 지정함
    • padding-left: content 영역의 왼쪽 여백을 지정함

 

  • syntax
    • 기본적으로 padding의 4가지 속성을 위와 같이 축약하여 사용할 수 있음
    • 속성의 순서는 고정되어있으며, 위쪽을 기준으로 시계방향으로 돌아간다고 생각하면 쉬움
    • 축약형으로 사용할 때 반드시 4개의 속성에 대한 값을 모두 적어야 하는 것은 아님
    • 속성값은 1~4개의 값을 사용할 수 있으며 상하, 좌우 영역의 값이 같을 때 하나로 합쳐서 적용할 수 있음
    • ** 참고: CSS에서 0 값에 대해서는 단위를 따로 적지 않음 (0px = 0% = 0em ... => 0) **

 

  • 코드 예시

See the Pen 속성-padding by kim seoyoung (@seoooo) on CodePen.

 

 

 

 

 

 

 

 

 

 

8) 속성-margin

  • margin은 다른 요소와의 간격을 만들 수 있음
  • Padding과 사용하는 방식이 유사하지만 몇 가지 차이점이 있으므로 이에 유의할 것

 

  • margin 속성
    • 기본 값: 0
    • 속성 값 예시                                                 
    • margin-top: border 영역의 위쪽 여백을 지정함
    • margin-right: border 영역의 오른쪽 여백을 지정함
    • margin-bottom: border 영역의 아래쪽 여백을 지정함
    • margin-left: border 영역의 왼쪽 여백을 지정함

 

  • syntax       
    • padding과 마찬가지로 축약하여 사용할 수 있고, 상하/좌우에 대해서 값이 같으면 하나로 합하여 사용할 수 있음
    • margin에서는 수치 이외에 사용할 수 있는 'auto' 값이 있음
    • margin auto
      • 기본적으로 브라우저에 의해 계산이 이루어지는데, 대부분의 경우 0 (기본 값) 또는 요소의 해당 측면에서 사용 가능한 공간과 같은 값을 가짐
      • width랑 함께 사용
      • 이를 활용하여 수평 중앙 정렬을 할 수 있음
      • 좌우의 margin이 모두 auto로 적용되었다면, 브라우저는 요소가 가질 수 있는 가로 영역에서 자신의 width를 제외한 나머지 여백의 크기에 대해 균등 분할하여 적용함 -> 수평 중앙 정렬
      •  상하의 경우 수직 중앙 정렬이 되지 않음

 

  • margin collapse (마진 병합)
    • 마진 병합은 인접한 두 개 이상의 수직 방향 박스의 마진이 하나로 합쳐지는 것을 의미함
    • 마진 병합이 일어나는 경우는 다음의 세가지 경우가 있음
      • 두 요소가 상하로 인접한 경우: 위 요소의 하단 마진과 아래 요소의 상단 마진의 병합이 일어남
      • 부모 요소의 첫 번째 자식 요소 또는 마지막 자식 요소
        • 부모 요소의 상단 마진과 첫 번째 자식 요소의 상단 마진 병합이 일어남
        • 부모 요소의 하단 마진과 마지막 자식 요소의 하단 마진 병합이 일어남
      • 내용이 없는 빈 요소의 경우: 해당 요소의 상단 마진과 하단 마진의 병합이 일어남
    • 마진 병합은 수직 방향으로만 이루어지며, 좌우에 대해서는 일어나지 않음
    • 마진 병합은 마진이 반드시 맞닿아야 발생하기 때문에 2, 3번째의 경우 패딩 및 보더가 없어야 함

 

  • 코드 예시

See the Pen 속성-margin by kim seoyoung (@seoooo) on CodePen.

 

 

 

 

 

 

 

 

 

 

9) 속성-margin&padding

  • padding과 margin은 모두 여백이 필요로 할 때 적용하는 속성이기 때문에 border의 경계가 명확하게 표시되지 않으면 어떤 속성으로 필요한 여백을 표현할지 헷갈릴 수 있음
  • 자신이 원하는 속성을 이용해서 여백을 표현하여도 상관은 없지만 엄연히 다른 속성이기 때문에 두 속성의 차이를 명확히 알고 사용할 수 있어야 함

 

  • margin과 padding의 비교           
    • 음수 값 사용 가능 여부
      • 왜 margin은 음수 값 적용이 가능하고, padding은 적용되지 않을까?
      • padding은 뼈와 우리 피부 사이의 지방이라고 생각하고, margin은 사람과 사람 사이의 간격이라고 생각하면 쉬움. 지방은 아무리 뺀다고 해서 피부가 뼈보다 밑으로 갈 수 없을 뿐만 아니라, 0 이하가 될 수 없으므로 양수만 된다고 생각하면 됨. 그러나 사람과 사람 사이는 멀리 떨어질 수도 있지만, 서로 겹쳐서 서 있을 수도 있으므로 음수 값이 가능하다고 생각하면 됨
    • %값의 사용과 기준점
      • css 속성을 사용하면서 어떤 값을 적용할 때 이 단위를 적용할 수 있을까? 라는 생각을 가지고 코딩하는 자세는 매우 중요함
      • margin과 padding은 px과 같은 고정적인 단위 외에도 %라는 상대적인 단위를 사용할 수 있음
      • %는 요소의 크기를 기준으로 상대적인 값을 결정짓게 됨. 얼핏 생각하면, 상하는 height 값에 대해 좌우는 width 값에 대해 크기가 계산될 것 같지만 그렇지 않음. -> %는 상하좌우의 방향에 관계없이 모두 요소의 width 값을 기준으로 값이 결정됨
      •  만약 위와 같은 코드의 경우에는 margin과 padding이 모두 20px 10px 20px 10px으로 적용되는 것이 아니라, 10px 10px 10px 10px 값으로 적용됨

 

  • 코드 예시

See the Pen 속성-margin&padding by kim seoyoung (@seoooo) on CodePen.

 

 

 

 

 

 

 

 

 

 

10) 속성-width

  • width 속성은 요소의 가로 크기를 정의하는 데 사용함
  • 정확히는 content 영역의 너비를 지정함
  • 크기를 지정한다는 것은 같지만, 요소의 종류나 특징에 따라서 다르게 동작하기도 함
  • 인라인 레벨 요소를 제외한 모든 요소에 적용됨

 

  • width 속성
    • 기본 값: 0
    • 속성 값 예시                                       
    • width는 content 영역의 너비를 제어할 때 사용하는데 이때 auto가 아닌 특정한 값을 지정하여 사용하면, 그 크기는 box model 영역에서 margin 영역을 제외한 모든 영역에 대해 영향을 받음 (content, padding, border)
    • 위와 같이 선언되어 있다면 요소의 총 가로 크기는 160px이 됨 (100 + 20*2 + 10 * 2 = 160px)
    • 또한, width는 %를 이용해서도 크기를 지정할 수 있음
    • 위와 같이 코드를 적용했을 때 .child의 크기는 어떻게 적용될까?
    • 150 (부모의 width인 300 px의 50%) + 20 * 2 + 10 * 2 = 210px
    • 결국 % 값일 때에는 부모의 width값에 대해서 계산되어지는데, 이때 부모의 width는 content 영역의 크기를 의미
    • 부모가 인라인 레벨 요소일 때는, 자식(블록 요소)이 width 값에 %를 가지면, 가장 가까운 블록 레벨인 조상의 width를 기준으로 계산됨. 만일 최상단까지 블록 레벨 요소가 없으면 body를 기준으로 계산됨
    • ** 참고: width는 기본적으로 content 영역의 너비를 지정하는 것이고, box-sizing 값은 content+padding+border 값임 **

 

 

 

 

 

 

 

 

 

 

11) 속성-height

  • height은 요소의 세로 크기를 정의하는 데 사용하는 속성
  • width와 마찬가지로 정확히는 content 영역의 높이를 지정
  • 기본적으로 width의 동작 방식과 같게 동작하지만, % 값을 가졌을 때의 동작 방식이 조금 다름

 

  • height 속성
    • 기본 값: 0
    • 속성 값 예시                                       
    • 예를 들어 고정 값으로 height을 지정했다면,
    • 요소의 총 세로 크기는 150px이 됨 (100 + 10*2 + 15 * 2 = 150px)
    • %로 height을 지정했다면,
    • .child의 높이는 어떻게 적용될까?             
    • height: auto 일 때와 아무 차이가 없음
    • 이유는 부모 요소가 명시적인 높이 값을 가지고 있지 않기 때문에 자식의 높이를 %값으로 지정해줘도 적용되지 않았던 것
    • 부모 코드에 height: 200px로 명시적인 높이 값을 지정해주면 아래와 같이 적용되는 것을 확인할 수 있음

 

 

 

 

 

 

 

 

 

 

12) 속성-boxmodel 정리

  • 박스 모델은 content, padding, border, margin의 총 4가지 영역으로 나누어 짐
  • content 영역의 너비와 높이는 width, height를 통해서 제어할 수 있음
  • 요소의 전체 크기 = content + padding + border
  • 다른 요소와의 여백은 margin을 이용하여 줄 수 있으며 음수값 사용 가능
  • margin은 상하 요소 사이의 병합 현상이 일어나고 이때, 큰 값을 기준으로 병합됨

 

 

 

 

 

 

 

 

 

 

'HTML&CSS' 카테고리의 다른 글

7. 레이아웃  (0) 2022.09.30
6. 폰트, 텍스트  (0) 2022.09.30
4. CSS 이해하기  (0) 2022.09.15
3. 콘텐츠모델, 시멘틱마크업, 블록&인라인  (0) 2022.09.13
2. HTML 태그  (0) 2022.09.13

*네이버 부스트코스의 웹 ui개발 공부한 것 정리*

 

1) CSS 소개

  • 웹 페이지를 사람에 비유해보자면, 마크업 언어(HTML)은 몸의 구조(뼈, 근육)을 담당하고, CSS는 옷과 신발과 같이 외적으로 꾸며주는 역할을 한다고 생각하면 됨
  • CSS(Cascading Style Sheets): HTML(마크업 언어)을 꾸며주는 언어
  • HTML이 웹페이지의 정보를 표현한다면, CSS는 html을 보기 좋게 디자인하는 역할임
  • CSS는 분명히 HTML과는 독립된 다른 언어이지만 마크업 문서 자체가 존재하지 않으면 CSS는 무용지물(마크업 문서가 없다면 표현할 대상이 없기 때문)
  • 그래서 보통 CSS는 마크업 언어인HTML과 같이 묶어서 이야기를 함
  • 전 세계의 많은 웹 사이트들은 모두 HTML 태그를 이용해서 만들어졌고, 자주 사용되는 태그의 개수가 20여 개에 불과함에도 불구하고 각각 다양하고 독창적인 디자인으로 표현가능한 이유는 바로 CSS 때문임
  • http://www.csszengarden.com/
 

CSS Zen Garden: The Beauty of CSS Design

So What is This About? There is a continuing need to show the power of CSS. The Zen Garden aims to excite, inspire, and encourage participation. To begin, view some of the existing designs in the list. Clicking on any one will load the style sheet into thi

www.csszengarden.com

 

 

 

 

 

2) CSS 문법과 적용

  • CSS는 꾸밀 대상이 되는 요소(html 태그)와 그에 대한 스타일 내용 집합으로 이루어져 있음
    • 선택자(selector) - h1 : 어느 요소(html 태그)를 꾸밀건지 선택  
    • 속성(property) - color, font-size : 
    • 값(value) - yellow, 2em
    • 선언(declaration) - color: yellow, font-size: 2em : 선언과 선언 사이에는 ";"이 있어야 함
    • 선언부(declaration block) - {color: yellow; font-size: 2em;} : 어떻게 꾸밀건지에 대한 내용이 담겨있음
    • 규칙(rule set) - h1 {color: yellow; font-size: 2em;} : 여러 개의 규칙이 합쳐져서 CSS문서가 됨
  • 올바른 CSS 규칙 선언 예시)

  • 잘못된 CSS 규칙 선언 예시)

  • 선택자와 선언부 사이 혹은 선언과 선언 사이에는 앞뒤로 개행 O
  • 하지만 속성이름과 속성값 사이에는 개행 X

 

  • CSS 주석 사용 방법

 

  • CSS의 적용
    1. Inline: 해당 요소에 직접 스타일 속성을 이용해서 규칙들을 선언하는 방법, 해당 요소에 직접 입력하기 때문에 선택자는 필요하지 않고 선언부만 style의 속성 값으로 넣어주면 됨, 코드의 재활용이 되지 않기 때문에 자주 사용X
    2. Internal: html문서의 <head>태그 내에서 <style>태그를 사용하여 규칙을 선언해주는 방법, 많은 페이지가 있는 경우 모든 페이지에 규칙을 선언해주어야 함, 페이지와 스타일 규칙이 많아지면 한계가 있음
    3. External: 외부 CSS 파일을 이용하는 방법, 외부 CSS 파일에 스타일 규칙을 선언하고 html 문서의 <head>태그 내에서 <link>태그를 이용하여 외부 CSS 파일과 html파일을 연결해주면 됨, rel속성은 연결되는 파일이 html문서와 어떤 관계인지를 명시하는 속성으로 CSS 파일은 항상 "stylesheet"라고 적어주면 됨, href 속성은 연결되는 파일이 있는 주소를 값으로 적어주면 됨, 수정이 필요할 때는 외부 css 파일만을 수정해주면 연결된 모든 페이지에 반영이 가능함, 파일 관리가 편하고 용량이 작기 때문에 주로 사용되는 방법
    4. Import: 스타일 시트 내에서 다른 스타일 시트 파일을 불러오는 방식, 성능상 좋지 않아서 거의 쓰이지 않으므로 넘어감.

1. Inline 방식 (html 문서 내부에서 작성)

 

2. Internal 방식 (html 문서 내부에서 작성)

 

3. External 방식 (CSS 문서에서 작성한 뒤 html과 연결)

 

4. Import 방식

 

 

 

 

 

3) 선택자

  • 요소 선택자
    • 선택자 중 가장 기본이 되는 선택자이며, 태그 선택자라고도 함
    • 아래 코드를 보면, 선택자인 태그들에게 각각 해당하는 스타일 규칙이 적용될 것임을 알 수 있음

 

  •  그룹화
    • 선택자는 쉼표를 이용해서 그룹화 할 수 있음
    • 아래 코드는 위 코드와 같은 의미임

 

  • 별표를 이용하면 문서 내에 모든 요소를 선택할 수 있음 (*: 전체 선택자)
  • 하지만 성능에 좋지 않으므로 사용을 지양함

 

 

  • QUIZ 1) 아래 HTML 문서에서 "HTML"이라는 문자에는 보라색 글자를 지정하고, "CSS"라는 문자에는 빨간색 글자를 지정하고 싶으면 어떤 선택자를 사용해야 할까??

 

 

  • class 선택자
    • 태그에 구애받지 않고 스타일 규칙을 적용할 수 있는 가장 일반적인 방법은 class 선택자를 활용하는 것임
    • class 선택자를 사용하기 위해서는 HTML을 수정해 class 속성을 추가해야 함
    • class 속성은 글로벌 속성이므로 어느 태그에서도 사용가능함
    • class 속성의 값을 이용하여 해당 요소에 스타일 규칙을 적용할 수 있음
    • 어느 태그든지 class 속성값이 같으면 같은 스타일 규칙을 적용받게 됨
    • 사용 방법: .속성값 {스타일 규칙}

 

 

  • 다중 class
    • class 속성은 꼭 하나의 값만 가질 수 있는 것은 아님
    • 공백으로 구분하여 여러 개의 class 속성 값을 넣을 수 있음 즉, 하나의 요소에 여러 스타일 시트를 적용할 수 있음
    • 아래 코드를 보면, <p>태그의 class 속성에 "foo"와 "bar" 속성값을 넣어서 폰트 크기와 색상을 모두 지정해주는 것을 확인할 수 있음

 

 

  • id 선택자
    • id 속성을 사용하여 스타일 시트를 적용하는 방식
    • html 문서 내에 유일하게 사용되어야 함
    • : id 선택자는 특정 태그 하나만을 선택할 때 사용하고 중보그로 사용하고자 한다면 class 속성을 사용하여야 한다. 여러 태그가 중복 id 값을 가지더라도 에러가 발생하지는 않지만 자바스크립트에서 특정 id를 선택할 때 문제가 발생할 수 있기 때문에 id 값은 중복으로 사용하지 말아야 함
    • 사용 방법: #속성값 {스타일 규칙}
    • class와 id는 동일한 속성값을 가질 수 있음

 

 

  • 코드 예제)

 

 

  • 선택자의 조합
    • 선택자는 요소와 class, class와 class, id와 class 등을 조합하여 적용할 수 있음
    • 아래 코드를 살펴보면, 
    • 첫 번째 경우에는 <p>태그이면서 class 속성에 bar가 있어야 스타일 시트가 적용됨
    • 두 번째 경우에는 class 속성에 foo와 bar가 모두 있어야 적용됨
    • 세 번째 경우에는 id가 foo이면서 class가 bar인 요소에만 적용됨

  • 코드 예제)

 

  • 속성 선택자 - 단순 속성으로 선택
  • 속성 선택자는 대괄호를 이용해서 선언하며 대괄호 안에 속성 이름이 들어감 (속성값 아님)
  • 요소에 해당 이름의 속성이 있다면 스타일 시트가 적용됨
  • 코드 예제)

 

 

  • 속성 선택자 - 정확한 속성값으로 선택
    • 속성의 값으로 요소를 선택하는 것
    • 대괄호 안에 속성 이름과 속성 값을 다 적으며, 태그와 속성 이름과 속성값이 모두 일치할 때 스타일 시트가 적용됨

 

 

  • 속성 선택자 - 부분 속성값으로 선택
    • 속성 이름과 속성값 사이에 사용되는 기호에 따라 동작이 달라짐
    • [class~="bar"] : class 속성의 값이 공백으로 구분한 "bar" 단어가 포함되는 요소 선택
    • [class^="bar"] : class 속성의 값이 "bar"로 시작하는 요소 선택
    • [class$="bar"] : class 속성의 값이 "bar"로 끝나는 요소 선택
    • [class*="bar"] : class 속성의 값이 "bar" 문자가 포함되는 요소 선택

각각의 스타일 시트가 몇 번째 요소들에 적용이 될까?

더보기

p[class~="color"] { font-style: italic; } /* 1, 2번째 요소 */
p[class^="color"] { font-style: italic; } /* 1, 3번째 요소 */
p[class$="color"] { font-style: italic; } /* 2번째 요소 */
p[class*="color"] { font-style: italic; } /* 1, 2, 3번째 요소 */

 

 

 

 

 

4) 문서 구조 관련 선택자

  • 부모와 자식 관계 이해하기
  • 코드 예시) 

  • 부모와 자식
    • 부모 요소는 그 요소를 포함하는 가장 가까운 상위 요소로, 그 요소의 부모 요소는 단 하나뿐임
    • 자식 요소는 부모 요소와 반대라고 생각하면 되며 자식 요소는 여러 개일 수 있음
    • 위 예시에 대해,
      • <body>의 부모 요소: <html> ↔ <html>의 자식 요소: <head>, <body>
      • <div>의 부모 요소: <body> ↔ <body>의 자식 요소: <div>, <span>, <p>
      • <h1>의 부모 요소: <div> ↔ <div>의 자식 요소: <h1>, <span>
      • <span>의 부모 요소: <h1> ↔ <h1>의 자식 요소: <span>

 

  • 조상과 자손
    • 조상과 자손의 관계는 부모와 자식의 관계와 비슷함
    • 정확히 얘기하면 부모와 자식의 관계를 포함한 확장된 관계
    • 조상 요소는 그 요소를 포함하는 모든 요소로, 부모 요소를 포함하여 여러 개일 수 있음
    • 자손 요소는 그 반대로, 그 요소가 포함하고 있는 모든 요소가 자손 요소임
    • 위 예시에 대해,
      • <body>의 조상 요소: <html> ↔ <html>의 자손 요소: <head>, <body>, <div>, <span>, <p>, <h1>
      • <div>의 조상 요소: <html>, <body> ↔ <body>의 자손 요소: <div>, <span>, <p>, <h1>
      • <h1>의 조상 요소: <html>, <body>, <div> ↔ <div>의 자손 요소: <h1>, <span>
      • <span>의 조상 요소: <html>, <body>, <div>, <h1> ↔ <h1>의 자손 요소: <span>
    • 보통 문서의 요소들은 모두 이처럼 어느 요소의 자식(자손) 요소이자 부모(조상) 요소가 되는 경우가 많음

 

  • 형제
    • 부모와 자식, 조상과 자손 말고도 형제 관계도 있음
    • 같은 부모를 가지고 있는 요소들은 서로 형제 관계에 있음
    • 위 예시에서는 <div>, <span>, <p> 가 형제 요소임
    • 형제 관계 중에는 인접한 관계도 있음
    • 형제 관계에 있는 요소 중 바로 뒤에 이어 나오는 요소를 인접해 있다고 함
    • 즉, <span>이 <div>에 인접한 형제 요소이며 <p>가 <span>에 인접한 형제 요소가 됨
    • 문서의 구조는 흔히 가계도나 조직도의 관계에 빗대어 생각하면 이해하기 쉬움

 

 

 

  • 문서 구조 관련 선택자
  • 문서 구조를 이용한 선택자는 3가지가 있음: 자손 선택자, 자식 선택자, 인접 선택자

 

  • 자손 선택자
    • 자손 선택자는 선택자 사이에 아무 기호없이 그냥 공백으로 구분함
    • 예시)  

  • 이 선택자는 <div>의 자손 요소인 <span>만을 선택하는 선택자임

 

  • 자식 선택자
    • 자식 선택자는 선택자 사이에 닫는 꺽쇠 기호(>)를 넣음
    • 꺽쇠 기호와 선택자 기호 사이에는 공백이 있거나 없어도 상관 없음
    • 예시) 

  • 이 선택자는 <div>의 자식 요소인 <h1>을 선택하는 선택자 입니다.

 

  • 인접 형제 선택자
    • 인접 형제 선택자는 선택자 사이에 + 기호를 넣음
    • 자식 선택자와 마찬가지로 공백은 있거나 없어도 상관 없음
    • 인접 형제 선택자는 형제 관계이면서 바로 뒤에 인접해 있는 요소를 선택하는 선택자임
    • 예시) 

  • 이 선택자는 <div>의 형제 관계이면서 바로 뒤에 인접해 있는 <p>를 선택하는 선택자 입니다.

 

  • 일반 형제 선택자
    • 일반 형제 선택자는 선택자 사이에 틸트(~) 기호를 넣음
    • 일반 형제 선택자는 부모는 같은 형제 선택자이지만 꼭 두형제가 인접할 필요는 없음

 

  • 문서 구조 관련 선택자는 더 복잡하게도 사용할 수 있음
  • 유의할 점은 요소들이 많이 나열되어 있더라도 제일 우측에 있는 요소가 실제 선택되는 요소라는 것!

 

 

 

 

 

5) 가상 선택자

  • 가상 클래스(pseudo class)
    • 가상 클래스는 미리 정의해놓은 상황에 적용되도록 약속된 보이지 않는 클래스
    • 가상 클래스는 콜론(:) 기호를 써서 나타냄
    • 직접 요소에 클래스를 선언하는 것은 아니고, 약속된 상황이 되면 브라우저 스스로 클래스를 적용해 줌
    • 예를 들어, <p>에 마우스 커서를 올렸을 때만 특정 스타일을 주고 싶다면 어떻게 해야 할까??
    • 가상 클래스가 없다면 (임의의 클래스 선택자를 선언하여 특정 스타일 규칙을 만듬 -> p 요소에 커서가 올려가면 p 요소에 클래스를 삽입 -> p 요소에서 커서가 빠지면 p 요소에 클래스 삭제) 와 같은 과정을 거쳐야 함
    • 하지만 HTML과 CSS는 정적인 언어이기 때문에 이를 처리할 수 없음
    • 따라서 가상 클래스가 필요한 것!
    • 위 예시는 :hover 가상 클래스 선택자를 이용해서 스타일 규칙을 만들면 됨 (hover는 마우스 커서가 올라갔을 때 적용이 되도록 정의되어 있음)
  • https://developer.mozilla.org/ko/docs/Web/CSS/Pseudo-classes
 

의사 클래스 - CSS: Cascading Style Sheets | MDN

CSS 의사 클래스(가상 클래스)는 선택자에 추가하는 키워드로, 선택한 요소가 특별한 상태여야 만족할 수 있습니다. 예를 들어 :hover를 사용하면 포인터를 올렸을 때에만 글씨 색을 바꾸고 싶을

developer.mozilla.org

 

 

  • 문서 구조와 관련된 가상 클래스
    • 문서 구조와 관련된 가상 클래슨 first-child와 last-child 가상 클래스 선택자임
    • :first-child : 첫 번째 자식 요소 선택
    • :last-child : 마지막 자식 요소 선택
    • 첫 번째 <li>와 마지막 <li>에 가상 클래스가 적용됨
    • 실제 <li>에는 class 속성이 없지만 내부적으로 가상 클래스가 적용되어 마치 아래의 코드와 같이 동작하게 됨

 

 

  • 앵커 요소와 관련된 가상 클래스
    • 앵커 요소와 관련된 가상 클래스로는 :link와 :visited가 있음
    • :link : 하이퍼 링크이면서 아직 방문하지 않은 앵커
    • :visited : 이미 방문한 하이퍼링크를 의미
    • ** 하이퍼 링크는 앵커 요소에 href 속성이 있는 것을 의미함

 

 

  • 사용자 동작과 관련된 가상 클래스
    • 이 클래스들도 주로 <a>에 많이 쓰임
    • 다만, <a>에만 쓸 수 있는 것은 아니며 이 조건에 맞는 상황이 되는 요소들은 다 사용이 가능함
    • :focus : 현재 입력 초점을 가진 요소에 적용
      • 초점(focus)이란 지금 현재 선택을 받는 것을 의미
      • 예를 들어, 입력 폼 요소에 텍스트를 입력하려고 마우스 클릭을 해서 커서를 입력 폼 위에 올려놓으면 그때 입력 폼 요소가 초점을 받는 상태임
      • 또한, 키보드의 탭 키를 이용해서 요소를 탐색하다 보면 링크나 버튼에 점선 테두리가 이동하는 것을 볼 수 있는데, 점선 테두리가 위치하는 것도 초점을 받은 상태임
    • :hover : 마우스 포인터가 있는 요소에 적용
    • :active : 사용자 입력으로 활성화된 요소에 적용

 

 

 

 

 

  • 가상 요소(pseudo element)
    • 가상 요소는 HTML 코드에 존재하지 않는 구조 요소에 스타일을 부여할 수 있음
    • 가상 요소도 가상 클래스처럼 문서 내에 보이지는 않지만, 미리 정의한 위치에 삽입되도록 약속이 되어있음
    • 선언 방법은 가상 클래스와 같게 콜론을 사용하며
    • CSS3부터는 가상 클래스와 가상 요소를 구분하기 위해 가상 요소에는 ::(더블 콜론) 기호를 사용하기로 함
    • 하지만 하위 브라우저에서 :: 문법을 지원하지 않는 문제가 있으므로 상황에 따라 : 기호를 사용하여야 함 
    • https://developer.mozilla.org/ko/docs/Web/CSS/Pseudo-elements 
 

의사 요소 - CSS: Cascading Style Sheets | MDN

CSS 의사 요소(가상 요소)는 선택자에 추가하는 키워드로, 선택한 요소의 일부분에만 스타일을 입힐 수 있습니다. 예를 들어 ::first-line (en-US)을 사용하면 문단 첫 줄의 글씨체만 바꿀 수 있습니다.

developer.mozilla.org

 

 

  • ::before : 가장 앞에 요소를 삽입
  • ::after : 가장 뒤에 요소를 삽입
  • ::first-line : 요소의 첫 번째 줄에 있는 텍스트
  • ::first-letter : 블록 레벨 요소의 첫 번째 문자

  • before와 after 가상 요소는 애초에 내용이 없는 상태로 생성되기 때문에 내용을 넣기 위해 content 속성을 이용해야 함

 

 

 

 

 

 

 

6) 구체성

  • 어떤 요소에 적용된 CSS 스타일이 상충할 때 어떤 스타일을 적용할지 결정하기 위해 브라우저는 각 스타일에 구체성을 부여하고  판단하여 우선으로 적용할 것을 선택함
  • 요소를 선택하는 데에는 여러 방법이 있으므로 서로 다른 선택자를 이용해 같은 요소를 선택할 수도 있음
  • 아래 예시처럼 같은 요소를 선택하는 서로 다른 규칙들이 상반된 스타일을 가지고 있는 경우, 어떻게 표현이 될까?

  • 두 규칙은 모두 <h1>을 선택하는데 두 규칙이 지정하는 스타일이 서로 다름 
  • 이때에는 <h1>에 color: green; 이 적용되는데 이는 구체성과 연관이 있음

 

  • 구체성이란 선택자에 어떤 규칙이 우선으로 적용되어야 하는지에 대해 정해진 규칙을 일컬음
  • 선택자를 얼마나 명시적으로(구체적으로) 선언했느냐를 수치화한 것으로 구체성의 값이 클수록 우선 적용됨

  • 위와 같이 구체성은 4개의 숫자 값으로 이루어져 있음
  • 값을 비교할 때는 좌측에 있는 값부터 비교하며, 좌측 부분의 숫자가 클수록 높은 구체성을 가짐
  • 구체성의 계산 규칙
    • 0, 1, 0, 0 : 선택자에 있는 모든 id 속성값(#)
    • 0, 0, 1, 0 : 선택자에 있는 모든 class 속성값(.), 기타 속성, 가상 클래스(:)
    • 0, 0, 0, 1 : 선택자에 있는 모든 요소( ), 가상 요소(::)
    • 전체 선택자(*)는 0, 0, 0, 0을 가짐
    • 조합자는 구체성에 영향을 주지 않음(>, + 등)
    • 선택자의 구체성 값을 잘 알아야 많은 스타일 규칙들을 정의할 때 의도하지 않은 일이 생기지 않음

 

 

  • 인라인 스타일의 구체성
    • 인라인 스타일의 구체성 값은 1, 0, 0, 0으로 규칙들 중 가장 큰 구체성을 가짐
    • 아래 예시를 보면 같은 요소에 대해 두 가지 방식으로 규칙들을 선언하였음
    • 첫 번째는 0, 1, 0, 1의 구체성을 가지는 선택자로 스타일을 선언했고,
    • 두 번째는 요소에 직접 인라인 스타일 방식으로 스타일을 선언했으므로 1, 0, 0, 0의 구체성을 가짐
    • 결과적으로 <p> 요소에는 color: blue가 적용됨

 

 

  • important
    • important 키워드는 별도의 구체성 값은 없지만, 모든 구체성을 무시하고 우선권을 가짐
    • important 키워드는 속성값 뒤 한 칸 공백을 주고 느낌표 기호와 함께 씀
    • 아래 예시를 보면, 
    • important로 인해 <p> 요소에는 color: red가 적용됨

 

 

 

 

 

7) 상속

  • 상속되는 속성
    • CSS에서 상속은 우리가 기본적으로 알고 있는 부모가 가진 특성을 자식이 물려받는 개념과 같음
    • 어떤 스타일 규칙이 특정 요소뿐만 아니라 그 자손 요소까지 적용되는 것을 말함
    • 위 코드에서 <em>은 부모인 <h1>의 color: gray를 상속받음
    • 상속은 자연스로운 현상처럼 보이지만, 모든 속성이 다 상속되는 것은 아님
    • 아직 속성에 대해 다 배우지 않았으므로 간단히 margin, padding, background, border 등 박스 모델 속성들은 상속되지 않는다고 이해하면 됨
    • 이후 속성에 대해 배우면 상식적으로 이해됨

 

 

  • 상속되는 속성의 구체성
    • 아래 예시와 같은 코드에서 <em>에는 어떤 color가 적용될 것인가?
    • 전체 선택자의 구체성은 0, 0, 0, 0 이며 id 선택자의 구체성은 0, 1, 0, 1 임
    • 이 때, color: red가 <em>에 적용되는데 이는 상속된 속성이 아무런 구체성을 가지지 못하기 때문임

 

 

 

 

 

8) 캐스케이딩

  • cascading은 스타일 규칙들이 어떠한 기준으로 요소에 적용되는지를 정한 규칙임
  • cascading은 폭포가 내려오는 모양처럼 단계적인 이라는 의미를 지니며, 모든 스타일 규칙들은 cascading의 단계적인 규칙에 따라 요소에 적용됨
  • 앞서 공부한 구체성도 cascading 규칙 중 하나임
  • 만약 아래 예시처럼 구체성이 같은 두 규칙이 동일한 요소에 적용된다면 어떻게 될까?

  • <h1>에는 color: blue가 적용되며 이는 cascading 규칙에 의해 적용된 결과임

 

 

  • cascading 규칙
    1. 중요도(!important)와 출처
    2. 구체성
    3. 선언 순서

 

  • 위에서의 출처는 CSS 출처를 의미
  • CSS 출처는 제작자와 사용자, 그리고 사용자 에이전트의 경우로 구분함
    • 제작자: 사이트를 실제 제작하는 개발자가 작성한 CSS (대부분이 여기에 해당)
    • 사용자: 웹 페이지를 방문하는 일반 사용자들이 작성한 CSS (최근엔 대부분 지원안하는 추세)
    • 사용자 에이전트: 일반 사용자의 환경, 즉 브라우저에 내장된 CSS 
  • 중요도 & 출처의 우선 순위
    1. 사용자 !important 스타일
    2. 제작자 !important 스타일
    3. 제작자 스타일
    4. 사용자 스타일
    5. 사용자 에이전트 스타일

 

 

스타일이 적용되는 방식

  1. 스타일 규칙들을 모아서 중요도가 명시적으로 선언되었는지에 따라 분류함
    • 중요도가 명시적으로 선언된 규칙들은 그렇지 않은 규칙들보다 우선함
    • 중요도가 있는 규칙들끼리는 아래 다른 규칙들을 적용받음
  2. 스타일 규칙들을 출처에 따라 분류함
    • 제작자 스타일 규칙이 사용자 에이전트 스타일 규칙보다 우선함
  3. 스타일 규칙들을 구체성에 따라 분류함
    • 구체성이 높은 규칙들이 우선함
  4. 스타일 규칙들을 선언 순서에 따라 분류함
    • 뒤에 선언된 규칙일수록 우선함

 

  • 예시1)

  • 구체성에 따라 color: silver가 적용됨

 

  • 예시2)

  • 선언 순서에 따라 color: red가 적용됨

 

 

 

 

 

9) 선택자 정리

https://www.w3schools.com/cssref/css_selectors.asp

 

CSS Selectors Reference

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

 

 

 

'HTML&CSS' 카테고리의 다른 글

6. 폰트, 텍스트  (0) 2022.09.30
5. 단위, 배경, 박스모델  (0) 2022.09.30
3. 콘텐츠모델, 시멘틱마크업, 블록&인라인  (0) 2022.09.13
2. HTML 태그  (0) 2022.09.13
1. HTML 이해하기  (0) 2022.09.13

*네이버 부스트코스의 웹 ui개발 공부한 것 정리*

 

1) 콘텐츠 모델

  • HTML5에는 요소들이 가지고 있는 성격에 따라 요소의 종류를 정의하는 규칙이 있음
  • 요소는 이 규칙들을 준수해야 하며, 반드시 HTML 권고안을 따라야 함
  • 이런 규칙에 대해 비슷한 성격의 요소들끼리 그룹화한 것이 콘텐츠 모델이며, 각각의 요소들은 하나 또는 여러 개의 콘텐츠 모델에 속하게 됨

  • Contents Models의 7분류
    • Metadata Content: 콘텐츠의 style(표현), script(동작)을 설정하거나 다른 문서와의 관계 등의 정보를 포함하는 요소, 대부분이 <head>태그 내에 들어가는 요소들임
      더보기
      base,
 link, 
meta,
 noscript,
 script,
 style,
 title
    • Flow Content: 문서에 사용되는 대부분의 요소 
      더보기
      a, abbr, address,
map>area, article, aside,
audio, b, bdo, blockquote,
br, button,
      canvas, cite, code, datalist, del, details, dfn, div, dl, em, embed,
      fieldset, figure, footer, form, h1 ~ h6, header, hgroup, hr, i, iframe, img,
       input, ins, kbd, keygen, label, map, mark, math, menu, meter, nav, noscript, object, ol,
      output, p, pre, progress, q, ruby, samp, script, section, select, small, span, strong,
      style[scoped], sub, sup, svg, table, textarea, time, ul, var, video, wbr
    • Sectioning Content: 헤딩과 푸터의 범위를 결정하는 요소, 아웃라인이 있음 
      더보기
      article, aside, nav, section
    • Heading Content: 섹션의 헤더를 정의하는 요소 
      더보기
      h1, h2, h3, h4, h5, h6
    • Phrasing Content: 문서의 텍스트이며 문단 내부 레벨로 마크업하는 요소 
      더보기
      a, abbr, map>area, audio, b, bdo, br, button, canvas, cite, code, datalist, del, dfn, em, embed,
       i, iframe, img, input, ins, kbd, keygen, label, map, mark, math, meter, noscript, object, output,
       progress, q, ruby, samp, script, select, small, span, strong, sub, sup, svg, textarea, time,
      var, video, wbr
    • Embedded Content: 이미지, 비디오, 플래시 등 외부 콘텐츠를 문서내에 표현하는 요소      
      더보기
      audio,
 canvas,
 embed,
 iframe,
 img,
 math,
 object,
 svg,
 video
    • Interactive Content: 사용자와 상호작용을 하는 요소    
      더보기
      a, audio[controls], button, details, embed, iframe, img[usemap], input, keygen, label, menu,
      object[usemap], select, textarea, video[controls]

 

 

 

 

 

2) 시멘틱 마크업

  • 종종 POSH(Plain Old Semantic HTML)라고도 불리는데, 단어 그대로 평범하고 오래된 의미론적인 HTML이라는 뜻
  • 시멘틱이란 기계(컴퓨터, 브라우저)가 잘 이해할 수 있도록 하는 것을 의미
  • 프로그래밍 언어란 사람과 기계 사이의 정해진 약속이며 HTML 역시 마찬가지
  • 시멘틱 마크업은 적절한 HTML 요소를 올바르게 사용하는 것에서 시작함

  • 위 코드를 작성해서 화면을 보면 각각의 요소가 같은 모습으로 표현되나 의미는 같지 않음
    • <b>: 의미없이 단순히 텍스트를 굵게 표현 vs <strong>: 중요하다는 의미
    • <i>: 단순히 기울어진 글자를 표현 vs <em>: 글자의 특정 부분을 강조하는 의미
    • <u>: 글자에 밑줄이 그어짐 vs <ins>: 내용이 새롭게 추가되었음을 의미
    • <s>: 글자에 중간선이 그어짐 vs <del>: 내용이 삭제되었음을 의미

 

  • 의미에 맞는 태그, 요소를 사용하고 문서를 표현할 때 구조화를 잘 해주는 것이 시멘틱 마크업!

 

 

 

 

 

3) 블록&인라인

  • 블록 레벨 요소(Block level)
    • 한줄에 하나의 요소 표시
    • 양옆으로 다른 요소가 배치되지 않게 박스를 생성하므로 박스의 위아래로 줄 바꿈이 생기게 됨
    • 일반적인 모든 요소를 포함하며 div, h1~h6, p, ul, li, table 등 
    • 블록 레벨 요소는 인라인 레벨 요소의 자식 요소가 될 수 없음
    • 일반적인 모든 요소(블록, 인라인 레벨 등)를 자식 요소로 가질 수 있음
    • 단, h1~h6, p 요소는 블록 레벨 요소이지만 내부 요소로 Phrasing Content만 허용

 

  • 인라인 레벨 요소
    • 한 줄에 여러 개의 요소 표시
    • 하나의 라인 안에서 자신의 내용만큼의 박스를 만듬
    • 블록 레벨의 자식 요소이며 span, i, img, em, strong 등
    • 단, a는 인라인 레벨 요소이지만 자손으로 블록 레벨 요소를 가질 수 있음

 

 

 

 

 

 

 

'HTML&CSS' 카테고리의 다른 글

6. 폰트, 텍스트  (0) 2022.09.30
5. 단위, 배경, 박스모델  (0) 2022.09.30
4. CSS 이해하기  (0) 2022.09.15
2. HTML 태그  (0) 2022.09.13
1. HTML 이해하기  (0) 2022.09.13

*네이버 부스트코스의 웹 ui개발 공부한 것 정리*

 

1) HTML 태그 소개

  • 태그는 HTML을 이루고 있는 구성 요소로서 많은 종류의 태그들이 존재함
  • 종류가 다양한 만큼 의미에 맞는 태그를 사용하여 브라우저가 잘 이해할 수 있도록(시멘틱 마크업) 하는 것이 매우 중요함
  • HTML 버전이 업그레이드 되면서 태그가 새로 추가되기도 하고 삭제되기도 함
  • 현재 태그의 개수는 대략 130개 정도
  • 관련 통계 사이트를 보면, 실제로 대다수의 웹 페이지는 대략 25개 정도의 서로 다른 태그로 구성되어있음
  • https://www.advancedwebranking.com/html/#overview
 

HTML Study

Overview This HTML usage data comes from 11.3 million index pages gathered from top twenty Google results, for about 30 million keywords - chosen by keyword volume. To learn more about this data, visit the FAQ section. Total 11,264,652 pages Doctype The 

www.advancedwebranking.com

  • <html>, <head>, <body>, <title> 등 기본적으로 들어가는 태그까지 포함되어있기 때문에 주로 사용되는 태그는 이보다 적음
  • 주로 사용되는 태그를 잘 이해하고(외울 필요X), 그 외 사용빈도가 적은 태그는 필요할 때 찾아서 쓸 수 있도록 함 

 

 

 

2) 제목(HEADING)과 단락요소

  • 제목 태그(heading): 문서 내에 제목을 표현할 때 사용하는 태그, 태그 이름은 heading을 줄여서 h로 쓰며, 제목의 레벨에 따라서 <h1>~<h6>까지 있음, 보통 <h1>태그는 해당 페이지를 대표하는 큰 제목으로 주로 사용되며 숫자가 올라갈수록 조금 더 낮은 수준의 소제목을 나타냄, 현재의 웹 페이지들은 제목과 본문 식의 문서 형태보다는 주로 이미지나 그림처럼 시각적인 형태로 표현되고 있어서 제목 태그를 <h6>까지 쓰는 경우는 거의 없음, 제목 태그를 사용하면 일반 텍스트보다 더 강조되는 스타일이 적용되는데 이는 브라우저가 기본적으로 제목 태그에 제공하는 스타일임, 제목이라는 의미에 맞게 기본적으로 좀 더 굵고 크게 표현됨
  • 예시)  

  • 역사가 가장 큰 제목이므로 <h1>태그를 사용했고, 개발과 최초 규격에는 그보다 아래 단계인 <h2>태그를 사용했음
  • https://ko.wikipedia.org/wiki/HTML 참고
 

HTML - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 하이퍼 텍스트 마크업 언어(영어: Hyper Text Markup Language, HTML, 문화어: 초본문표식달기언어, 하이퍼본문표식달기언어)는 웹 페이지 표시를 위해 개발된 지배적인

ko.wikipedia.org

 

 

  • 단락 태그(paragraph): 본문에 해당하는 내용을 작성하는 태그, paragraph를 줄여서 <p>로 씀
  • 예시) 

  • 화면에 별다른 변화는 없지만 이전보다 훨씬 의미에 맞게 잘 짜인 마크업 구조를 이룸

 

 

  • 개행 태그(linebreak): linebreak를 줄여서 <br>로 씀 (글의 줄바꿈을 생성), <p>태그를 사용해서 단락으로 구분하면 자연스럽게 개행이 됨, 허나 <p>태그 내부에서 임의로 개행을 해야하는 상황도 있음, 이전에 배웠듯이 HTML은 두 칸이 상의 공백 및 개행을 무시하기 때문에 코드창에서 개행을 하더라도 화면에 나타나지 않음, 따라서 개행을 위해서 쓰이는 태그가 존재, <br>태그는 닫기 태그/내용이 존재하지 않는 빈 태그임, 개행하고자 하는 곳에 <br>태그를 선언하면 개행이 됨

 

 

 

3) 텍스트를 꾸며주는 요소(B, I, U, S)

  • 태그 중에는 텍스트를 표현해주는 태그가 있음, 이 태그들을 이용하여 의미를 부여하거나 특정 부분에 선 또는 스타일 등을 정의 할 수 있음
  • <b>: bold 태그, 글자를 굵게 표현하는 태그
  • <i>: italic 태그, 글자를 기울여서 표현하는 태그, 특정 이유(기술적인 용어, 외국어 문구, 소설속 인물의 생각 등)로 다른 글자와 구분하기 위해 사용됨
  • <u>: underline 태그, 글자에 밑줄을 표현하는 태그 
  • <s>: strike 태그, 글자에 중간선을 표현하는 태그
  • 예시) 

 

HTML elements reference - HTML: HyperText Markup Language | MDN

This page lists all the HTML elements, which are created using tags.

developer.mozilla.org

 

 

 

4) 앵커 요소

  • HTML에서 HT(Hyper Text)는 링크를 의미하는 것으로, 링크는 클릭하기만 하면 다른 페이지로 쉽게 이동가능하게 함
  • 예시)

  • 앵커 태그(anchor): <a>태그, 앵커, 링크 등으로 불림, 링크를 생성하는 태그, 다른 페이지로 이동하거나 현재 페이지 내에서 특정 위치로 초점을 이동시킬 수 있음, HTML의 가장 큰 특징이 되는 태그
  • href 속성: 링크를 만들기 위해 앵커 태그는 반드시 href 속성을 가지고 있어야 함, href 속성의 값은 링크의 목적지가 되는 URL임
  • target 속성: 링크된 리소스를 어디에 표시할지 나타내는 속성, 속성값으로는 _self (현재 화면에 표시한다는 의미, target 속성이 선언되지 않으면 기본적으로 self와 같이 동작함, default 값), _blank (새로운 창에 표시한다는 의미로 외부 페이지가 나타나게끔 하는 속성), _parent, _top 이 있음 (_parent, _top은 최근에 잘 쓰이지 않음)
  • 기타 속성: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attributes
 

<a>: The Anchor element - HTML: HyperText Markup Language | MDN

The <a> HTML element (or anchor element), with its href attribute, creates a hyperlink to web pages, files, email addresses, locations in the same page, or anything else a URL can address.

developer.mozilla.org

  • 내부 링크: 앵커 태그로 만들어진 링크가 꼭 외부 페이지로만 이동하는 것은 아님, 앵커 태그를 통해 페이지 내부의 특정 요소로 초점을 이동할 수 있는데 이를 내부 링크라 함, 내부 링크를 사용할 때는 href 속성값에 #을 쓰고 그 뒤에 페이지 내에서 이동하고자 하는 요소의 id 속성값을 적으면 됨, 보통 페이지에 내용이 많아 스크롤이 길어질 경우, 빠르게 화면 최상단으로 이동하고자 할 때 내부 링크를 주로 사용함, 웹 페이지에서 화면 하단에 있는 'top' 또는 '맨 위로 이동하기' 버튼이 이에 해당함
  • 예시) 

  • 웹 페이지에서 HTML 글씨가 링크형식으로 바뀌어서 표현됨, 이를 클릭하면 해당 웹 페이지의 <h1>요소로 이동함

 

 

 

5) 의미가 없는 컨테이너 요소(CONTAINER)

  • 웹이 발전하면서 현재 웹페이지들은 문서 형태보다는 시각적으로 정보를 표현하는 방향으로 변화됨
  • 최초의 HTML은 문서를 위한 언어였기 때문에, 대부분의 태그들이 문서에 적합한 의미를 가지고 있었으나 이러한 태그들로는 현재의 다양한 콘텐츠를 표현하기에 부족한 부분이 생김
  • 새로운 콘텐츠를 표현하기 위해 적합한 의미를 갖는 태그들이 생기고 있으나 다양한 콘텐츠를 표현하기에 적합한 태그가 없는 경우가 발생하기도 함  
  • 이러한 경우 주로 의미 없는 태그들을 사용하게 됨 (즉, 태그 자체에 아무 의미가 없으며 단순히 요소를 묶기 위해 태그를 사용하는 경우에 사용, 브라우저에서도 별다른 스타일이 적용되지 않음)
  • 주로 스타일을 주거나 서버에 보내는 데이터를 담기 위한 용도, 사용 빈도 매우 높음
  • <div>태그: 블록 레벨 태그, 기본적으로 한 줄을 생성해서 내용을 표현함
  • <span>태그: 인라인 레벨 태그, 블록 레벨 요소의 한 줄 안에서 표현되는 요소들임
  • 예시) 

  • 이전에 배운 <p>태그는 블록 레벨 태그이며, <b><i><u><s>는 모두 인라인 레벨 태그들 임

 

 

 

6) 리스트 요소(ul, ol, dl)

  • 콘텐츠가 많은 포털이나 검색 엔진같은 사이트에는 분야나 항목으로 구분할 것이 많으므로 리스트가 자주 사용됨
  • 예시) 

  • 예시) 

 

  • <ul> 태그: unordered list, 순서가 없는 리스트를 표현할 때 사용됨
  • 예시) 

 

  • <ol> 태그: ordered list, 순서가 있는 리스트를 표현할 때 사용됨
  • 예시) 

 

  • <dl> 태그: definition/description list, 용어와 그에 대한 정의를 표현할 때 사용됨, 용어와 설명이 하나의 세트로 항목을 이루고 하나 이상의 항목으로 리스트가 이루어지는 구조임 (<dt>태그: 용어(definition term), <dd>태그: 용어에 대한 설명(definition description))
  • 예시) 

 

  • 리스트의 중첩: <ul>/<ol>태그의 자식 태그로는 <li>태그만 올 수 있음, 하지만 <li>태그의 자식 태그에는 다른 태그들이 올 수 있음, 그렇기 때문에 리스트의 중첩이 가능함
    • 예시 문제: 
      더보기
      월드컵 조 편성
      A조
      러시아, 우루과이, 이집트, 사우디아라비아
      B조
      이란, 스페인, 포르투갈, 모로코
      C조
      프랑스, 덴마크, 호주, 페루
      D조
      크로아티아, 아르헨티나, 아이슬란드, 나이지리아

  • 코드: 

 

 

 

7) 이미지 요소

  • <img> 태그: 문서에 이미지를 삽입함
  • src 속성: <img> 태그의 필수 속성, 이미지의 경로를 나타냄
    • 상대경로: 현재 웹 페이지가 만들어지는 html 파일을 기준으로 상대적으로 이미지의 위치를 나타내는 경로 (위 코드는 상대경로임, ./는 현재 폴더를 나타냄, ../는 상위 폴더를 나타냄)
    • 절대경로: 실제 그 이미지가 위치한 곳의 전체 경로 

  • alt 속성: 이미지의 대체 텍스트를 나타내는 속성, 일반적으로는 화면에 노출되지 않음, 하지만 웹 접근성 측면에서 중요함(시각장애를 가진 사람들을 위해 사용되는 스크린 리더기와 같은 보조기기는 이미지 대신 대체 텍스트를 읽어줌, 웹 브라우저가 렉이 걸린 경우 이미지 파일 대신 엑박 표시가 뜨면 대체 텍스트가 노출됨), src 속성과 더불어 반드시 들어가야 한다고 생각하면 됨
  • width/height 속성: 이미지의 가로/세로 크기를 나타내는 속성, 픽셀 단위로 계산됨, 보통은 css로 조절하는데 이미지의 크기가 고정인 경우 html에서 선언해주면 성능적으로 좋음, width/height 속성이 없으면 이미지는 원본 크기대로 노출됨, 둘 중 하나만 선언하면 나머지 한 속성은 선언한 속성의 크기에 맞춰 자동으로 비율에 맞게 변환됨
  • 이미지 파일 형식
    • gif: 제한적인 색(256)을 사용하고 용량이 적음, 투명 이미지(배경 없음)와 애니메이션 이미지(움짤)를 지원
    • jpg: 사진이나 일반적인 그림에 쓰이며 높은 압축률과 자연스러운 색상 표현을 지원, 투명 지원X
    • png: 이미지 손실이 적으며 투명과 반투명을 모두 지원

 

 

 

8) 테이블 요소

  • <table> 태그: 데이터를 표로 나타내는 태그(표를 나타냄), 복잡한 데이터들을 기술할 때 표를 많이 사용함
  • <tr> 태그: table-row, 행을 나타내는 태그
  • <th> 태그: 제목 셀을 나타내는 태그
  • <td> 태그: 셀을 나타내는 태그
  • 기본적으로 행<tr>을 그리고 그 안에 각 셀<th><td>을 넣는다고 생각하면 됨, <table>태그는 하나 이상의 <tr>태그를 자식 태그로 가지고, <tr> 태그는 <th><td>태그를 자식 태그로 가지게 됨, 표를 구성할 때는 위에서 밑으로/ 좌측에서 우측으로 작성하면 됨 
  • 예시 문제: 
    더보기
    아래 표를 html 코드로 작성하시오.

  • 코드: 

  • 브라우저에서 제공하는 테이블의 기본 스타일에는 테두리가 없어서 어색해 보임
  • 아래 CSS 코드를 <head>안에 입력하면 테두리가 나타남

 

 

  • 테이블 구조 관련 태그
    • 표가 복잡해지면 표를 해석해서 음성으로 전달해야 하는 스크린 리더기와 같은 보조 기기를 통해서 표의 내용을 이해하는 것이 더욱 어려워짐, 따라서 표를 구조적으로 파악하기 위해 도움이 되는 태그를 사용해야 함
    • <caption> 태그: 표의 제목을 나타내는 태그
    • <thead> 태그: 제목 행을 그룹화하는 태그
    • <tfoot> 태그: 바닥 행을 그룹화하는 태그 (HTML 5.1~현재: <tbody> 뒤에 위치해야 함)
    • <tbody> 태그: 본문 행을 그룹화하는 태그
    • 예시 문제:  
    • 더보기
      아래 표를 html 코드로 작성하시오.

  • 코드: 

 

 

  • 테이블 관련 속성
    • colspan: 셀을 가로방향으로 병합
    • rowspan: 셀을 세로방향으로 병합
    • 예시 문제: 
      더보기
      아래 표를 html 코드로 작성하시오.

  • 코드: 

 

 

  • 예시 문제: 
    더보기
    아래 표를 html 코드로 작성하시오.

  • 코드: 

 

<table>: The Table element - HTML: HyperText Markup Language | MDN

The <table> HTML element represents tabular data — that is, information presented in a two-dimensional table comprised of rows and columns of cells containing data.

developer.mozilla.org

 

 

 

9) 폼 요소(FORM)

  • 웹 사이트에서 사용자의 입력을 요구하는 때도 있음, 예를 들어 사용자로부터 텍스트를 입력받거나 혹은 선택을 하게끔 하는 경우가 이에 해당됨
  • 폼요소란 서버에 데이터를 전달하기 위한 요소
  • 예시)  

  • <input> 태그: 대표적인 폼 요소, 내용이 없는 빈 요소이며 type 속성을 통해 여러 종류의 입력 양식으로 나타나게 됨
  • type="text": 주로 아이디, 주소, 전화번호 등 단순한 텍스트를 입력할 때 사용함, placeholder 속성이 존재함(사용자가 입력하기 전 미리 화면에 노출하는 값으로, 입력하는 값의 양식을 표현할 수 있음)
  • type="password": 비밀번호와 같이 공개할 수 없는 내용을 입력할 때 사용함, 화면에는 type="text"와 같게 나타나지만 실제로 입력할 때 값을 노출하지 않음, placeholder 속성을 가질 수 있음
  • type="radio": 라디오 버튼을 만들 때 사용, 중복 선택 불가능, name 속성으로 같은 성격의 라디오 버튼임을 인식, checked 속성을 통해 default로 해당 라디오 버튼이 눌려져있게 할 수 있음
  • type="checkbox": 체크 박스를 만들 때 사용, 중복 선택 가능, name 및 checked 속성 사용 가능
  • type="file": 파일을 서버에 올릴 때 사용
  • type="submit": form의 값을 전송하는 버튼, value 속성으로 이름을 바꿀 수 있음
  • type="reset": form의 값을 초기화하는 버튼, value 속성으로 이름을 바꿀 수 있음
  • type="button": 아무 기능이 없는 버튼, 개발자가 직접 커스텀해서 기능을 추가해주어야 함, , value 속성으로 이름을 바꿀 수 있음
  • type="image": 이미지를 삽입할 수 있는 버튼(submit과 동작이 동일함), src(이미지 주소)/alt(대체 텍스트) 속성이 반드시 필요, width/height 속성 적용가능
  • https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/button
 

<input type="button"> - HTML: HyperText Markup Language | MDN

<input> elements of type button are rendered as simple push buttons, which can be programmed to control custom functionality anywhere on a webpage as required when assigned an event handler function (typically for the click event).

developer.mozilla.org

 

 

  • 여러 가지 폼 요소들 - 1

  • <select> 태그: 선택 목록 상자 혹은 콤보박스, 몇 개의 선택지를 리스트 형태로 노출하고 그 중 하나를 선택할 수 있게 하는  태그, selected 속성이 이전에 checked 속성과 같은 역할을 함
  • <textarea> 태그: 한 줄만을 입력할 수 있는 <input type="text">와 달리 여러 줄의 텍스트를 입력할 때 사용함, 텍스트 상자의 크기를 조절하는 rows(세로), cols(가로) 속성이 있음
  • <button> 태그: 버튼을 만들 때 사용, submit|reset|button 3가지 타입이 있음, 이전에 배웠던 input 타입의 submit|reset|button와 동일한 기능을 가진 버튼임, 다만 빈태그가 아니고 내용을 직접 넣을 수 있으므로 좀 더 자유로운 스타일 표현이 가능

 

 

  • 여러 가지 폼 요소들 - 2
    • <label> 태그: form 요소의 이름과 form 요소를 명시적으로 연결시켜주기 위해 사용, 모든 form 요소에 사용가능, form 요소의 id 속성값과 <label>태그의 for 속성값을 같게 적어주어야 함, <label>태그 사용시 이를 클릭했을 경우 form 요소를 클릭한 것처럼 동작함, 스크린 리더기를 통해 듣게 되면 해당 form 요소에 접근시 <label>을 함께 읽어주므로 사용성 및 접근성적인 측면에서 중요함, 반드시 써주는 게 좋음  


    • <fieldset> 태그: form 요소를 구조화 하기 위해 필요한 태그, 여러 개의 폼 요소를 그룹화하여 구조적으로 만들기 위해 사용, 보통 form의 성격에 따라 구분함
    • <legend> 태그: form 요소를 구조화 하기 위해 필요한 태그, 폼 요소의 제목으로 <fieldset>태그 내부에 작성, <fieldset>의 자식 태그로 반드시 최상단에 위치해야 함


    • <form> 태그: form 요소들을 감싸는 태그로 데이터를 묶어서 실제 서버로 전송해주는 역할을 함, <fieldset>으로 구조화되어있다면 <fieldset>태그도 함께 감싸는 역할, action 속성은 데이터를 처리하기 위한 서버의 주소를 지정, method 속성은 데이터를 전송하는 방식(get: 데이터가 전송될 때 주소창에 파라미터 형태로 붙어 데이터가 노출되는 형식/post: 데이터가 전송될 때 데이터가 노출되지 않는 형식)을 지정

 

 

 

 

 

 

 

 

'HTML&CSS' 카테고리의 다른 글

6. 폰트, 텍스트  (0) 2022.09.30
5. 단위, 배경, 박스모델  (0) 2022.09.30
4. CSS 이해하기  (0) 2022.09.15
3. 콘텐츠모델, 시멘틱마크업, 블록&인라인  (0) 2022.09.13
1. HTML 이해하기  (0) 2022.09.13

*네이버 부스트코스의 웹 ui개발 공부한 것 정리*

 

1) HTML이란?

  • Hyper Text Markup Language의 준말로 웹페이지를 만들 때 사용 됨
  • Hyper Text (=링크, 단순한 텍스트를 넘어서 웹 페이지의 특정 부분과 연결할 수 있는 기능을 가진 텍스트를 의미)
  • Markup Language (=정보를 구조적, 계층적으로 표현가능한 언어를 의미)
  • 확장자가 html
  • (90년대 초반에 만들어 짐)

 

 

 

2) HTML 문법 - 태그(TAG)

  • '자음'과 '모음'이 모여서 하나의 단어를 만들고 문장을 만들어 내는 한글처럼, 태그도 각각의 태그들이 모여서 하나의 요소를 만들고 HTML 문서를 만들어 냄
  • HTML은 태그들의 집합이며, 태그는 HTML에서 가장 중요하고 기본이 되는 규칙임
  • '무언가를 표시하기 위한 꼬리표, 이름표'라는 의미가 있으며, HTML에서도 이와 비슷한 의미로 해석됨. 즉, 다양한 태그들을 이용해 코드를 작성하면, 브라우저가 이를 인식해 내용을 표현
  • 태그는 <,> 기호로 표현하며 <,> 기호 사이에 태그 이름이 들어감
  • 대부분의 태그는 시작 태그와 종료 태그로 이루어지며 종료 태그는 태그 이름 앞에 '/' 기호가 붙음
  • 예시)  <h1>Hello, HTML</h1>
  • 위 코드에서 h1은 태그 이름이며, Hello, HTML은 내용임 => 시작태그+내용+종료태그를 합쳐서 요소라고 부름
  • 즉 요소란? 내용을 포함한 태그 전체를 의미 (**태그와 요소를 혼동하지 않도록 주의)

 

 

 

3) HTML 문법 - 속성(ATTRIBUTE)

  • 속성은 태그의 동작을 좀 더 구체적으로 제어하기 위해 사용됨 (태그에 고유한 이름을 부여하거나 이동할 경로를 명시하는 등 태그에 구체적인 기능을 제공)
  • 태그에 추가로 정보를 제공하거나 태그의 동작이나 표현을 제어할 수 있는 설정값을 의미
  • 이름 = "(속성) 값" 으로 표현
  • 예시) <h1 id="title">Hello, HTML</h1>
  • 위 코드는 <h1> 태그에 id 속성을 추가해 title 값을 선언한 코드임
  • 의미와 용도에 따라 여러 속성이 존재하며 하나의 태그에 여러 속성을 사용할 수도 있음, 공백으로 구분
  • 예시) <h1 id="title" class="main">Hello, HTML</h1>
  • 위 코드는 <h1> 태그에 id와 class 2개의 속성을 선언한 코드임
  • 여러 속성을 동시에 사용할 때, 속성의 선언 순서는 태그에 영향을 미치지 않음
  • 속성의 종류: 모든 태그에 사용가능한 글로벌 속성, 특정 태그에서만 사용가능한 속성, 선택적으로 사용가능한 속성, 특정 태그에서는 반드시 사용해야하는 필수 속성 등 (id, class는 글로벌 속성) 

 

 

 

4) HTML 문법 - 태그 중첩(NESTING TAGS)

  • 태그 안에 또 다른 태그를 사용하는 것을 의미
  • 태그 중첩을 통해 부모 태그와 자식 태그의 관계가 형성됨 (태그를 중첩해서 사용 시 중첩되는 자식 태그는 부모 태그를 벗어나선 안됨)
  • 올바른 예시) <h1>Hello, <i>HTML</i></h1>
  • 잘못된 예시) <h1>Hello, <i>HTML</h1></i>
  • 태그 안에서 중첩이 얼마나 되는지 어떤 태그를 쓰는지는 문제가 되지 않음, 하지만 때에 따라 정해진 태그만 중첩 할 수 있기도 함.. (나중에 배움)

 

 

 

5) HTML 문법 - 빈 태그(EMPTY TAG)

  • 태그의 중첩이 불가능한 태그를 가리킴
  • 일반적으로 태그는 시작 태그와 종료 태그 2개가 1쌍을 이루고 그 사이에 내용이 들어감
  • 하지만 태그 중에는 그렇지 않은 태그도 존재함 (시작 태그만 존재하는 경우, 내용 역시 비어있음)
  • 예시) <br>, <img src="">, <input type="">
  • 빈 태그는 내용 부분만 비어있을 뿐 속성을 통해서 화면에 나타내거나 화면에 표시되지 않더라도 다른 용도로 사용되는 태그들 임
  • 빈 태그의 대표적인 경우는 브라우저가 직접 화면에 내용을 그려줘야 하는 경우임 (이미지나 비디오처럼 외부 리소스를 삽입하는 경우, 이런 태그를 브라우저가 내용을 대체한다고 하여 replacement 태그, 대체되는 태그라고 함)

 

 

 

6) HTML 문법 - 공백(SPACE)

  • HTML 공백은 일반 텍스트 공백과 차이가 있음
  • 기본적으로 HTML에서는 두 칸 이상의 공백을 모두 무시함
  • 예시)

<h1>Hello, HTML</h1>

<h1>Hello,     HTML</h1>

<h1>

    Hello,

    HTML

</h1>

  • HTML은 두 칸 이상의 공백과 개행을 모두 무시하기 때문에 위 세가지 텍스트가 모두 같게 화면에 나타나게 됨
  • 이러한 공백처리는 CSS로 제어해야 함

 

 

 

7) HTML 문법 - 주석(COMMENT TAGS)

  • 주석은 화면에 노출되지 않고 메모의 목적으로만 사용하는 것을 의미 (다른 언어의 주석과 동일)
  • <!-- 내용 --> 으로 표현
  • 예시)

<!-- 여기에 작성되는 내용들은 모두 주석 처리가 됩니다. -->

<!-- 주석은 여러 줄로 작성할 수도 있습니다.

<h1>Hello, HTML</h1>

위 <h1>태그는 브라우저가 해석하지 않습니다.

-->

  • vscode에서는 python과 동일하게 Ctrl+/ 사용하면 주석처리 가능

 

 

 

8) HTML 문법 - HTML 문서 구조(HTML DOCUMENTS)

  • HTML의 기본 구조는 웹 문서를 작성할 때 반드시 들어가야 하는 가장 기본적인 내용임
  • 문서 타입 정의(DOCTYPE): 이 문서가 어떤 버전으로 작성되었는지 브라우저에 알려주는 선언문이며 반드시 문서 내 최상단에 선언되어야 함, doctype을 선언하지 않거나 잘못 선언하면 브라우저는 해당 문서를 비표준 방식으로 해석하기 때문에 반드시 규칙에 맞게 선언해주어야 함
  • https://www.w3schools.com/tags/tag_doctype.asp
 

HTML doctype declaration

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

  • <html> 요소: 문서 타입 선언 후에는 <html>태그가 와야 하고, 자식으로는 <head> 태그와 <body>태그가 있음, <html>태그의 lang 속성은 문서가 어느 언어로 작성되었는지를 나타내 줌
  • <head> 요소: <head>태그에 위치하는 태그들은 브라우저 화면에 표시되지 않음, 대신 문서의 기본 정보 설정이나 외부 스타일 시트 파일 및 js 파일을 연결하는 등의 역할을 함, <meta> 태그의 charset 속성은 문자의 인코딩 방식을 지정함 (UTF-8은 가장 많이 사용되는 가변 길이 유니코드 인코딩 방식..), <title>태그에는 해당 페이지를 짧게 요약하여 내용으로 지정하면 됨 (해당 내용은 탭 바에 노출됨, 문서의 제목이라고 생각하면 됨)
  • <body> 요소: <body>태그에는 실제 브라우저 화면에 나타나는 내용이 들어가며, 앞으로 우리가 다루는 태그들 대부분이 모두 여기에 작성될 것임

 

 

 

 

 

'HTML&CSS' 카테고리의 다른 글

6. 폰트, 텍스트  (0) 2022.09.30
5. 단위, 배경, 박스모델  (0) 2022.09.30
4. CSS 이해하기  (0) 2022.09.15
3. 콘텐츠모델, 시멘틱마크업, 블록&인라인  (0) 2022.09.13
2. HTML 태그  (0) 2022.09.13

+ Recent posts