바닐라 js로 작업하다보니 공통적으로 반복되고 거의 수정이 없는 header, footer를 매 페이지마다 붙여넣는 것이 번거로웠다. 수정사항이 생겼을 때 개별적으로 들어가서 수정해야하는 것이 불편했다.
=> header와 footer를 컴포넌트화 하기로 결정!
이래서 리액트 써야하나보다 불편해!!!
const res = fetch(url,[option]).then(response => [핸들링)
res.text() – 요청에 대한 응답을 text 형태로 반환한다.
res.json() – json 객체로 반환한다.
res.formData() – 응답을 FormData 객체 형태로 반환한다.
res.blob() – 응답을 Blob(타입이 있는 바이너리 데이터) 형태로 반환한다.
res.arrayBuffer() – 응답을 ArrayBuffer(바이너리 데이터를 로우 레벨 형식으로 표현한 것) 형태로 반환한다.
res.body() - 응답 본문을 청크 단위로 읽을 수 있다.
const headerFooterComponent = () => {
const headerId = document.querySelector("#header");
const footerId = document.querySelector("footer");
if (headerId) {
const header = fetch('/header.html');
header
.then((res) => res.text())
.then((text) => {
console.log(text)
document.querySelector("#header").innerHTML = text;
})
}
}
headerFooterComponent()
만든 함수 뒤에 아래 코드를 덧붙여 html을 불러온 후 css가 연동되게 하였다.
let style = document.createElement("link");
style.href = "headerFooter.css";
style.rel = "stylesheet";
document.head.appendChild(style);
const headerFooterComponent = () => {
const headerId = document.querySelector("#header");
const footerId = document.querySelector("#footer");
if (headerId) {
const header = fetch("header.html");
header
.then((res) => res.text())
.then((text) => {
document.querySelector("#header").innerHTML = text;
});
}
if (footerId) {
const footer = fetch("footer.html");
footer
.then((res) => res.text())
.then((text) => {
document.querySelector("#footer").innerHTML = text;
let style = document.createElement("link");
style.href = "headerFooter.css";
style.rel = "stylesheet";
document.head.appendChild(style);
});
}
};
headerFooterComponent();
공통적으로 쓰이는 페이지들에 모두 붙여주었다!
header의 nav 메뉴바를 눌렀을 때 특정한 위치로 이동할 것
<header>
<a href="main.html">
<h1>Do it Coding</h1>
</a>
<nav class="menu">
<ul>
<a href="#team-desc" class="scroll_move">
<li id="category-1">팀 소개</li>
</a>
<a href="#member-desc" class="scroll_move">
<li id="category-2">팀원 소개</li>
</a>
<a href="#gallery" class="scroll_move">
<li id="category-3">갤러리</li>
</a>
</ul>
</nav>
</header>
$(document).ready(function ($) {
$(".scroll_move").click(function (event) {
event.preventDefault();
$("html,body").animate({ scrollTop: $(this.hash).offset().top }, 500);
});
});
<header>
<a href="main.html">
<h1>Do it Coding</h1>
</a>
<nav class="menu">
<ul>
<a href="/sparta_first/main.html#team-desc" class="scroll_move">
<li id="category-1">팀 소개</li>
</a>
<a href="/sparta_first/main.html#member-desc" class="scroll_move">
<li id="category-2">팀원 소개</li>
</a>
<a href="/sparta_first/main.html#gallery" class="scroll_move">
<li id="category-3">갤러리</li>
</a>
</ul>
</nav>
</header>
mouse hover 시 css opacity 변경
$(document).ready(function () {
$("#after").mouseover(function () {
$(".showP").css("opacity", "1");
}) // 마우스가 올라갔을 때
$("#after").mouseout(function () {
$(".showP").css("opacity", "0")
}) // 마우스가 내려갔을 때
})
mhover 시 class 추가 및 제거
js
$(document).ready(function () {
$("#after").hover(function () {
$(".showP").addClass("hoverEffect");
// 마우스가 올라갔을 때
}, function () {
$(function () {
$(".showP").removeClass("hoverEffect");
// 마우스가 내려갔을 때
})
})
css
.showP {
opacity: 0;
}
.hoverEffect {
opacity: 1;
}
grid를 사용한 카드만들기 + slider효과 주기
작업한 코드
.box2 {
grid-column: 1/3;
grid-row: 1/2;
background-color: aliceblue;
}
.box2:before {
background-image: url(./img/SUBIMG5.jpg);
background-size: cover;
content: "";
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 1;
grid-column: 1/3;
grid-row: 1/2;
transition-duration: 1s;
}
.box2:hover:before {
top: -100%;
완성된 카드 그리드!!
hover시 나오는 링크!!
nav바를 상단 위 아이콘에 hover하면 볼 수 있도록 변경하기+ 위치고정시키기
완성된 코드
html
<nav class="menu">
<svg id="menuIcon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
style="fill: rgba(0, 0, 0, 1);transform: msFilter;">
<path d="M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z"></path>
</svg>
<ul id="menus_show">
<a href="/sparta_first/main.html#team-desc" class="scroll_move">
<li id="category-1">팀 소개</li>
</a>
<a href="/sparta_first/main.html#member-desc" class="scroll_move">
<li id="category-2">팀원 소개</li>
</a>
<a href="/sparta_first/main.html#gallery" class="scroll_move">
<li id="category-3">갤러리</li>
</a>
</ul>
</nav>
css
#menus_show {
width: 80px;
overflow: hidden;
position: relative;
right: 18px;
padding: 10px 0px;
gap: 10px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
list-style-type: none;
background-color: rgb(124, 124, 124);
opacity: 0;
}
.menu:hover #menus_show {
opacity: 1;
transition-duration: 0.5s;
}
처음에 hover시 display:block; hover가 없을 시 display:none; 으로 하고 transition-duration 을 주었는데 display는 transition-duration이 안 먹다는 것을 알게 됐다!!
그래서 opacity를 사용했다.
중간중간에 막힐 때도 있었고 어떻게 해결해야 할 지 계속해서 구글링하며 하루종일 시간을 보냈다...!
앉아서 약 15시간이 뚝딱 지나가버렸는데 팀원들이랑 중간중간에 상의도 하고 너무 재밌게 작업한 것 같아서 행복한 하루였다 ㅎㅎㅎㅎ
앞으로도 물론 몇 시간동안이나 해결 안돼서 끙끙 앓는 시간들이 있겠지만 그래도 해결하고 나서의 행복함과 성취감을 생각하며 잘 견뎌봐야겠다!!