modal
을 구현하였다. <div class="modal-wrapper" id="modal-wrapper" style="z-index: 1;">
<div class="modal">
<div class="content">
<div class="good-job">
<p style="color: red">신고</p>
<hr>
<p style="color: red">팔로우 취소</p>
<hr>
<p>게시물로 이동</p>
<hr>
<p>태그된 계정</p>
<hr>
<p>공유 대상</p>
<hr>
<p>링크 복사</p>
<hr>
<button class="but_close" id="close" style="border: none; background-color: transparent; font-weight: bold;">취소</button>
</div>
</div>
</div>
</div>
실제 인스타그램에서 나오는 위치로 최대한 맞추었다. 인스타그램에서는 하단의 취소
키를 누르게 되면 모달이 꺼지고, 다시 점 세 개를 누르면 모달이 곧이어 바로 뜨는데 나는 구현하지 못했다.
새로고침
하는 대안을 생각했다. $(document).ready(function () {
$('.trigger').on('click', function () {
$('.modal-wrapper').toggleClass('open');
$('.page-wrapper').toggleClass('blur-it');
return false;
});
$(function () {
$("#close").on("click", function () {
$("#modal-wrapper").hide();
location.reload();
})
})
})
$(document).ready(function () {})
를 사용해 document가 로딩되면 해당 함수들을 사용할 수 있는 상태로 만들고, 트리거 클래스를 가지고 있는 부분(점 세 개)을 클릭하면 모달이 나오도록 설정하였다. 그리고 하단의 취소키에 close 아이디를 부여하여 해당 키를 누르면 모달이 꺼지도록 구현하였다.
뒷 배경화면을 블러처리하는 부분은 모든 화면을 묶은 부분인 <div class="page-wrapper" id="container-fluid">
의 클래스에 page-wrapper
를 부여해 구현할 수 있었다.
.insta-head {
/*헤드 부분을 화면 상단에 고정시켜 스크롤 시 내려가지 않도록 조치*/
position: sticky;
top: 0;
}
.right{
/*오른쪽 본문을 해당 위치에 고정시키기 위해 조치*/
margin-right: 300px;
position: fixed;
right: 0;
}
모달을 구현하다보니 모달 창은 다 만들어서 점 세 개를 누르면 창이 나오는데, 메인 바디 뒤 쪽으로 나오게 되었다. 그래서 구글링을 통해 z-index
를 찾게 되었다.
z-index
는 position 값이 주어진 대상들에 대해서 화면의 엘리먼트들이 쌓이는 순서를 정해주는 기능이다.
z-index
의 레이어 단계는 다음과 같다.
가장 아래(사용자로부터 가장 멀다)
Layer : -3
Layer : -2
Layer : -1
Layer : 0 <- z-index를 지정하지 않은 단계
Layer : 1
Layer : 2
Layer : 3
가장 위(사용자로부터 가장 가깝다)
해당 기능을 통해 모달을 제일 앞으로 가져올 수 있었다. (위의 모달 사진 참조
<a><img class="myProfileImg" style="width: 32px; height: 32px;" src="/static/myprofile.png"></a>
/*######################################스토리 부분 클릭하면 테두리 사라지는 거 구현*/
function changeBorder() {
const first = document.getElementById("first_img_1");
const second = document.getElementById("sec_img_1");
second.classList.remove("hidden");
first.classList.add("hidden");
}
function changeBorder1() {
const first = document.getElementById("first_img_2");
const second = document.getElementById("sec_img_2");
second.classList.remove("hidden");
first.classList.add("hidden");
}
function changeBorder2() {
const first = document.getElementById("first_img_3");
const second = document.getElementById("sec_img_3");
second.classList.remove("hidden");
first.classList.add("hidden");
}
function changeBorder3() {
const first = document.getElementById("first_img_4");
const second = document.getElementById("sec_img_4");
second.classList.remove("hidden");
first.classList.add("hidden");
}
function changeBorder4() {
const first = document.getElementById("first_img_5");
const second = document.getElementById("sec_img_5");
second.classList.remove("hidden");
first.classList.add("hidden");
}
이 부분에서도 객체 지향
의 개념이 부족하여 같은 내용의 함수를 id 값에 따라 여러 번 구현한 것을 볼 수 있다. 빨리 방법을 알아내 수정하고 싶다.
<div class="card story">
<div class="circles">
<a href="#" onclick="changeBorder()"><img id="first_img_1" class="myProfileImg" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham.png"></a><img id="sec_img_1" class="myProfileImg hidden" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham_2.png">
<a href="#" onclick="changeBorder1()"><img id="first_img_2" class="myProfileImg" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham.png"></a><img id="sec_img_2" class="myProfileImg hidden" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham_2.png">
<a href="#" onclick="changeBorder2()"><img id="first_img_3" class="myProfileImg" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham.png"></a><img id="sec_img_3" class="myProfileImg hidden" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham_2.png">
<a href="#" onclick="changeBorder3()"><img id="first_img_4" class="myProfileImg" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham.png"></a><img id="sec_img_4" class="myProfileImg hidden" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham_2.png">
<a href="#" onclick="changeBorder4()"><img id="first_img_5" class="myProfileImg" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham.png"></a><img id="sec_img_5" class="myProfileImg hidden" style="width: 64px; height: 64px; margin-right: 15px" src="/static/cham_2.png">
</div>
</div>
바로 위에서 했던 것과 같이 이미지를 넣어주었다. 인스타에서 직접 받아와서 진짜 뭔가 리얼한 느낌을 내고 싶었는데 실행되지 않아서 사진을 캡쳐해 넣은 것이 너무 아깝다.
<head>
태그 안에 반드시 있어야 한다. <!-- 폰트어썸에서 받아온 아이콘의 색깔을 hover로 바꾸고 싶다면 꼭 임포트하기-->
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
.feed_icon_hover:hover { /*피드의 게시글 위에 있는 아이콘들 위에 커서가 올라가면 호버기능으로 인해 색이 변하는 기능 구현*/
color: gray; /*폰트어썸에서 임포트한 부분이 반드시 필요!*/
}
4개의 아이콘들에게 feed_icon_hover
라는 클래스를 생성해 준 후, 다음과 같은 기능을 부여하였다.
하트 이모티콘을 누르면 색이 빨갛게 변하는 기능도 구현해 보고 싶어 폰트 어썸에 대해 구글링을 해보았는데, 해당 내용은 찾지 못하였다.
<a>
사용을 통해 마이페이지로 이동<!--우상단 프로필 이미지-->
<a href="mypage.html"><img class="myProfileImg" style="width: 32px; height: 32px;" src="/static/myprofile.png"></a>
<!--피드 내부의 닉네임-->
<a href="mypage.html" style="color: black; text-decoration: none;">daegeunziii</a>