▶생활코딩 WEB2 CSS - 10. 그리드 소개

매우우우우우 중요! 헷갈려서 정리할 겸 기록해 둠.

대체 화면 분할은 어떻게 하고, 선는 또 어떻게 넣는 건지 궁금했는데

css 역할이 이리 중할 줄이야....

 

일단 css가 활약할 수 있는 토대를 마련하려면

먼저 html에서 레이아웃을 나눠야 하는데, 이를 위해서는 각각의 영역 설정이 중요하다.

 

해서 영역을 설정하기 위한 <div>, <span>태그들과 

설정시킨 영역에 속성값을 부여시키기 위한 id, class 등의 속성의 역할이 크다.

그러니까 html에서 <div>, <span>태그를 통해 영역을 구분하고 → 이를 css에서 활용함!

 

html의 태그들이지만 css로 분류해 정리하는 이유는,

<div>, <span> 모두 자체만으로는 큰 영향력이 없고, css와 결합했을 때 존재 의의가 극대화되기 때문.

 

▶id, class속성 참조

 

[css] id, class속성

html의 class속성 ≠ 자바스크립트의 class 보면 사용되는 곳이 엄밀히 다른데, 명칭이 같아 헷갈리는 것들이 있다. 말 나온김에 몇 가지 정리해보자면, (html의) 태그 · anchor의 약자 · 링크 역할 (css

vvvictory2.tistory.com

 

<div>, <span>태그

 

▶영역 분할하기

<div>태그 <div></div> · block eliment이기 때문에, 기본적으로 화면 전체를 사용함
<span>태그 <span></span> · inline eliment이기 때문에, 기본적으로 화면의 일부분만을 사용함

html에서, 

전체적인 틀을 나누는데는 <div>태그를 이용하고,

텍스트의 일부만을 지정하는 등 부분을 선정해 꾸미고자 할 때는 <span>태그를 이용한다.

 

▶참고로

<div>, <span>태그 자체가 박스 영역을 얼마나 차지하는지 보여주자면...

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Greed</title>

  <style>
    div {
      border:5px solid gray;
    }  
    span {
      border:5px solid red;
    }
  </style>

</head>
<body>

  <div>HONG</div> 
  <div>GILDONG</div>
  
  <span>HONG</span> 
  <span>GILDONG</span>

</body>
</html>

 

예시

 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>그리드01</title>

  <Style>
    #grid1 {
      display: grid;
      grid-template-columns: 150px 1fr;
    }
    #grid1 #grid2 {
      padding-left: 35px;
    }
    body {
      margin:0;
    }
    a {
      color: black;
      text-decoration: none;
    }
    h1 {
      font-size: 100px;
      text-align: center;
      border-bottom: 5px solid  gray;
      margin:0;
      padding:20px;
    }
    #grid1 ol {
      border-right: 3px solid gray;
      width:100px;
      margin:0;
      padding:20px;
      padding-left: 40px;
    }  
  </Style>

</head>
<body>
  
  <h1><a href="index.html">WEB</a></h1>
 
  <div id="grid1">
    <ol>
      <li><a href="1.html">HTML</a></li>
      <li><a href="2.html">CSS</a></li>
      <li><a href="3.html">JavaScript</a></li>
    </ol>
    <div id="grid2">
      <h2>CSS</h2>
        <P>
          CSS is the language we use to style an HTML document. CSS describes how HTML elements should be displayed. This tutorial will teach you CSS from basic to advanced. CSS is the language we use to style an HTML document. CSS describes how HTML elements should be displayed. This tutorial will teach you CSS from basic to advanced.
        </P>
    </div>
   </div> 

</body>
</html>

 

여기서 포인트는

<div>로 분할시킨(묶은) 영 id를 이용해 속성값을 부여시킴.

<div id="grid1"></div>
<div id="grid2"></div>

  <div id="grid1">
    <ol>
      <li><a href="1.html">HTML</a></li>
      <li><a href="2.html">CSS</a></li>
      <li><a href="3.html">JavaScript</a></li>
    </ol>
    <div id="grid2">
      <h2>CSS</h2>
        <P>
          CSS is the language we use to style an HTML document. CSS describes how HTML elements should be displayed. This tutorial will teach you CSS from basic to advanced. CSS is the language we use to style an HTML document. CSS describes how HTML elements should be displayed. This tutorial will teach you CSS from basic to advanced.
        </P>
    </div>
   </div>

 

이후, css(html의 <style>태그 내)에서 id 속성값을 불러와 해당 영역을 꾸몄다.

    #grid1 {
      display: grid;
      grid-template-columns: 150px 1fr;
    }
    #grid1 #grid2 {
      padding-left: 35px;
    }
    #grid1 ol {
      border-right: 3px solid gray;
      width:100px;
      margin:0;
      padding:20px;
      padding-left: 40px;
    }

 

▶여기서,

    #grid1 {
      display: grid;
      grid-template-columns: 150px 1fr;
    }

150px 1fr;이 뭔고 하면...

fr은 화면비율을 의미함. 예를 들어,
150px 1fr 150px와 나머지화면
1fr 1fr 화면비율 1:1
2fr 1fr 화면비율 2:1

 

▶요 부분의 경우,

    #grid1 #grid2 {
      padding-left: 35px;
    }

#grid1 #grid2의 경우,

(#grid1의 휘하에 있는) #grid2 요걸 의미한다.

 

▶여기서의

    #grid1 ol {
      border-right: 3px solid gray;
      width:100px;
      margin:0;
      padding:20px;
      padding-left: 40px;
    }

#grid1 ol은,

(#grid1의 휘하에 있는) ol 요걸 의미함.

 

어디 밑에 있는 누구라고 명확하게 명시해 주는 편이 좋다.

만약 구분하지 않고 그냥 ol 요것만 적는다면, 

컴퓨터는 ol전체를 지정한 것으로 인식한다.

만약 코드가 길어질 경우 수정할 생각을 하면 끔찍함. 혼선을 피하기 위해 명확하게 구분 해두자.

'1-2 css' 카테고리의 다른 글

[css] 의사 클래스(가상 클래스, pseudo-class)  (0) 2021.08.06
[css] 폰트  (0) 2021.07.11
[css] Block level element, Inline element_박스 기본 영역  (0) 2021.07.08
[css] id, class속성  (0) 2021.07.07
[css] 속성 간략하게 쓰기  (0) 2021.07.05


 

html의 class속성 ≠ 자바스크립트의 class

보면 사용되는 곳이 엄밀히 다른데, 명칭이 같아 헷갈리는 것들이 있다.

 

말 나온김에 몇 가지 정리해보자면,

(html의)
<a>태그
· anchor의 약자
· 링크 역할
(css의)
a
· all의 약자
· 전부를 의미
· 태그 아님!
<style>태그 · html내에서 태그로써 쓰임
· 예시 <Style>a {color: green;}</Style>
style속성 · 예시 <a href="2.html" style="color:red">CSS</a>

만약... 틀렸다면 추후 수정하는 것으로. 지식을 좀 더 쌓은 후에....

아무튼 class속성을 처음 접했을 땐, 자바스크립트의 class가 생각났음.

 

id, class속성 모두 html에서 먼저 지정시켜야 하는, html의 속성임에도,

css에서 정리하는 이유는 css에서야 두 속성이 빛을 발하기... 때문임. 

 

id, class속성

 

id속성

html에서 지정시킬 때 id="속성값"
css(혹은 html의 <style>태그 내)에서 불러올 때 #속성값 {}

 

class속성

html에서 지정시킬 때  class="속성값"
css(혹은 html의 <style>태그 내)에서 불러올 때 .속성값 {}

 

▶정리해서 비교하면,

· html에서 지정시킨 속성값 css에서 가져오는 법

id="속성값" #속성값 {}
class="속성값" .속성값 {}

· id, class를 각자 어느 상황에서 쓰냐면,

id · id 하나 당, 하나의 정체성만을 가짐 (고유값)
· 태그 하나 당 id속성 하나를 사용한다. 이미 한 번 적용시킨 id는 다른 태그에 또 사용할 수 없음. 
· 단, id에 부여시킨 속성값이 제각기 다르다면 하나의 태그에 여러 id가 올 수 있다.
중요한 건, 같은 속성값을 가진 id를 다른 태그에 중복해 사용할 수 없다는 것!
class · 하나의 class를 여러 곳에 쓸 수 있음 (그룹화)
· 여러 태그에 class속성을 중복해 사용할 수 있다.

 

선택자 우선순위: id > class > 태그선택자

· 태그선택자 예시: a, h1 등

· 같은 유형의 선택자일 경우, 

css에서 가장 마지막에 있는(가장 밑에 위치한) 선택자 일수록 → 우선순위가 높음

 

▶예시1

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>속성01</title>

  <Style>
    a {
      color: black;
      text-decoration: none;
    }
    h1 {
      font-size: 100px;
      text-align: center;
    }
    .test {
      color: red;
    }
  </Style>

</head>
<body>

  <h1><a href="index.html">NAME</a></h1>
  <ol>
    <li><a href="1.html" class="test">HONG</a></li>
    <li><a href="2.html" class="test">GIL</a></li>
    <li><a href="3.html">DONG</a></li>
  </ol>
  
</body>
</html>

 

▶예시2

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>속성02</title>

  <Style>
    a {
      color: black;
      text-decoration: none;
    }
    h1 {
      font-size: 100px;
      text-align: center;
    }
    .test {
      color: gray;
    }
    #test2 {
      color: red
    }
    #test3 {
      color:cornflowerblue
    }
  </Style>

</head>
<body>
  
  <h1><a href="index.html">NAME</a></h1>
  <ol>
    <li><a href="1.html" class="test">HONG</a></li>
    <li><a href="2.html" class="test" id="test2">GIL</a></li>
    <li><a href="3.html" id="test3">DONG</a></li>
  </ol>

</body>
</html>

 

+) html 내부 링크

 

WOW... 깜짝 놀랐다.

id 속성값(#속성값)을 불러올 수 있는 곳이 css 뿐 만 아니라, html 내(<body>태그 내)에서도 사용 가능함.

예를 들어 <a>태그와 결합해 <body>태그 내에서 사용할 경우,

링크를 타고 html 내에서 이동하는(본문에서 본문으로 이동하는) 내부 링크가 가능하게 된다.

 


html, css, javasacript

기념일 계산기

 

▶자바스크립트의 날짜, 시간 입력

YYYY 연도 (4자리)
MM 월 (2자리)
DD 일 (2자리)
HH  (2자리)
MM  (2자리)
SS  (2자리)
ISO형식(YYYY-MM-DDTHH:MM:SS)  
긴 날짜 형식(MMM DD YYYY) · 월, 일, 연도 순
· 월은 숫자가 아닌, 영문으로 작성해야 함(January, Jan과 같은)
짧은 날짜 형식(MM/DD/YYYY) · 월, 일, 연도 순

 

▶자바스크립트 시간 단위

1밀리초 = 1/1,000초
1초 = 1,000밀리초
1분 = 60초 (= 1,000 * 60 = 60,000밀리초)
1시간 = 60분 (= 1,000 * 60 * 60 = 3,600,000밀리초)
1일 = 24시간 (= 1,000 * 60 * 60 * 24 = 86,400,000밀리초)

 

▶getTime() 함수가 바로 시, 분, 초 단위로 나오지 않고

밀리초로 나오기 때문에 

밀리초를 통해  다른 단위로 변환시켜야 한다. (위 '자바스크립트 시간 단위' 참조)

 

▶javascript/ date객체

console창에 new Date()를 입력하면

바로 지금 나우 이 순간의 날짜와 시간이 결과로 나타난다.

 

Date객체의 인스턴스를 now변수에 저장함

저장시킨 이후에는(이 말인 즉, var now = new Date를 적은 이후)

now객체는 Date객체의 속성과 함수를 사용할 수 있다.

두번째 줄의 now는 이를 이용해 오늘 날짜와 시간을 결과로 소환한 것.

 

▶javascript/ 자바스크립트의

document.querySelector('#accent').innerText = passedDay + "일"; 

요 부분을 통해 '얼마나'가 '182일'로 변환된다.

브라우저 창에서 확인하면,

요 부분이 없을 때는 '얼마나' 요 부분을 넣으면 '182일' 

 

▶javascript/ 번거로운 계산

var future = toFirst + 100 * (100*60*60*24);
var someday = new Date(future);
var year = someday.getFullYear();
var month = someday.getMonth();
var date = someday.getDate();
Document.querySelector("#date100").innerText = year + " 년 " + month + " 월 " + date + " 일 ";

var future = toFirst + 365 * (100*60*60*24);
var someday = new Date(future);
var year = someday.getFullYear();
var month = someday.getMonth();
var date = someday.getDate();
Document.querySelector("#date365").innerText = year + " 년 " + month + " 월 " + date + " 일 ";
future = toFirst + 100 * (100*60*60*24);
someday = new Date(future);
year = someday.getFullYear();
month = someday.getMonth();
date = someday.getDate();
Document.querySelector("#date100").innerText = year + " 년 " + month + " 월 " + date + " 일 ";

future = toFirst + 365 * (100*60*60*24);
someday = new Date(future);
year = someday.getFullYear();
month = someday.getMonth();
date = someday.getDate();
Document.querySelector("#date365").innerText = year + " 년 " + month + " 월 " + date + " 일 ";

위의 두 방식대로 하면

100일 기념일, 365일 기념일... 등등 기념일 마다 매번 계산식을 작성해야 함

 

▶javascript/ 이 때 calcDate()함수를 이용하면,

function calcDate(days) {
  var future = toFirst + days * (100*60*60*24);
  var someday = new Date(future);
  var year = someday.getFullYear();
  var month = someday.getMonth();
  var date = someday.getDate();
  Document.querySelector("#date" + days).innerText = year + " 년 " + month + " 월 " + date + " 일 ";
}

calcDate(100); //100일 기념일
calcDate(365); //365일 기념일
calcDate(500); //500일 기념일
calcDate(1000); //1000일 기념일

function calcDate(days) {} 함수선언을 통해

일일이 계산할 필요가 없어진다.

 

javascript/ 아래의 함수호출 부분은

calcDate(100); //100일 기념일
calcDate(365); //365일 기념일
calcDate(500); //500일 기념일
calcDate(1000); //1000일 기념일

function calcDate(days) {} 함수의 앞, 뒤 어느 부분에 넣어도 상관 없음.

 

결과

 

▶html

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>aniversary calclulator</title>
  <link href="anniversary-calculator.css" rel="stylesheet">
</head>
<body>

  <div class="container">

    <div class="day1">
      <h5>처음 만난 날로부터</h5>
      <p id="accent" class="accent">
        <span style="font-size:0.9em; font-style:italic">얼마나...</span>
      </p>
    </div>

    <div class="bar">만난 지</div>

    <div class="day2">
      <ul>
        <li class="item-title">100일</li>         
        <li class="item-date" id="date100"></li>
      </ul>
      <ul>
        <li class="item-title">365일</li>
        <li class="item-date" id="date365"></li>
      </ul>     
      <ul>
          <li class="item-title">500일</li>
          <li class="item-date" id="date500"></li>
        </ul>      
      <ul>
        <li class="item-title">1000일</li>
        <li class="item-date" id="date1000"></li>
      </ul>      									     
      </div>
      
  </div>
  
  <script src="anniversary-calculator.js"></script>
    
</body>
</html>

 

▶css

* {
  box-sizing: border-box;
}
.container{
  width:500px;
  margin:0 auto;
  border:10px solid rgb(253, 208, 111);
  border-radius:2%;
  box-shadow:2px 2px 2px rgb(97, 97, 97, 0.5);
}
.day1 {
  padding-top:40px;
  text-align:center;  
  font-family: '배달의민족 한나';
  font-size:1em;
}
.day1 h5 {
  font-size:0.8em;
  color:rgb(145, 145, 145);
}
.accent {
  margin-left:10px;
  margin-right:10px;
  margin-top:10px;
  font-family: '배달의민족 주아';
  font-weight: normal;
  font-size:4em;
  color:rgb(20, 124, 98);
}
.bar {
  width:100%;
  margin:60px auto 0 auto;
  padding-left:80px;
  height:50px;	
  background:rgb(20, 124, 98);
  font-family: '배달의민족 한나';
  font-size:1em;
  color:#fff;
  line-height:55px;
}
.day2 {
  font-family: '배달의민족 주아';
  font-size:1em;
  letter-spacing:-1.2pt;
  width:420px; 
  margin:20px auto 20px auto;
}
.day2 ul {
  list-style: none;
  border-bottom:1px dashed #ccc;
  height:70px;
}
.day2 ul:last-child {
  border-bottom:none;
}
.item-title {
  float:left;
  width:160px;        
  font-weight:bold;
  font-size:1.5em;
  line-height:60px;
}
.item-date {
  float:left;
  margin-left:60px;
  font-size:1.2em;
  color:#222;
  text-align:right;
  line-height:60px;
}

 

▶javascript

var now = new Date();
var firstDay = new Date("2020-12-25")

var toNow = now.getTime();
var toFirst = firstDay.getTime();
var passedTime = toNow - toFirst;

var passedDay = Math.round(passedTime/(1000*60*60*24));

document.querySelector('#accent').innerText = passedDay + "일";  

function calcDate(days) {
  var future = toFirst + days * (1000*60*60*24);
  var someday = new Date(future);
  var year = someday.getFullYear();
  var month = someday.getMonth();
  var date = someday.getDate();
  document.querySelector("#date" + days).innerText = year + " 년 " + month + " 월 " + date + " 일 ";
}

calcDate(100); //100일 기념일
calcDate(365); //365일 기념일
calcDate(500); //500일 기념일
calcDate(1000); //1000일 기념일

 

document.querySelector 에서 

document의 소문자d를 대문자D로 쓴 줄도 모르고 화면에 아무 것도 안 떠서 몇 시간이나 헤맸다.

예상치 못한 실수였는데, 

그렇다고 설마 저거 하나 때문에 브라우저에 결과값이 보이지 않을 거라고는 생각지도 못했다.


 

▶<a>태그

· anchor의 약자

· 하이퍼링크(hyperlink)를 만드는 태그

 

▶<a>태그 + href속성

<a href="링크시킬주소">텍스트</a>

<a href="링크시킬주소"><img src="이미지파일경로"></a>

 

▶<a>태그 내에서 사용 가능한 속성

속성 속성값
href · 링크시킬 문서, 사이트 주소 입력
type · 링크시킨 문서의 파일 유형을 알려줌
target · 링크시킬 내용이 표시될 위치 지정
download · 다운로드 링크 제공
· 링크를 통해 보여 주거나 이동시키는 것이 아니라, 다운로드를 실행함
rel · 링크시킨 문서와 현재 문서와의 관계를 알려줌
hreflang · 링크시킨 문서의 언어를 지정함

 

▶target속성의 속성값

속성값  
_self · 내용이 표시되는(떠오르는) 위치가 현재 윈도우창(기본값)
_blank · 내용이 표시되는(떠오르는) 위치가 새로운 윈도우창

 

예시

<a href="http://www.gildong.com">길동닷컴</a> 
<a href="http://www.google.com" target="_blank">hello!</a>


 

▶<div>태그
· divison의 약자
· 영역을 묶는 기능
· div태그는 단독으로 사용하기보다,
id속성, class속성, style속성 등과 함께 사용한다

 

▶padding속성
· 특정 영역 내부(테두리 안쪽)를 얼마만큼 빈 공간으로둘지 공간설정

· 각각 영역 설정 가능

padding-top: 100px;
padding-bottom: 100px;
padding-left: 250px;
padding-right: 250px;

 

▶margin속성
· 특정 영역 외부(테두리 바깥쪽)를 얼마만큼 빈 공간으로둘지 공간설정

· 각각 영역 설정 가능

margin-top: 100px;
margin-bottom: 100px;
margin-left: 250px;
margin-right: 250px;

 

▶src속성
· source의 약자

· html문서 내에서 자바스크립트 파일을 연결시킬 때 사용

+ Recent posts