<!DOCTYPE html>
<html lang="en">
<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>Document</title>
<style>
*{margin: 0;padding: 0;font: inherit;color: inherit;list-style: none;}
.menu{
position: fixed;
top: 0;left: -100%;
width: 100%;
height: 100%;
background: #ccc;
transition: .3s;
}
.menu.on{
left: 0;
}
</style>
</head>
<body>
<a href="" class="btn1">메뉴버튼</a>
<button class="btn2">메뉴버튼</button>
<div class="menu">
<a href="" class="close">닫기버튼</a>
</div>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<script>
$(function(){//문서 로드후 실행 최후실행 1번만,,
// $(".btn2").click(function(){
// $('.menu').addClass('on');
// })
//a태그한테는 event를 줘야한다.
$('.btn1').click(function(e){//e
e.preventDefault();
$('.menu').addClass('on');
})
$('.close').click(function(e){//e
e.preventDefault();
$('.menu').removeClass('on');
})
})//지우지 마세요.
</script>
</body>
</html>
- .stop()을 써줘야 슬라이드 한번만 된다
- 내가 선택한 대메뉴만 반응하게 하고싶다면 this 쓰기
$(this).children('.sub-list').stop().slideDown();
<main>안녕하세요</main> 추가되었을때 대메뉴 누르면 안녕하세요가 밀리면서 이상한 모양이 되기 때문에 .sub-list를 position: absolute; 처리해준다.
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
<style>
*{margin: 0;padding: 0;font: inherit;color: inherit;list-style: none;}
.nav-list{
position: relative;
display: flex;
text-align: center;
}
.nav-item{
/* position: relative; */
flex: 1;
}
.nav-item a{
background: #ccc;
display: block;
line-height: 50px;
}
.nav-item .nav{
background: #000;
color: #fff;
}
.sub-list{
display: none;
position: absolute;
width: 100%;
left: 0;
}
/* nav-list에 기준주고 sub-list left:0주면 전체슬라이드가 된다. */
</style>
</head>
<body>
<ul class="nav-list">
<li class="nav-item">
<a href="" class="nav">대메뉴</a>
<ul class="sub-list">
<li><a href="">서브1</a></li>
<li><a href="">서브1</a></li>
<li><a href="">서브1</a></li>
<li><a href="">서브1</a></li>
</ul>
</li>
<li class="nav-item">
<a href="" class="nav">대메뉴</a>
<ul class="sub-list">
<li><a href="">서브2</a></li>
<li><a href="">서브2</a></li>
<li><a href="">서브2</a></li>
<li><a href="">서브2</a></li>
</ul>
</li>
<li class="nav-item">
<a href="" class="nav">대메뉴</a>
<ul class="sub-list">
<li><a href="">서브3</a></li>
<li><a href="">서브3</a></li>
<li><a href="">서브3</a></li>
<li><a href="">서브3</a></li>
</ul>
</li>
</ul>
<main>안녕하세요</main>
<!-- <main>안녕하세요</main> 추가되었을때 대메뉴 누르면
안녕하세요가 밀리면서 이상한 모양이 되기 때문에 .sub-list를 position: absolute; 처리해준다.-->
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<script>
$(function(){//문서 로드후 실행 최후실행 1번만,,
//.stop()을 써줘야 슬라이드 한번만 된다
$('.nav-item').hover(function(){
//전체 대메뉴 슬라이드
// $('.sub-list').stop().slideDown();
//내가 선택한 대메뉴만 반응하게 하고싶다면 this 쓰기
$(this).children('.sub-list').stop().slideDown();
},function(){
$('.sub-list').stop().slideUp();
})
})//지우지 마세요.
</script>
</body>
</html>
- a태그 링크이동 없애기 -event 사용,
e.preventDefault();
- 나를 제외한 형제 작동 안하게 하기.
$(this).addClass('active').siblings().removeClass('active');
+ 아무거나 눌러도 qna에 active는 들어가고 나머지 형제들은 빠지는 무조건 내용3만 나옴
// $('#qna').addClass('active').siblings().removeClass('active')- 내가 선택한 속성 가져오기 attr!
target = $(this).attr('href'); $(target).addClass('active').siblings().removeClass('active') console.log(target); -확인용
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
<style>
* {
margin: 0;
padding: 0;
font: inherit;
color: inherit;
list-style: none;
}
.tab-nav {
display: flex;
}
.tab-nav a {
flex: 1;
text-align: center;
line-height: 50px;
background: #ccc;
}
.tab-nav .active {
background: #000;
color: #fff;
}
.tab-con {}
.tab-con div {
display: none;
}
.tab-con .active {
display: block;
font-size: 100px;
}
</style>
</head>
<body>
<!-- 여중,여고 -->
<div class="tab-nav">
<a href="#detail" class="active">디테일</a>
<a href="#review">리뷰(21)</a>
<a href="#qna">문의(123)</a>
</div>
<!-- 남중,남고 -->
<div class="tab-con">
<div id="detail" class="active">내용1</div>
<div id="review">내용2</div>
<div id="qna">내용3</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<script>
$(function () { //문서 로드후 실행 최후실행 1번만,,
//css에서 접점을 확실히 만들어 준 후 스크립트 작업
//a태그 링크이동 없애기 -event 사용, e.preventDefault();
$('.tab-nav a').click(function (e) {
e.preventDefault();
//3.내가 선택한 속성 가져오기 ****
target = $(this).attr('href');
$(target).addClass('active').siblings().removeClass('active')
console.log(target);
//1.나를 제외한 형제들은 active가 빠지게 된다
$(this).addClass('active').siblings().removeClass('active');
//2.아무거나 눌러도 qna에 active는 들어가고 나머지 형제들은 빠지는 무조건 내용3만 나옴
// $('#qna').addClass('active').siblings().removeClass('active')
})
}) //지우지 마세요.
</script>
</body>
</html>
$('.tab-nav a').click(function (e) {
e.preventDefault();
$(this).addClass('active').siblings().removeClass('active');
$($(this).attr('href')).addClass('active').siblings().removeClass('active');
});
[es6]버전으로도 변경이 가능하다.
1. 대메뉴1 눌렀다 대메뉴 2 누르면 대메뉴1은 닫히는 버전
$('.nav').removeClass('on').siblings('.sub-list').slideUp();
$('.nav').click(function (e) { e.preventDefault(); if ($(this).hasClass('on')) { $(this).removeClass('on').siblings('.sub-list').slideUp(); } else { //닫히는 소스 `$('.nav').removeClass('on').siblings('.sub-list').slideUp();` $(this).addClass('on').siblings('.sub-list').slideDown(); }
})
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
<style>
* {
margin: 0;
padding: 0;
font: inherit;
color: inherit;
list-style: none;
}
.nav-item a {
display: block;
background: pink;
line-height: 50px;
text-align: center;
}
.nav-item .nav {
background: #000;
color: pink;
}
.nav-item .nav.on {
color: #f00;
}
.sub-list {
display: none;
}
</style>
</head>
<body>
<ul class="nav-list">
<li class="nav-item">
<a href="" class="nav">대메뉴</a>
<ul class="sub-list">
<li><a href="">서브1</a></li>
<li><a href="">서브1</a></li>
<li><a href="">서브1</a></li>
<li><a href="">서브1</a></li>
</ul>
</li>
<li class="nav-item">
<a href="" class="nav">대메뉴</a>
<ul class="sub-list">
<li><a href="">서브2</a></li>
<li><a href="">서브2</a></li>
<li><a href="">서브2</a></li>
<li><a href="">서브2</a></li>
</ul>
</li>
<li class="nav-item">
<a href="" class="nav">대메뉴</a>
<ul class="sub-list">
<li><a href="">서브3</a></li>
<li><a href="">서브3</a></li>
<li><a href="">서브3</a></li>
<li><a href="">서브3</a></li>
</ul>
</li>
</ul>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<script>
$(function () { //문서 로드후 실행 최후실행 1번만,,
//***이지모드
// $('.nav').click(function(e){
// e.preventDefault();
// //열렸다 닫혔다 on넣었다 빠졌다
// $(this).toggleClass('on');
// //열리기만하게하는 안다르방식
// $(this).siblings('.sub-list').slideToggle();
// })
//***이지모드를 좀 더 풀어쓴 ver - 장점 -> 소스를 더 넣을 수 있음.
// $('.nav').click(function (e) {
// e.preventDefault();
// if ($(this).hasClass('on')) {
// // $(this).removeClass('on');
// // $(this).siblings('.sub-list').slideUp(); 더 줄이면
// $(this).removeClass('on').siblings('.sub-list').slideUp();
// } else {
// // $(this).addClass('on');
// // $(this).siblings('.sub-list').slideDown(); 더 줄이면
// $(this).addClass('on').siblings('.sub-list').slideDown();
// }
// })
//대메뉴1 눌렀다 대메뉴 2 누르면 대메뉴1은 닫히는 버전
$('.nav').click(function (e) {
e.preventDefault();
if ($(this).hasClass('on')) {
$(this).removeClass('on').siblings('.sub-list').slideUp();
} else {
//닫히는 소스
$('.nav').removeClass('on').siblings('.sub-list').slideUp();
$(this).addClass('on').siblings('.sub-list').slideDown();
}
})
}) //지우지 마세요.
</script>
</body>
</html>