2023웹디 기능사 실기문제를 만들어볼거에요
사이즈를 정해놓구 만들어서 깨졌지만 이해 부탁드려요 '~'
요렇게 만들어졌구요
요 레이아웃을 보구 만들었어요
html부분
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>산업대학교</title>
<link rel="stylesheet" href="css/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="script/script.js"></script>
</head>
<body>
<div class="wrap">
<header id="header">
<div class="container">
<h1 class="logo"><a href="#">산업대학교</a></h1>
<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>
</div>
</header>
<!-- header -->
<aside id="slider">
<div class="container">
<div class="sliderWrap">
<div class="slider s1">
<img src="image/slider01.jpg" alt="미래를 이끄는 열정">
<div class="text">
<h2>미래를 이끄는 <strong>열정</strong></h2>
<p>산업대학교</p>
</div>
</div>
<div class="slider s2">
<img src="image/slider02.jpg" alt="미래를 이끄는 열정">
<div class="text">
<h2>미래를 이끄는 <strong>열정</strong></h2>
<p>산업대학교</p>
</div>
</div>
<div class="slider s3">
<img src="image/slider03.jpg" alt="미래를 이끄는 열정">
<div class="text">
<h2>미래를 이끄는 <strong>열정</strong></h2>
<p>산업대학교</p>
</div>
</div>
</div>
</div>
</aside>
<!-- slider -->
<main id="main">
<div class="container">
<section class="notice">
<h3>공지사항</h3>
<ul>
<li><a href="#">2023년 신입생 모집중</a><span>2023.05.01</span></li>
<li><a href="#">융합전공멘토링 학생 모집</a><span>2023.05.02</span></li>
<li><a href="#">학과 및 학년 별 참여</a><span>2023.05.03</span></li>
<li><a href="#">졸업생 취업박람회</a><span>2023.05.04</span></li>
</ul>
</section>
<!-- notice -->
<section class="gallery">
<h3>우리학교풍경</h3>
<ul>
<li><a href="#"><img src="image/gallery01.jpg" alt="우리학교 풍경"></a></li>
<li><a href="#"><img src="image/gallery03.jpg" alt="우리학교 풍경"></a></li>
<li><a href="#"><img src="image/gallery02.jpg" alt="우리학교 풍경"></a></li>
</ul>
</section>
<!-- gallery -->
<article class="banner">
<h3>산업대학교 <br>2023<br>체육대전</h3>
<a href="#">바로가기</a>
</article>
<!-- banner -->
</div>
</main>
<!-- main -->
<footer id="footer">
<div class="container">
<div class="footer1">
<div class="footer1-1">
<ul>
<li><a href="#">개인정보처리방침</a></li>
<li><a href="#">정보 공개</a></li>
<li><a href="#">홈페이지 운영지침</a></li>
</ul>
</div>
<div class="footer1-2">
15073 경기도 안산시 산기대학로 237 (정왕동) 산업대학교 COPYRIGHT(C) ALL RIGHTS RESERVED.
</div>
</div>
<div class="footer2">
<select name="" id="">
<option >패밀리 사이트</option>
<option value="1">서울 산업대학교</option>
<option value="2">안양 산업대학교</option>
<option value="3">부산 산업대학교</option>
</select>
</div>
</div>
</footer>
<!-- footer -->
</div>
</body>
</html>
css 부분
@charset "UTF-8";
* {
margin: 0;
padding: 0;
color: #333;
}
.wrap{
width: 100%;
}
a {
text-decoration: none;
color: #333;
}
li {
list-style: none;
}
img {
vertical-align: top;
}
/* container */
.container {
width: 1200px;
margin: 0 auto;
height: inherit;
}
/* header */
#header {
width: 100%;
height: 100px;
background-color: #EFEFEF;
position: relative;
z-index: 1000;
}
#header .container {
display: flex;
align-items: end;
position: relative;
}
#header .container::after {
content: '';
width: 100%;
height: 0;
background-color: rgba(0,0,0,0.8);
position: absolute;
left: 0;
top: 100px;
z-index: -1;
transition: all 0.4s;
}
#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 {
position: absolute;
left: 0;
top: 50px;
text-align: center;
width: 100%;
display: none;
}
#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;
}
/* slider */
#slider{
width: 100%;
height: 300px;
background-color: #bbb;
}
#slider .container{
overflow: hidden;
}
#slider .sliderWrap{
display: flex;
width: 4800px;
}
#slider .sliderWrap .slider{
position: relative;
width: 1200px;
}
#slider .sliderWrap .slider img{}
#slider .sliderWrap .slider .text{
position: absolute;
left: 5%;
top: 50%;
transform: translateY(-50%);
background-color: rgba(0, 0, 0, 0.4);
padding: 20px 40px;
}
#slider .sliderWrap .slider .text h2{
font-size: 24px;
color: #fff;
margin-bottom: 4px;
}
#slider .sliderWrap .slider .text h2 strong{
color: aqua;
}
#slider .sliderWrap .slider .text p{
font-size: 16px;
color: #fff;
}
/* main */
#main{
width: 100%;
height: 200px;
background-color: #ccc;
}
#main .container{
display: flex;
}
#main .container .notice{
width: 400px;
padding: 25px 20px;
background-color: #dfc7c7;
}
#main .container .notice h3{
font-size: 24px;
margin-bottom: 10px;
}
#main .container .notice li{
display: flex;
line-height: 1.8;
position: relative;
padding-left: 10px;
}
#main .container .notice li::before{
content: '';
width: 5px;
height: 5px;
background-color: #fff;
position: absolute;
left: 0;
top: 11px;
border-radius: 50%;
}
#main .container .notice li a{
width: 70%;
}
#main .container .notice li a:hover{
text-decoration: underline;
}
#main .container .notice li span{
width: 30%;
/* background-color: #ccc; */
text-align: right;
}
#main .container .gallery{
width: 400px;
padding: 25px 20px;
}
#main .container .gallery h3{
font-size: 24px;
margin-bottom: 10px;
}
#main .container .gallery ul{
display: flex;
}
#main .container .banner{
width: 400px;
background-image: url(../image/banner.jpg);
text-align: center;
position: relative;
}
#main .container .banner h3{
margin-top: 40px;
font-size: 24px;
color: #3a2727;
}
#main .container .banner a{
background-color: rgba(0, 0, 0, 0.1);
color: #fff;
padding: 10px 20px;
display: inline-block;
border-radius: 40px;
}
/* footer */
#footer{
width: 100%;
height: 100px;
background-color: #ddd;
}
#footer .container {
display: flex;
}
#footer .container .footer1 {
width: 80%;
;
}
#footer .container .footer1 .footer1-1 {
width: 100%;
height: 50px;
}
#footer .container .footer1 .footer1-1 li{
display: inline;
border-right: 1px solid #333;
}
#footer .container .footer1 .footer1-1 li:last-child{
border: 0;
}
#footer .container .footer1 .footer1-1 li a{
padding: 15px 10px;
display: inline-block;
}
#footer .container .footer1 .footer1-2 {
width: 100%;
height: 50px;
padding-top: 15px;
box-sizing: border-box;
}
#footer .container .footer2 {
width: 20%;
}
#footer .container .footer2 select{
margin-top: 34px;
width: 100%;
height: 30px;
}
그리고 자바스크립트 부분
$(function(){
//메뉴
$(".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");
});
//슬라이드
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)
});
우선, $를 이용하여 전체 문서가 준비됐을 때 바로 실행되는 함수를 정의합니다. $(function(){...});으로 구현되어 있습니다.
이후 .nav > ul > li와 .sliderWrap, .slider 클래스를 가진 요소를 선택합니다.
.nav > ul > li 클래스를 가진 요소에 마우스 커서를 올리면 하위 요소인 .nav > ul > li > ul 클래스를 가진 요소가 400밀리초 동안 fade-in 되며, #header .container 요소에 on 클래스가 추가됩니다. 마우스 커서를 요소 밖으로 이동하면 다시 100밀리초 동안 fade-out되며 #header .container 요소에서 on 클래스가 제거됩니다.
이후 이미지 슬라이드를 구현하는 코드가 나옵니다. $sliderWrap 요소에 첫 번째 이미지를 복사하여 마지막에 추가합니다. 이렇게 함으로써 마지막 이미지에서 다시 첫 번째 이미지로 이동할 때 자연스럽게 이어지는 효과를 만들 수 있습니다.
setInterval을 이용하여 3초마다 실행되는 함수를 정의합니다. currentIndex 변수는 현재 이미지의 인덱스를 저장하는 역할을 하며, 이 변수는 슬라이드가 움직일 때 마다 1씩 증가합니다. $sliderWrap 요소의 marginLeft 값을 -현재 이미지 인덱스 * 이미지 가로값으로 설정하면 이미지가 왼쪽으로 이동합니다. 마지막 이미지까지 도달하면 다시 첫 번째 이미지로 돌아갑니다. 이때 setTimeout을 이용하여 0.7초 뒤에 marginLeft 값을 0으로 설정하고, currentIndex 값을 0으로 초기화합니다. 이렇게 함으로써 마지막 이미지와 첫 번째 이미지가 자연스럽게 이어지는 효과를 만들 수 있습니다.
포인트 !
html을 먼저 만들고
css로 슬라이드가 보여질 화면과 sub메뉴를 완성시킨뒤
script를 작업해야 에러잡기도 쉽고 코드 짜기도 쉬워요 !