오늘은 뭐했니?/일상

2023.05.12 웹디자인 기능사 시험준비

kebab00 2023. 5. 12. 22:59

728x90

- 오늘은 웹디자인 시험을 준비 했습니다.

- 웹디자인시험에서 중요한 것은 스크립트 부분이라고 생각합니다.

- 꼬였을 때 고치기가 막막하다는 부분에서 말이죠

- 그 부분들을 집중적으로 보겠습니다.

- 여기는 두가지 기능이 들어갔습니다.

- 탭메뉴 부분과 슬라이드 부분이죠

- 코드를 보시죠

 <div id="slider">
    <div class="container">
        <div class="sliderWrap">
            <div class="slider s1">
                <img src="images/slider01.jpg" alt="미래를 이끄는 열정">
                <div class="text">
                    <h2>미래를 이끄는 <strong>열정</strong></h2>
                    <p>산업대학교</p>
                </div>
            </div>
            <div class="slider s2">
                <img src="images/slider02.jpg" alt="미래를 이끄는 열정">
                <div class="text">
                    <h2>당신이 원하는 <strong>교육</strong></h2>
                    <p>산업대학교</p>
                </div>
            </div>
            <div class="slider s3">
                <img src="images/slider03.jpg" alt="미래를 이끄는 열정">
                <div class="text">
                    <h2>미래를 향한 우리의 <strong>도전</strong></h2>
                    <p>산업대학교</p>
                </div>
            </div>
        </div>
    </div>
</div>
    // 슬라이더
let currentIndex = 0;
const $sliderWrap = $(".sliderWrap");  //이미지 부모 : 움직이는 영역
const $slider = $(".slider");           //각각의 이미지
const $sliderWidth = $slider.width();   //이미지 가로값
$sliderWrap.append($slider.first().clone(true));   //첫 번재 이미지를 복사 마지막에 추가
setInterval(function(){
    currentIndex++;     //현재 이미지를 1씩 증가
    $sliderWrap.animate({marginLeft: -$sliderWidth * currentIndex}, 600);
    if(currentIndex === $slider.length){
        setTimeout(function(){
            $sliderWrap.animate({ marginLeft: 0},0);
            currentIndex = 0;
        }, 700);
    }
}, 3000)
/* slider */
#slider {
    width: 100%;
    height: 300px;

}
#slider .container {
    overflow: hidden;
}
#slider .sliderWrap {
    display: flex;
    width: 400%;
}
#slider .sliderWrap .slider {
    position: relative;
    width: 1200px;
}
#slider .sliderWrap .slider .text {
    position: absolute;
    left: 15%;
    top: 50%;
    transform: translate(-50%, -50%);
    background-color: #00000050;
    padding: 20px 40px;

}
#slider .sliderWrap .slider .text h2 {
    color: #fff;
    font-size: 24px;
    margin-bottom: 4px;
}
#slider .sliderWrap .slider .text h2 strong {
    color: orange;
}
#slider .sliderWrap .slider .text p {
    color: #fff;
    font-size: 16px;
}

- 슬라이더 부분입니다.

- 슬라이드는 구조를 잘 짜는 것이 중요합니다. 화면에 보이는 부분 즉 옆에 사진들을 가려주는 박스가 가장 밖에 있고 

- 움직일 부분들 즉 사진들을 정렬시켜 놓을 박스가 하나 필요합니다.

- 그리고 각각의 장면을 구성하는 슬라이드 부분이 있는 것이죠

- 저는 각각 .container, .sliderWrap, .slider라고 이름을 지어주었습니다.

- sliderWrap부분이 옆으로 넘어가면서 container에 slider를 보여주는 형식인 것이죠

<nav class="nav">
    <ul>
        <li><a href="#">대학소개</a>
            <ul class="submenu">
                <li><a href="#">총장인사말</a></li>
                <li><a href="#">학교소개</a></li>
                <li><a href="#">홍보관</a></li>
                <li><a href="#">캠퍼스안내</a></li>
            </ul>
        </li>
        <li><a href="#">입학안내</a>
            <ul class="submenu">
                <li><a href="#">수시모집</a></li>
                <li><a href="#">정시모집</a></li>
                <li><a href="#">편입학</a></li>
                <li><a href="#">재외국민</a></li>
            </ul>
        </li>
        <li><a href="#">정보서비스</a>
            <ul class="submenu">
                <li><a href="#">대학정보알림</a></li>
                <li><a href="#">정보공개</a></li>
                <li><a href="#">정보서비스안내</a></li>
            </ul>
        </li>
        <li><a href="#">커뮤니티</a>
            <ul class="submenu">
                <li><a href="#">공지사항</a></li>
                <li><a href="#">참여개시판</a></li>
                <li><a href="#">자료실</a></li>
            </ul>
        </li>
    </ul>
</nav>
  $(".nav > ul > li").mouseover(function(){
    $(".nav > ul > li > ul").stop().fadeIn(400);
    $("#header .container").addClass("on");
})
$(".nav > ul > li").mouseout(function(){
    $(".nav > ul > li > ul").stop().fadeOut(100);
    $("#header .container").removeClass("on");
})
#header .container::after {
    content: '';
    width: 100%;
    height: 0px;
    background-color: rgba(0,0,0,0.8);
    position: absolute;
    left: 0;
    top: 100px;
    z-index: -1;
}
#header .container.on::after {
    height: 160px;
}
#header .container .logo {
    width: 20%;
    padding: 30px 0;
}
#header .container .nav {
    width: 80%;
    text-align: right;
}
#header .container .nav > ul {
    display: flex;
    justify-content: right;
}
#header .container .nav > ul > li {
    position: relative;
}
#header .container .nav > ul > li > a {
    display: block;
    padding: 15px 40px;
    background-color: #FFE194;
}
#header .container .nav > ul > li > a:hover {
    background-color: #FFD66F;
}
#header .container .nav > ul > li > ul {
    display: none;
    position: absolute;
    left: 0;
    top: 50px;
    text-align: center;
    width: 100%;
}
#header .container .nav > ul > li > ul > li > a {
    padding: 10px;
    box-sizing: border-box;
    display: inline-block;
    width: 100%;
    text-align: center;
    color: #fff;
}
#header .container .nav > ul > li > ul > li > a:hover {
    background-color: #D9B352;
}

- 탭메뉴 부분입니다.

- 리스트 안에 리스트가 또 들어가 있는 부분인 것이죠

- 마우스가 들어가면 탭메뉴가 보임과 동시에 헤드에 있는 컨테이너에 on이라는 클라스가 붙습니다.

- 그 온이라는 클라스가 붙으면 색이 내려오는 효과를 주어 마치 전체가 내려오는 듯한 느낌을 주었습니다.

 

- 스크립트는 Jquery로 짰습니다.

- 익숙하지는 않지만 확실히 javascript보다는 편한 느낌입니다.

- 요즘엔 리액트를 배우고 있고 NextJs도 배울 예정입니다.

- 소소한 희망사항은 끝까지 다 배울 수 있으면 좋겠네요 

- 끝!