안녕하세요
2주차 정리 (05/23 ~ 05/27) 본문
10일 사이에 많은 것을 배웠고 배우고 있지만, 아직은 초반이라 그런지 반복하여 손에 익히는 시간이 많습니다.
이번 주 목요일 부터는 9:00~18:00 총 8시간의 수업으로 전환됩니다.
체력이 받쳐줘야 할 것 같습니다. 운동도 빠지지 않고 사흘에 한 번 이상은 할 수 있도록 노력해야겠습니다.
2주차 노트
6일 차
reset.css font, icon 설정 / jquery로 slick 슬라이드 구현
실제로 어떻게 만들어지는지, 현장에서 사용하는 웹규격에 대해 배울 수 있었습니다.
모듈화
보통 header와 footer는 고정된 채로 main의 내용이 바뀝니다.
고정된 부분은 이후에 components로 만들어 작업을 합니다.
.Wrap : 한 섹션을 크게 둘러싸는 박스의 클래스명입니다.
전체 구조를 .Wrap으로 감싸준 뒤에 작업을 시작합니다.
<div class="Wrap">
<header></header>
<main></main>
<footer></footer>
</div>
.container : 1200px 안에 넣을 내용은 보통 .container 클래스를 부여합니다.
<meta>는 검색 타이틀, 설명, 키워드 등의 내용을 담습니다.
웹사이트를 만들기 위한 준비입니다.
1.정리가 중요합니다. 폴더를 만듭니다. css, js, img
reset.css
2. reset을 설정합니다.
@charset 'utf-8'; 주석을 달 때 한글이 깨지지 않도록 합니다.
3. reset에서 font를 설정합니다.
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap');
body {
line-height: 1;
font-family: 'Noto Sans KR', sans-serif;
}
4. reset에서 icon 을 설정합니다.
@import url('https://cdn.jsdelivr.net/npm/xeicon@2.3.3/xeicon.min.css');
main.css
5. main.css를 만듭니다.
jquery는 1.x.x 버전을 이용합니다. https://releases.jquery.com/
minified 를 다른이름으로 저장 > js 폴더 안에 저장합니다.
script src=""로 연결을 합니다.
<script src="./js/jquery-1.12.4.min.js"></script>
html 연결을 합니다.
<script src="./js/main.js"></script>
jquery는 아래처럼 적용합니다. ( $(function() {})은 DOMcontentloaded 역할을 합니다. )
$(function(){
$("h1").hide();
})
css는 link로 연결합니다. reset이 가장 위로 오도록 합니다.
<title>DK-streel - training01</title>
<link rel="stylesheet" href="./css/reset.css" />
<link rel="stylesheet" href="./css/main.css" />
js는 script src=""로 연결합니다. jquery가 가장 위로 오도록 합니다.
<script src="./js/jquery-1.12.4.min.js"></script>
<script src="./js/main.js"></script>
</head>
slick : 부드럽게 슬라이드를 만들 수 있는 플러그인 입니다.
slick을 적용하는 방법입니다.
https://kenwheeler.github.io/slick/
cdn에서 안내하는 링크를 다른이름으로 저장을 통해 css, js 폴더에 저장합니다.
CSS
cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css
JS
cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js
플러그인을 가져오는 위치는 정해져 있습니다.
<link rel="stylesheet" href="./css/reset.css" />
<!-- 플러그인은 여기에 위치합니다. -->
<link rel="stylesheet" href="./css/main.css" />
<script src="./js/jquery-1.12.4.min.js"></script>
<!-- 플러그인은 여기에 위치합니다. -->
<script src="./js/main.js"></script>
<link rel="stylesheet" href="./css/reset.css" />
<link rel="stylesheet" href="./css/slick.css">
<link rel="stylesheet" href="./css/main.css" />
<script src="./js/jquery-1.12.4.min.js"></script>
<script src="./js/slick.min.js"></script>
<script src="./js/main.js"></script>
slide는 div안에 생성합니다.
<div class="frist_slider">
<figure>01</figure>
<figure>02</figure>
<figure>03</figure>
</div>
$("").slick() 으로 슬라이드를 적용할 수 있습니다.
$(function () {
$(".frist_slider").slick();
});
7일 차
html 구조 css 코드 바르게 작성하기
hr은 문장과 문장 또는 컨텐츠와 컨텐츠 사이를 나눌때 사용합니다.
디자인적으로 이용하기 위해서는 bolder를 사용합니다.
#dddddd는 경계선에 사용되는 표준 색상입니다.
dd처럼 반복되는 경우에는 #ddd로 표현할 수 있습니다.
.header .top_banner {
border-bottom: 1px solid #dddddd;
}
1200px의 박스에는 .container 클래스를 부여합니다.
<ul class="container">
inline과 block이 혼재한 경우. 예를 들어서,
img에는 padding이 적용이 될 때, inline의 경우에는 padding이 적용이 안되는 경우가 있습니다.
하지만 처음부터 line-height로 조절을 하면 block과 inline에 있어서 손쉽게 관리할 수 있습니다
.header .top_banner {
border-bottom: 1px solid #ddd;
font-size: 13px;
line-height: 30px;
}
bootstrap에 사용된 색상을 style로 추출해 이용하는 것입니다. 보기에 편안한 색상을 찾을 수 있습니다.
#dc3545;
색상은 변수에 담아 이용할 수 있습니다. (보통은 mc와 같이 이름을 정합니다. mc는 메인컬러를 의미합니다.)
인터넷 익스플로러에서는 적용되지 않습니다.
색상을 변경하기 위해서 해당 색을 일일이 찾아 변경할 필요 없어집니다.
변수의 색깔만을 수정하면 모든 색깔을 동시에 바꿀 수 있어 편리합니다.
:root {
--mc: #dc3545;
--gc: #dddddd
}
.header .top_banner {
border-top: 2px solid var(--mc);
border-bottom: 1px solid var(--gc);
}
.header .top_banner li {
border-right: 1px solid var(--gc);
}
rem : 기본 폰트사이즈를 html 에 px로 적용하고 나머지 폰트사이즈를 rem으로 설정한다면 나중에 모바일 웹페이지로 변경할 때 유용합니다.
모든 폰트 사이즈를 기본 사이즈의 배율로 지정했기 때문에 html의 폰트사이즈만을 수정해 모든 폰트 사이즈를 동시에 바꿀 수 있습니다.
html {
font-size: 20px;
}
rem은 html에서 정한 사이즈의 배율 단위입니다.
body {
font-size: 0.8rem;
}
.header .top_banner {
font-size: 0.65rem;
}
최상단으 banner와 같이 레이아웃에도 없어져도 전체 구조에 영향이 없는 부분은 따로 빼냅니다.
<div class="top_banner">
<ul class="container">
<li>DK스틸 : 수입파이프 일반파이프 환봉SS41 S45C 주문생산</li>
<li>
<a href="">
<i class="xi-pause"></i></li>
</a>
</ul>
</div>
로고는 h1안에 넣습니다.
<h1>
<a href="">
<img src="./img/logo.png" alt="">
</a>
</h1>
nav는 반.드.시 nav태그 안에 만듭니다. 중요합니다.
<nav>
<ul>
<li><a href="">회사소개</a></li>
</ul>
</nav>
메뉴를 왼쪽에 있는 logo와 띄우기 위해서 margin: 0 0 0 auto; 를 적용합니다.
.header nav {
margin: 0 0 0 auto;
}
메뉴에서는 부모를 확실하게 잡아줍니다.
.header nav>ul
.header nav ul 도 상관은 없지만, 메뉴에는 많은 박스가 생기기 때문에 처음부터 확실하게 정하고 갑니다.
reset.css 에 빠진 내용이 있습니다.
img {
vertical-align: middle;
}
가상요소 선택자 ::before 로 메뉴 사이의 경계선을 만들 수 있습니다.
.header nav > ul > li::before {
content: "";
position: absolute;
left: 0;
top: 0;
width: 1px;
height: 0.6rem;
background: var(--gc);
}
기준은 li 마다로 합니다.
.header nav > ul > li{
position: relative;
}
위치는 position: absolute; 로 조절합니다.
.header nav > ul > li::before {
content: "";
position: absolute;
inset: 50% auto atuo -0.75rem;
width: 1px;
height: 0.6rem;
background: var(--gc);
transform: translateY(-50%);
}
.header nav > ul > li~li::before {
~표시는 형제를 의미합니다. 자기자신을 뺀 형제 모두를 선택합니다.
입력하게 되면 제일 앞의 객체는 사라집니다.
슬라이드는 div 안에 생성하게 됩니다.
section엔 항상 이름을 줍니다.
<section class="main_visual">
<div class="main_slider">
<figure>
<img src="./img/main_bg01.jpg" alt="">
</figure>
</div>
</section>
$(function () {
$(".main_slider").slick({
arrows: false, // 화살표를 표시합니다. false
autoplay: true, // 자동으로 슬라이드가 실행됩니다. true
pauseOnHover: false, // 마우스를 얹었을 때 슬라이드가 멈춥니다. false
pauseOnFocus: false, // 마우스를 포커스 했을 때 슬라이드가 멈춥니다. false
});
});
슬라이드 위의 글씨는 position: absolute; 로 나타냅니다.
.main_visual {
position: relative;
}
.main_visual .slogan {
position: absolute;
inset: 50% auto auto 50%;
transform: translate(-50%, -50%);
width: 1200px;
text-align: right;
color: #fff;
}
text-shadow는 글자에 그림자를 주는 방법입니다.
.main_visual .slogan {
text-shadow: 0 0 2px var(--dc);
}
8일차
jquery로 슬라이드 버튼 구현
jquery로 class의 index를 변수로 지정하고 css 속성의 top에 index 값을 곱해주면 이미지가 위로 올라가는 듯한 슬라이드를 구현할 수 있습니다.
$(function () {
$(".num li").on("click", function () {
var idx = $(this).index();
$('.shoes .case ul').css({ top:-450 *idx}) }) });
그리고 이미지를 배경에 두고 전면의 레이아웃만 움직이는 효과를 배웠습니다.
하지만 실수로 파일을 백업하지 않았습니다. 남아있는 코드로 복습한 뒤에 직접 구현해보도록 합니다.
css 속성 순서가 잘 기억나지 않을 때마다 복습해야겠습니다. 헷갈릴 때마다.
100% 정확하지는 않을 수도 있습니다. 크게는 가장 자주 이용하는 다음 6가지를 외우면 좋을 듯 합니다.
포지션 > 디스플레이 > width-height > 패딩마진 > 폰트 > 애니메이션
position (z-index) >
display >
size >
padding margin >
font (font-size color text-align) >
background >
border >
animation (transform transition)
background 속성입니다.
bg안에서 이미지가 자신의 크기만큼 들어가고 default 값은 repeat입니다. 여백이 있다면 이미지가 반복됩니다.
.test_bg {
background-color: #f00;
background-image: url(../img/logo.png);
height: 444px;
}
background-repeat: no-repeat;
no-repeat 속성을 부여하면 반복되지 않습니다.
background-size: cover;
이미지를 이미지의 크기대로 보여줍니다. 박스가 작으면 이미지가 잘립니다.
background-size: contain;
박스가 작으면 이미지를 축소해서라도 모든 모습을 보여줍니다.
이미지를 배경에 두고 전면의 레이아웃만 움직이는 효과를 구현합니다. background: fixed를 활용합니다.
.test_bg {
background-image: url(../img/main_banner01.jpg);
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
height: 300px;
margin-bottom: 1000px;
}
축약형은 다음과 같습니다. 아이폰, 사파리에서는 적용되지 않습니다.
(칼라, 이미지, 리피트, 픽스드, bgposition x, bgposition y/cover)
.test_bg {
background: #f00 url(../img/main_banner01.jpg) no-repeat fixed center center/cover;
height: 300px;
margin-bottom: 1000px;
}
이를 슬라이드에 적용해봅니다. background를 설정한 뒤에 사이즈를 줍니다.
<div class="main_slider">
<figure class="item01"></figure>
<figure class="item02"></figure>
<figure class="item03"></figure>
</div>
주의사항입니다. 슬릭은 .main_slider>figure 과 같이 자식을 선택하는 것이 안됩니다.
높이를 줍니다.
.main_visual figure {
height: 30rem;
}
background를 지정합니다.
.main_visual .item01 {
background: url(../img/main_banner01.jpg) no-repeat center center/cover;
}
현재 슬라이드가 선택되었을 때 크기가 변화하는 효과를 줍니다.
현재 슬라이드에는 on 클래스명을 주고, 형제객체에는 on 클래스명을 제거합니다.
$(function () {
$(".main_slider").on("init reInit afterChange", function () {
var here = $(".slick-current");
here.addClass("on").siblings().removeClass("on");
});
현재 슬라이드(.on 이 붙었다면)의 크기를 150%로 커지게 합니다. transition도 0.5s 줍니다.
.main_visual .item01 {
background: url(../img/main_bg01.jpg) no-repeat center center/100%;
}
.main_visual .item01.on {
background: url(../img/main_bg01.jpg) no-repeat center center/150%;
transition: 0.5s;
}
fade: true; 를 주게 되면 옆에서 날아오지 않고 제자리에서 이미지가 페이드인 합니다.
$(".main_slider").slick({
fade: true,
});
});
overflow: hidden;을 활용해 클릭에 반응하여 top 위치가 변하는 슬라이드를 구현합니다
우선 html section을 만듭니다.
<section class="shoes">
<div class="case">
<ul>
<li>
<img src="../img/01s.png" alt="">
</li>
</ul>
</div>
<ul class="num">
<li>01</li>
</ul>
</section>
css를 설정합니다.
body{
background: #333;
}
.shoes {
padding: 100px 0;
}
position: relative; 로 기준을 잡고 overflow: hidden; 으로 넘치는 사이즈는 가립니다.
.shoes > .case {
position: relative;
width: 809px;
height: 450px;
margin: 0 auto; /* 가운데로 이동합니다. */
overflow: hidden;
}
position: absolute; 설정합니다.
.shoes ul {
position: absolute;
top: 0;
left:0;
}
js로 이벤트를 구현합니다. this 는 'click'이벤트를 실행한 대상입니다.
var idx = $(this).index(); 는 index();
$(function () {
$(".num li").on("click", function () {
var idx = $(this).index();
console.log(idx);
});
});
var idx = $(this).index(); li의 index 값을 표시합니다.
$(function () {
$(".num li").on("click", function () {
var idx = $(this).index();
$('.shoes .case ul').css({ top:-450 *idx})
})
});
jquery 효과 확인은 https://jqueryui.com/ 에서 합니다.
transition 에는 다음과 같은 속성들이 있습니다.
transition: 1s;
transition-property: all;
transition-duration: 1s;
transition-timing-function: ease;
transition-delay: 0s;
9일차
side bar 구현 / keyframes
JS로 클릭을 하면 화면에 없다가 나타나는 사이드바를 구현했습니다.
나타나고 사라질 뿐만 아니라 버튼의 텍스트를 OPEN <-> CLOSE 로 바꿉니다.
dl 태그는 dt 또는 dd 만을 자식으로 가집니다.
정의 및 특징
<dl> 태그는 용어(term)와 그에 대한 설명(description)을 리스트 형식으로 정의할 때 사용합니다.
<dl> 요소는 용어(term)나 이름(name)을 나타내는 <dt> 요소와 해당 용어에 대한 설명을 나타내는 <dd> 요소로 구성됩니다.
position: relative, absolute, fixed 모두 기준이 될 수 있습니다.
atuo와 0사이에는 중간단계가 없기 때문에 transition이 적용되지 않습니다.
.top_banner .container {
transition: 0.5s;
}
.top_banner .container.on {
height: 0;
overflow: hidden;
}
close 버튼의 텍스트를 open 으로 바꾸는 방법입니다.
우선 html을 만듭니다. 버튼 안에 icon을 넣습니다.
<div class="top_banner">
<div class="container">
<h2>Lorem ipsum dolor sit.</h2>
<p>Lorem, ipsum dolor.</p>
</div>
<button>
<i class="xi-arrow-top"></i>
</button>
</div>
css로 가상요소선택자를 만듭니다.
.top_banner button::after {
content: "close";
}
.top_banner.active button::after {
content: "open";
}
JS로 클래스명 .active 가 없다면 close .acitve가 있다면 open으로 바뀌도록 이벤트를 만듭니다.
$(function () {
$('.top_banner button').on('click', function(){
$('.top_banner').toggleClass('active');
})
});
css로 크기와 위치를 조절하고, overflow: hidden; 으로 height가 메뉴 컨텐츠를 가릴 수 있도록 합니다.
.top_banner .container {
overflow: hidden;
}
.top_banner.active .container {
height: 0;
}
.active가 붙으면 화살표아이콘을 180도 회전시킵니다.
.top_banner.active i {
transform: rotate(180deg);
}
.top_banner {
position: relative;
background-color: #ff0;
border-bottom: 3px red solid;
}
마우스포인터는 cursor 속성으로 바꿀 수 있습니다.
.top_banner button {
cursor: pointer;
}
이어서 옆에서 나오는 기능을 구현합니다.
html을 만듭니다.
<ul class="right_banner">
<li><i class="xi-bars"></i><span>Lorem, ipsum.</span></li>
<li><i class="xi-close"></i><span>Lorem, ipsum.</span></li>
<li><i class="xi-heart"></i><span>Lorem, ipsum.</span></li>
</ul>
vh는 화면크기의 배율입니다. top:50vh는 화면크기의 반이 됩니다.
.right_banner {
position: fixed;
top: 50vh;
right: -100px;
background: #ff0;
transition: 0.5s;
}
.right_banner.active {
right: 0;
}
10일차
position / slick / pattern 입히기
실제로 구현을 해보며 얻어가는 것이 많습니다.
position, slick-slider, 가상요소선택자 pattern 입히기 뿐만이 아니라,
올바른 semantic 사용법, 실제 현장에서 이용하는 size 등을 반복하며 배울 수 있습니다.
image 이름을 붙일 때 m01 : main, 두자릿수를 대비해 01 부터 시작합니다.
이미지 크기가 넘칠 때는 max-witdth 를 적용하면 됩니다.
img {
max-width: 100%;
}
transform: scale로 이미지 크기를 키울 때 overflow: hidden; 을 적용했음에도 이미지 크기가 넘친다면,
img 를 div로 감싸서 해결합니다.
<div class="box">
<img src="./img/main_bg01.jpg" alt="" />
</div>
strong은 inline이고 p는 block입니다.
line-height가 적용이 되는 부분, margin이 적용이 되는 부분이 겹쳐도 관습적으로 적용하는 속성 위치가 있습니다.
여기서는 strong을 block으로 만들고 마진을, p안의 글자는 line-height로 조절합니다.
.content strong {
display: block;
font-size: 17px;
font-weight: 500;
margin: 0 0 17px 0;
}
.content p {
font-size: 13px;
font-weight: 300;
line-height: 1.4;
}
shortcut
.left+.right
가로로 화면 전체를 가로지르는 경계선을 만드는 방법입니다. container의 부모에 border를 주면 됩니다.
<section class="product">
<div class="container">
.product {
padding: 30px 0;
border-top: 1px solid var(--gc);
}
flex 활용하는 방법입니다. 중요합니다.
3칸 중에 2칸을 차지하게 됩니다.
.product .container .left {
flex: 2;
}
3칸 중에 1칸을 차지하게 됩니다.
.product .container .right {
flex: 1;
}
a에 전화번호와 이메일 입력하는 방법입니다. tel:, mailto:
<li><a href="tel:051-325-0355">051-325-0355</a></li>
<li>Fax : 051-326-0356</li>
<li>
<a href="mailto:kgbds97@naver.com">
e-mail : kgbds97@naver.com
</a>
</li>
text-align: right; 글자를 오른쪽 끝으로 붙이는 방법입니다.
.customer .left {
text-align: right;
}
text-transform으로 글자를 대문자로 바꾸는 등의 변환을 할 수 있습니다.
.customer>div a p {
text-transform: uppercase;
}
이미지 위의 글자를 깔끔하게 보이도록 하는 방법은 text-shadow입니다.
text-shadow: 0 0 3px var(--dc);
이미지 위에 패턴을 넣는 방법입니다. background: url(../img/pt-bg01.png);
작은 패턴들이 반복되면서 이미지 전체를 덮습니다.
.customer > div a {
background: url(../img/pt-bg01.png);
}
<address> 태그는 회사 정보를 나타낼 때 씁니다. 글자기울기 효과가 들어갑니다.
font-style: normal; 을 적용하여 기울기를 없앨 수 있습니다.
카피라이트의 마크는 © 로 만듭니다.
<div class="copy">© DK스틸 All Rights Reserved.</div>
flex로 5만큼에 대해서 1대 4로 나눕니다.
.footer .logo {
flex: 1;
}
.footer address {
flex: 4;
}
글자 사이 경계선을 만드는 방법입니다.
만들고자 하는 box가 inline-block일 경우에는
.footer address ul li {
display: inline-block;
}
가상요소선택자도 마찬가지로 inline-block으로 만들어 주고 li~li 로 첫번째 li는제외합니다.
.footer address ul li~li::before{
content: "";
display: inline-block;
width: 1px;
height: 11px;
background: var(--gc);
}
패턴 넣기 2 입니다. 가상요소 선택자로 section::after에 만듭니다.
.main_visual::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #333;
}
문제는 이미지만이 아니라 slogan도 함께 가려집니다.
z-index를 주어 해결합니다.
.main_visual .slogan {
z-index: 999;
}
'프론트엔드 국비교육' 카테고리의 다른 글
5월31일 12일차 - slick 슬라이드 버튼 구현 [jquery] (0) | 2022.06.01 |
---|---|
5월30일 11일차 - 반응형 화면 구현하기 (0) | 2022.05.30 |
5월27일 10일차 - slick-slider, 가상요소선택자로 pattern 입히기 (0) | 2022.05.28 |
5월26일 9일차 - side menu, keyframes 구현 (0) | 2022.05.27 |
5월25일 8일차 - 슬라이드 top, 배경고정, JS로 toggle("on ") 학습 (0) | 2022.05.25 |