<meta charset="UTF-8"> // 유니코드 입니다.(유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다.)
자주 쓰는 tag 목록
<h1>Lorem ipsum dolor sit amet. <!--대제목--> <h2>Lorem ipsum dolor sit amet. <!--소제목-->
<ul><!--순서가 없는 리스트-->
<figure>Lorem ipsum dolor sit amet. <!--사진 등과 같이 문서의 주요 흐름과는 독립적인 콘텐츠를 정의할 때-->
<em>Lorem ipsum dolor sit amet. <!--폰트 기울이기-->
<section class="box"> <!-- section은 큰 div 역할을 합니다. -->
reset.css
설정 초기화. 중요합니다.
* : all. 모든 것에 적용 inherit : (여기에서는 브라우저가) 본래 가지고 있는 성질을 상속받습니다. * { margin: 0; padding: 0; font-size: inherit; font-weight: inherit; box-sizing: border-box; } ul, ol 앞의 점과 숫자 없애기 } ul,ol{ list-style: none; } a 효과 색상 없애기 a { text-decoration: none; color: inherit; } strong,em 강조, 기울기 없애기 strong,em { font-style: normal; } 줄 간격 줄이기 body { line-height: 1; }
이 크기가 늘어나는 문제를 해결하기 위해서 모든 box에 box-sizing: border-box; 를 지정합니다.
margin 겹침 현상 .box{ margin:30px auto; width: 600px; border: 1px solid #333; } margin : 30px; : 설정대로라면 박스마다 margin이 30px이 되어야 합니다. 따라서 박스가 두 개라면 박스 사이의 margin은 위 아래 더해 총 60px이 되어야 합니다.
하지만 margin은 아래 위로 겹칩니다. 부모 자식간에도 겹칩니다. 결과적으로 박스 사이의 margin이 30px이 됩니다.
margin 사이즈는 한 방향으로만 지정합니다.
글자 tag의 성질 <strong class="box box03">Lorem ipsum dolor sit.</strong>
사이즈를 줄 수 없습니다. 아래 위로 margin padding 이 적용이안됩니다. 좌우로 margin padding 은 적용이 됩니다.
그런데 특이한 성질이 있습니다.
기본적인 글자 성질을 지니고 레이아웃을 차지하지 않음에도 padding 자체는 시각적으로 적용됩니다.
글자 속성(맨 아래의 투명한 블럭 h1)에 padding이 시각적으로 적용된 모습
글자 속성을 가진 tag 들은 기본적으로 height와 width가 없습니다.
하지만 padding은 적용 '된 것 처럼' 보입니다.
'된 것 처럼' 보인다고 표현 한 이유는 위의 붉은색 block 과 겹쳐지는 모습을 볼 수 있기 때문입니다.
실제로 padding이 다른 block 들과 동일한 방식으로 적용이 되었다면 겹쳐지지 않고 아래로 밀려나야 합니다.
이는 버그로 치부하고 조심해야 하는 부분이 아니라, 경우에 따라활용을 하면css 효과를 입히는 것이 용이할 것입니다.
display: flex box를 가로로 배열합니다. auto가 적용됩니다. auto를 통해 사이즈에 맞춰 작아집니다.
inline-block img는 기본적으로 inline 속성을 가지고 있습니다. 동시에 block의 성질도 지니고 있어 크기를 지정할 수 있습니다. (이를 display :inline-block 이라고 합니다.)
한 contrainer 안의 서로 다른 사이즈의 이미지를 동일하게 만들 수 있습니다. .basic01 figure { flex: 1; } 모든 .basic01안의 figure 는 이미지 크기가 제각각이어도 flex: 1 에 맞춰 크기가 변합니다.
github.io github.io(깃허브 호스팅)를 통해서 개발한 프로젝트를 업로드를 합니다. github에서 제공하는 서버가 유지되어 포트폴리오로 이용 가능합니다. 트래픽이 많아도 이용가능합니다. DB는 없기 때문에 서버와 관련하여 등록을 할 수는 없습니다. 파일크기가 20mb 넘으면 업로드 할 수 없습니다.
github.io 만드는 방법 repository 이름을 설정합니다. youngentry.github.io add a README file 체크합니다. settings > Pages > 주소로 접속가능합니다.
중요한 속성입니다. contrainer의 표준 형태를 외웁니다. .basic .container { display: flex; width: 1200px; /*표준 사이즈*/ margin: 0 auto; /*자동으로 늘리기*/ }
이미지 다운로드 하는 방법: f12 > sources > img > 파일찾기
자주 이용하는 sementic tag는 의미를 기억하여 잘 활용합니다.
<body> <header class="basic"> <!-- 상단 바는 header .basic 입니다. --> <div class="container"> <!-- 안의 내용을 담을 div는 .container 입니다. --> <h1> <!-- h1은 로고입니다. --> <a href="/">LOGO</a> </h1> <nav> <!-- 상단 내비게이션 바는의 태그는 nav 입니다. --> <ul> <!-- 동일한 성격의 내용을 담기 위해서는 ul 안에 li 배치합니다. --> <li><a href="">menu01</a></li> <li><a href="">menu02</a></li> </ul> </nav> <div class="icon">+</div> <!-- icon 은 div 안에 담습니다. --> </div> </header>
width: 100%는 부모에서 받아오는 너비만큼 가득 채웁니다. flex: 1; 빈 공간을 채웁니다. .basic nav { display: flex; flex: 1; background: yellow; }
position 속성 position: static; 모든 태그는 기본적으로 static 상태입니다. 이후에 배우는 중요한 속성입니다. position: relative; 기준이 됩니다.
position : absolute; 자신의 좌표(top, right, bottom, left)를 갖습니다. 맨 앞으로 떠오릅니다. 겹치기 위해 이용합니다. 화면 밖으로 나가게 되면 스크롤 바가 생깁니다. 자식에서 빠져버리게 됩니다. 부모를 기준으로 하고 있다면 width 값이 사라져 쪼그라듭니다. body를 기준으로 변하게 됩니다. 자식의 기준이 될 수 있습니다.
position: fixed; 기준이 없습니다. 화면(벽 포트)을 기준으로 상대적인 위치가 정해집니다. 화면 밖으로이동하여도 스크롤 바가 생기지 않습니다. 맨 앞으로 떠오릅니다. 스크롤을 이동하여도 따라다닙니다.
z-index: ; layout의 순서를 정할 때 이용합니다.
.popup { position: absolute; top:50%; left: 50%; width: 450px; height: 350px; background: red; } body를 기준으로 왼쪽 위 꼭짓점이top: 50%; left: 50%; 에 위치하게 됩니다.
한 가운데로 이동시기키 위해서는 바로 아래의 transform을 이용합니다.
transform: ; 크기가 변하는 것 처럼 보이더라도 layout을 깨지 않습니다. transform: translateX(-50%);
transform이 두 번 사용된다면 두 번째 transform이 첫 번째 transform 을 덮어씁니다. transform: translateX(-50%); transform: translateY(-50%);
올바른 표현은 한 transform에 입력하는 것입니다. transform: translateX(-50%) translateY(-50%);
자바스크립트를 이용해 close를 누르면 팝업 창이 닫히도록 합니다. <script> document.querySelector('.popup button') </script>
.addEventListener('click', function()) : 이벤트('click')를 실행하면 function()을 실행합니다. 이벤트는 형태가 정해져 있습니다. ('dbclick', 'mouseover', 'scroll', 'hover' 등등 ) <script> document.querySelector('.popup button').addEventListener('click', function(){}) </script>
선택자로 ".popup"을 선택한 뒤 style.display = "none"; 으로 설정합니다. <script> document .querySelector(".popup button") .addEventListener("click", function () { console.log("done"); document.querySelector(".popup").style.display = "none"; }); </script>
close button의 'click' 이벤트를 실행하면 팝업 창이 display: none 되어 사라지게 됩니다. <div class="popup" style="display: none;"> <button>close</button> </div>
shortcut : ul>li*6>a{menu0$} <!-- $ 명령어를 통해 1~6까지 순서대로 생성합니다. --> <li><a href="">menu01</a></li> <li><a href="">menu02</a></li> <li><a href="">menu03</a></li> <li><a href="">menu04</a></li> <li><a href="">menu05</a></li> <li><a href="">menu06</a></li>
position: fixed; 를 이용해 옆에서 나타나는 모션을 구현합니다. 아주 많이 사용하는 position 기술입니다. 중요합니다. <li><a href="">menu06</a></li> </ul></nav> <div class="mopen"> <button>열고닫기</button> </div>
클릭했을때 나타나도록 하기 classList.add("on"); 으로 nav에 클래스명을 부여할 수 있습니다. (on/off 형식에는 아래의 toggle을 이용합니다.) nav.on { left: 0; }
<script> document.querySelector(".mopen").addEventListener("click", function () { document.querySelector("nav").classList.add("on"); }); </script>
toggle 을 활용하면 click 이벤트가 발생할 때 현재 "nav.on" 이라면 .on을 지우고 "nav" 라면 .on을 추가합니다. document.querySelector(".mopen").addEventListener("click", function () { document.querySelector("nav").classList.toggle("on"); });
transition: 0.5s; transition을 이용하면 부드럽게 나타나고 사라지는 연출이 가능합니다. nav { position: fixed; top: 0; left: -500px; width: 500px; height: 100vh; background: #fff; transition: 0.5s; }
팝업슬라이드, 메뉴버튼 > x버튼 변환 연출
span과 같은 inline 속성은 width와 height가 없습니다. 하지만 양쪽에서 방향을 지정하면 width를 지정하지 않아도 사이의 간격 만큼 span이 나타나게 됩니다. left: 5px; right: 5px;
.mopen span:nth-child(4) { bottom: 5px; // top: 5px 로 인해서 } 하위에서 동일한 역할을 가지게 되면 bottom: 5px;은 적용이 안됩니다.
display:none(과 같이 수치가 없는, 중간단계가 없는 속성)은 trasition 적용이 안됩니다. 이를 대신하여 opacity: 0; 을 활용하면 됩니다. .mopen.on span:nth-child(1) { opacity: 0; }
.mopen.on span:nth-child(2) { transform: rotate(45deg);<!-- 45도 만큼 회전합니다. --> }
this 를 활용하면 event에서 선택한 명령어( document.querySelector(".mopen") )를 축약할 수 있습니다. document.querySelector(".mopen").addEventListener("click", function () { document.querySelector("nav").classList.toggle("on"); this.classList.toggle("on"); });
transition은 event와 함께 애니메이션을 줍니다. keyframes는 자기 스스로 움직입니다. (앞으로 배우게 됩니다.)
[XEicon주소]CDN(Content Delivery Network) 아이콘을 적용하는 방법을 배웠습니다.
글자 줄바꿈은 <br />입니다. <p> Lorem ipsum dolor sit amet consectetur adipisicing elit. <br /> Libero nemo optio harum sit blanditiis cupiditate explicabo! Magni suscipit minima nisi! </p>
width 속성과 max-width 속성 width: 100%; 속성은 부모 사이즈를 따라 크기가 커졌다 줄어들었다 변합니다. max-width: 100%; 크기가 줄어들기는 하나, 이미지의 기본 크기 이상으로는 커지지 않습니다.
이미지 사이 간격이 보일 경우 없앨 수 있습니다. reset.css로 img 사이의 틈을 지웁니다. img { vertical-align: middle; }
overflow: hidden; 박스의 사이즈를 넘어서는 부분은 나타나지 않도록 합니다. #event figure { overflow: hidden; }
무언가를 넣을 예정인 자리에는 "#!"을 입력합니다. <a href="#!"></a>
depth 는 4 이상이면 좋지 않습니다. #event .container figure a {} XXX #event figure a {} OOO
글자를 한 가운데로 배열하기 위해서 margin을 이용하면 글자의 크기에 따라 양 옆의 사이즈가 달라지게 될 수 있습니다. ( "WWW a 123") a를 기준으로 양 옆의 글자 수는 3글자 이지만 길이가 다르기 때문에 a는 한 가운데로 오지 않게 됩니다. #event figure a { display: block; margin: 0 auto; width: 200px; height: 30px; }
absolute는 기준을 잡아주지 않으면 body가 기준이 됩니다. #event figure a { position: absolute; top: 0; left: 0; }
만일 figure를 """기준"""으로 만들고 싶다면 figure에 position: relative; 속성을 주면 됩니다. #event figure { position: relative; }
more가 나타나는 연출을 합니다. #event figure { position: relative; flex: 1; overflow: hidden; /* 크기를 벗어나면 사라지게 합니다. */ }
#event figure a { position: absolute; top: -40px;/* -40px만큼 위로 이동시키면 overflow: hidden 속성으로 인해 보이지 않게 됩니다. */ left: 0; padding: 10px 30px; background: #333; color: #fff; transition: 0.2s;/* 부드럽게 나타나는 연출을 합니다. */ } #event figure:hover a { top: 0;/* 마우스를 hover하면 more가 나타납니다. */ }
가상요소선택자를 통해css로box를 만들 수 있습니다. ::after ::before div 빈 박스로 막대나 빈 박스 들을 만드는 것은 웹 표준에 어긋납니다. <h2> < 이 곳은 before 입니다. > Lorem ipsum dolor sit amet. < 이 곳은 after 입니다. > </h2> #event h2::after { content: "'amet.' 뒤에 나타나기"; }
h2 양 옆에 붉은색 선을 가로로 만들 수도 있습니다. before, after를 함께 이용합니다.