본문 바로가기

기초공부/WEB

[CSS]생활코딩 WEB2-CSS 정리

WEB2 CSS

2

웹페이지를 아름답게 만드는 방법

  1. 쉽지만 한계가 있는 방법 - font태그 등
  2. 어렵지만 근본적인 해결책 - CSS

 

1번 방법으로 어려운 이유

  1. font 태그는 웹페이지에서 대한 어떠한 정보도 없음 → 웹페이지가 정보로써의 가치가 떨어짐
  2. 웹페이지가 많을 경우에도 디자인 일괄처리가 어려움

 

3

웹브라우저는 기본적으로 HTML이라고 생각함 → HTML로 CSS코드로 읽어야 한다고 설명해야 함
<style>→ : HTML 문법, 태그안의 문장을 CSS문법에 맞게 처리함
ex) a { color : red; }

CSS를 사용하기 위해서는 사용자는 새로운 문법을 배워야 하며, 웹브라우저는 CSS를 해석하는 기능을 탑재해야함
→ 그럼에도 불구하고 CSS를 사용하는 이유

  1. 일괄처리가 쉬워짐
  2. 중복을 제거하면 웹페이지 규모 줄일 수 있음
  3. HTML 태그를 사용하면 수정할 때 작성자 의도와 다르게 바꾸면 안 될 것을, CSS를 사용하면 바꿀 수 있음
  4. 정보와 디자인의 구분이 명확하므로 웹이 정보를 처리하기가 쉬워짐

즉, 웹페이지 유지, 보수가 쉬워지고 가독성이 높아진다는 장점이 있음

4

CSS효과를 주는 법

  1. HTML, style 속성 : 태그의 style속성의 값을 웹브라우저가 css문법으로 해석하고 해당 태그에게 효과 적용
  2. 선택자selector : 웹페이지 안에 모든 해당 태그를 선택한다
    - 선언declaration : 선택자가 지정한 태그들에 줄 효과를 지정하는 부분.
    속성property : 값property value으로 구성됨
  <!--방법1-->
  <body>
    <h3 style:"color:red;">
      [h3의 내용](style 태그에 의해 텍스트의 색상이 붉은 색으로 변경되었다)
    </h3>
  </body>
  <!--방법2-->
  <head>
    <style>
      a {  /*선택자 : a */
        font-size:20px; /*선언, 속성:font-size, 값:20px으로 이루어짐*/
      }
    </style>    
  </head> 

+) ;은 구분자

5

CSS에 대해 배울 것을 크게 두 가지로 나누어 배운다

  1. 어떤 효과가 존재하는지(declaration의 property)
  2. 그 효과를 정확하게 선택하여 지정하기 (selector)

6

(5의 효과에 대하여 배움)
property 검색 방법 : CSS (원하는 것) property

7

selector

특정 태그들에 효과를 주고 싶을 때는, html 태그에 class라는 property를 주고 그 class를 selector로 사용한다.
class 특징

  • class의 value는 여러 개가 올 수 있고 띄어쓰기로 구분 가능하다
  • → 하나의 태그에 공동으로 여러 효과를 지정할 수 있음(밑의 예시 참고)
     → 이 경우에 둘 이상의 태그에 같은 효과를 줄 때 뒤에 있는 효과만을 적용하기 때문에 좋지 않은 방법
       → 따라서 우선하여 주고 싶은 효과가 있을 경우, id selector를 사용하자
  • id selector가 class selector보다 우선순위가 높기 때문)

한 태그에 여러 효과를 주는 예제

  <head>
    <style>
      cl {
        font-size:20px;
      }
      c2 {
        color:red;
      }
    </style>
  </head>
  <body>
    <div class="c1 c2"> <!--하나의 태그에 공동으로 여러 효과를 지정할 수 있다-->
      [div의 내용]
    </div>    
  </body>

왜 id > class > tag 우선순위일까?

  • id는 웹페이지 당 한 번만 사용할 수 있는 중복되지 않는 것 : 구체적
  • tag : 포괄적
  • tag를 이용하여 전체적으로 디자인하고 예외적인 것만 id를 사용하여 디자인하는 것이 효율적이기 때문이다

우선순위가 같을 때 예제

<head>
  <style>
    h3 {
      color:red;
    }
    h3 {
      color:blue;
    }
  </style>
</head>
<body>
  <h3>h3 내용</h3>
</body>

결과

결과 예제


우선순위가 다를 때 예제

  <head>
    <style>
    #i {
      color:pink;
    }
    .c {
      color:blue;
    }
      h3 {
        color:red;
      }
    </style>
  </head>
  <body>
    <h3 class="c" id="i">h3 내용</h3>
  </body>

결과

결과 예제

정리 : 우선순위가 다르다면 우선순위에 따라 속성이 적용되지만, 같은 우선순위일 때는 뒤에 있을 수록 우선순위가 높다.

8

밑의 예제를 보면 h1 태그는 해당 줄을 전체 사용하고, a 태그는 똑같은 태그 임에도 불구하고 줄바꿈이 되지 않고 다른 내용들과 같은 줄에 위치한다

  <head>
    <style>
    h3 {
      border : solid 5px pink;
    }
    a {
      border : solid 5px deepskyblue;
    }
    </style>
  </head>
  <body>
    <h3>h3</h3>
    <a>a</a>
  </body>

결과

결과 예제

어째서 태그에 따라 줄바꿈 여부가 바뀔까?
→ HTML에 있는 여러 태그들은 그 태그의 성격과 일반적인 쓰임에 따라서 화면 전체를 쓰는 것이 편할수도, 자기 크기 만큼의 부피를 갖는 것이 편할수도 있기 때문이다

    1. 화면 전체를 쓰는 태그 : block level element(element = tag)
    2. 자기 자신의 부피만큼 크기를 갖는 태그 : inline element
      - CSS의 display property을 이용하여 이 설정을 변경할 수 있다
      (display property value를 none으로 하면 보이지 않음)

다른 선택자, 같은 property일 때 중복 제거 방법 : ,를 사용하면 줄일 수 있음

<style>
  h3, a{
  color : red;
</style>


같은 property category 다른 property 일 때 중복 제거 방법

<style>
  border-width : 5px;
  border-style : solid;
  border-color : red;
</style>
<style>
  border : 5px solid red;
</style>



박스모델 이해


  • 테두리와 내용 사이의 간격 : padding
  • 테두리들 사이의 간격 : margin
  • display 속성(block level element, inline)의 특징을 변경하는 것은 width를 이용하여 태그의 가로 길이를 변경하는 것이다.

웹페이지에서 css 적용범위을 알아보고 싶다 : 우클릭 → 검사(또는 F12)

HTML 태그 하나하나를 박스로 취급하여 그것의 부피감 결정하는 것은 디자인의 핵심적인 요소이다

9

실제로 예시대로 만들어보았다
여백 문제가 발생하였을 때, 제일 먼저 해야할 것은 문제에 가까이 다가가는 것이다
우클릭 → 검사로 문제의 원인을 발견하고 그것을 수정해야 한다

10

레이아웃을 잘 짜는 방법 - grid
div(block level element), span(inline element) : 디자인을 위하여 존재하는 의미가 없는 태그

grid 사용법

예시(나중에 관련 예시 추가하기)

예제

caniuse.com : 해당 기술을 사용할 수 있는 웹브라우저 안내

11

id가 정해진 태그 안에 존재하는 특정 태그만을 선택하여 효과를 적용할 수 있다
ex) #grid ol{} → grid라는 id안에 존재하는 ol 태그를 선택

12

웹은 모든 시스템에서 동작하는 정보 시스템 → 수많은 화면에서 동작해야함 → 화면별 페이지를 만들어야 했음
→ 반응형 디자인 탄생 : 화면 크기에 따라서 웹페이지의 각 요소들이 반응하여 동작
→ 반응형 디자인을 CSS에서 구현하는 핵심적인 기능 : mediaquery

화면의 크기가 800px 이하일 때 display가 none인 예시(나중에 관련 예시 추기하기)

예제

14

style 태그를 .css 파일로 변경하고 style 태그 위치에 link 태그를 이용하여 .css 파일이 적용되도록 하기
이 방식의 장점

  1. 웹페이지 디자인을 일괄적으로 수정 가능
  2. 재사용성 : 각 웹페이지 별로 style이 적용되었을 때 웹페이지 별로 적용된 style이 같은 것인지 다른 것인지 파악이 쉬움 → 시각적인 기능성이 높아짐 → 내부 구현 코드를 몰라도 사용 가능 → 재사용성이 높아짐
  3. 경제적인 이득 : 코드 양이 줄었기 때문에 웹페이지 사용료를 줄일 수 있음
    • 우클릭 → 검사 → network에서 확인 관련 내용 확인 가능
    • 웹페이지 안에 css 코드를 삽입하는 것이 네트워크 트래픽을 적게 사용
      → 캐시cashe 방식 사용 : 한 번 .css 파일을 다운 받았다면 그 파일이 수정되기 전까지 웹브라우저는 우리의 컴퓨터에 저장하였다가 파일을 요청하면 저장된 결과를 가져와서 속도를 높이고(네트워크를 사용하지 않기 때문) 돈을 절약할 수 있음

15

많이 사용해보자!

만들어보았다 - 오박사

원본

코드 작성

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>잠깐!</title>
    <style>
      body {
        text-align: center; font-size: 4.5em; font-family: "koverwatch";
      }
      #poket{
        display:grid;
        grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
        border-top: dashed 5px;
      }
      #poster {
        display: grid;
        grid-template-rows: 1fr 1fr 1fr;
      }
      div, #oh {
        display: block;
        margin:auto;
      }
      img {
        padding: 2em 2em 0em 0em;
      }
    </style>
  </head>
  <body>
    <div id="poster">
      <img src="오박사.jpg" alt="오박사" width="500em;" id="oh">
      <div>
        오늘은 바깥이 너무 덥구나!<br/>
        모두 시원한 녀석들이니 하나를 데려가렴
      </div>
      <div id="poket">
        <img src="꼬부기.png" alt="꼬부기" width="500em;">
        <img src="라프라스.jpg" alt="라프라스" width="500em;">
        <img src="갸라도스.png" alt="갸라도스" width="500em;">
        <img src="리아코.jpg" alt="리아코" width="500em;">
        <img src="물짱이.png" alt="물짱이" width="500em;">
        <img src="팽도리.jpg" alt="팽도리" width="500em;">
      </div>
    </div>
  </body>
</html>

결과

결과

예전에 봤던 포스터가 생각이 나서 오늘 배운 것을 응용한 포스터를 만들기로 하였다. 목표는 화면 크기에 따라 변하는 포스터! 그래서 다음과 같이 구현하였다.

  1. body selector : 폰트 정렬, 크기, 글꼴을 디자인하였다.
  2. poket selector : 지금보니 pocket인데 오타났네... grid를 이용하여 밑에 포켓몬을 같은 비율로 정렬하고자 하였다. 위에는 점선을 추가하여 전에 보았던 포스터와 비슷한 모양으로 만들었다
  3. poster selector : grid를 이용하여 오박사/대사/포켓몬사진을 같은 비율로 정렬고자 하였다.
  4. div, oh selector : margin property를 auto로 하면 가운데 정렬이 가능하다. 어째서인지는 아직 의문
  5. img selector : 위, 오른쪽에 여백을 주었다
  6. div id = "poster" : 전체적으로 오박사/대사/포켓몬사진을 같은 비율로 정렬하고자 감싼 태그
  7. div id = "poket" : 포켓몬사진을 같은 비율로 정렬하고 감싼 태그
  8. 후기
    처음에 포켓몬 사진의 크기를 지정하지 않고 실행하였을 경우 grid를 적용하면 각 사진의 원래 크기가 적용되었다. 내가 원하는 것은 같은 가로 길이를 가지는 것이어서 width를 500em으로 주었더니 반응형 디자인을 만들 수 없었다. 반응형 디자인 부분은 아직 자세히 공부하지 않았기 때문에 배운 후에 다시 시도하기로 하였다.