-
카테고리
-
세부 분야
웹 개발
-
해결 여부
미해결
JavaScript & jQuery - 푸터 패밀리사이트 셀렉트 커스텀 스타일(2)
23.06.30 15:06 작성 조회수 304
1
■ 질문 남기실 때 꼭! 참고해주세요.
- 먼저 유사한 질문이 있었는지 검색해주세요.
- 궁금한 부분이 있으시면 해당 강의의 타임라인 부분을 표시해주시면 좋습니다.
- HTML, CSS, JQUERY 코드 소스를 텍스트 형태로 첨부해주시고 스크린샷도 첨부해주세요.
- 다운로드가 필요한 파일은 해당 강의의 마지막 섹션에 모두 있습니다.
해당 강의 응용하다 막히는 부분이 있어 질문 드립니다.
이 강의에 부분을 메뉴에서도 활용 할 수 있을것 같아 아래와 같이 만들어 보았습니다.
HTML
<header>
<div class="gnb">
<div class="search_menu">
<div class="dropdown">
<div class="nav1 title">MENU1-1</div>
<ul class="sub_nav1 sub_nav">
<li><a href="#none">MENUI1-1</a></li>
<li><a href="#none">MENUI1-2</a></li>
<li><a href="#none">MENUI1-3</a></li>
<li><a href="#none">MENUI1-4</a></li>
</ul>
</div>
<div class="dropdown">
<div class="nav2 title">MENU2-1</div>
<ul class="sub_nav2 sub_nav">
<li><a href="#none">MENU2-1</a></li>
<li><a href="#none">MENU2-2</a></li>
<li><a href="#none">MENU2-3</a></li>
<li><a href="#none">MENU2-4</a></li>
</ul>
</div>
<div class="dropdown">
<div class="nav3 title">MENU3-1</div>
<ul class="sub_nav3 sub_nav">
<li><a href="#none">MENU3-1</a></li>
<li><a href="#none">MENU3-2</a></li>
<li><a href="#none">MENU3-3</a></li>
<li><a href="#none">MENU3-4</a></li>
</ul>
</div>
</div>
</div>
</header>
CSS
@import url('https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css');
* {
padding: 0;
margin: 0;
list-style: none;
font-size: 10px;
}
a{
text-decoration: none;
}
header .search_menu {
background-color: #9c9388;
display: flex;
}
header .selectbox {
position: relative;
border-right: 1px solid #c9c1b7;
}
header .selectbox:last-child{
border:0;
}
header .selectbox .select{
width: 88px;
height: 35px;
padding:10px 12px;
font-size: 1.2rem;
}
header .selectbox:last-child .select {
width: 100px;
}
.dropdown {
width: 8.4rem;
cursor: pointer;
position: relative;
border-right: 1px solid #c9c1b7;
}
.nav1,
.nav2,
.nav3 { background-size: 9px; background-color: #9c9388; color: #fff; padding: 1.2rem 1rem;}
.nav1::after,
.nav2::after,
.nav3::after{
content: '\f107';
font-family: fontawesome;
position: absolute;
right: 10px;
font-size: 12px;
line-height: 14px;
}
.sub_nav1,
.sub_nav2,
.sub_nav3 {
position: absolute;
list-style: none;
padding:0;
margin: 0;
left: 0;
top:100%;
width: 100%;
display: none;
z-index: 100;
}
.sub_nav1 li a,
.sub_nav2 li a,
.sub_nav3 li a {
color: #fff;
display: block;
padding: 7px;
background: #9c9388;
border-bottom: 1px solid #aaa;
}
.sub_nav1 li a:last-child,
.sub_nav2 li a:last-child,
.sub_nav3 li a:last-child {
border: none;
}
JS 1 (정상작동) (개별적으로 class를 모두 지정하였습니다.)
$('.menu li').click(function(){
$(this).children('.sub_menu').slideDown()
})
$('.menu li').click(function(){
$(this).children('.sub_menu').slideUp()
})
$('.nav1').click(function(){
$('.sub_nav1').stop().slideToggle()
$('.sub_nav2').stop().slideUp()
$('.sub_nav3').stop().slideUp()
$(this).find('>ul').toggle()
})
$('.sub_nav1 li').click(function(){
$(this).parent().stop().slideUp()
$('.nav1').text($(this).text())
})
$('.nav2').click(function(){
$('.sub_nav2').stop().slideToggle()
$('.sub_nav1').stop().slideUp()
$('.sub_nav3').stop().slideUp()
// $(this).find('>ul').toggle()
})
$('.sub_nav2 li').click(function(){
$(this).parent().stop().slideUp()
$('.nav2').text($(this).text())
})
$('.nav3').click(function(){
$('.sub_nav3').stop().slideToggle()
$('.sub_nav1').stop().slideUp()
$('.sub_nav2').stop().slideUp()
// $(this).find('>ul').toggle()
})
$('.sub_nav3 li').click(function(){
$(this).parent().stop().slideUp()
$('.nav3').text($(this).text())
})
JS 2 (문제의 JS) (JS1와 같은 매커니즘 코드를 줄여 작성했습니다.)
//메뉴 토글
$('.title').click(function(){
$(this).siblings('.sub_nav').slideUp()
$(this).next().stop().slideToggle()
})
//메뉴 text 변경
$('.sub_nav li').click(function(){
$(this).parent().stop().slideUp()
$(this).parent().siblings('.title').text($(this).text())
})
이렇게 만들어서 메뉴1-1을 누르면 2-1과 3-1 이 들어가야하는데
3개가 모두 개별적으로 펼쳐집니다.
JS 1 처럼 class를 모두 직접 지정하면 정상적으로 되는데 너무 코드가 지저분해서 간단하게 지정을 하려고 작동을 확인 한 뒤 JS 2를 만들었는데 메뉴 text 변경 되는건 잘 되는데 메뉴 토글에서 막혔습니다.
$(this).siblings('.sub_nav').slideUp()
이 부분이 잘못된것 같은데 아무리 고쳐보고 검색해봐도 작동이 되지 않아 이렇게 여쭤 봅니다.
답변을 작성해보세요.
0
코딩웍스(Coding Works)
지식공유자2023.07.03
질문 올라온걸 늦게 봤네요.
구현하고자 하는 기능에 비해 제이쿼리 코드가 너무 많습니다.
아래처럼 하시면 충분히 기능 구현할 수 있습니다.
kio4545
질문자2023.07.03
아 선생님이 올려주신 코드를 보니까 제가 계층구조를 잘못 이해해서 코드를 이상하게 짠걸 확인했습니다. 감사합니다.
여기서 하나만 질문 더 드리면 원래 다른 코드에서는 토글 다음에 슬라이드 업이 되면 토글이 눌리면서 바로 ul이 슬라이드 업이 되어서 아래처럼 slideup을 올려줘야 하지 않았나요?
$('.dropdown .title').click(function(){
$(this).parent().siblings().children('ul').slideUp()
$(this).next().stop().slideToggle();
})
이 코드에선 선생님이 알려주신 방법과 slideup을 slideToogle 위로 보낸 위 코드 두 가지를 해도 둘다 문제가 없이 잘 열리도 닫히네요?
0
인프런 AI 인턴
2023.07.02
안녕하세요, 인프런 AI 인턴이에요.
질문 주신 내용을 보면, 푸터 패밀리사이트 셀렉트 커스텀 스타일에 관한 질문인 것 같아요.
질문 내용에는 HTML 코드가 일부만 포함되어 있는 상태인데, 코드가 잘려서 올라온 건가요? 더 자세한 설명이 필요하신 건가요? 정확한 도움을 드리기 위해서는 문제점이 무엇인지 자세히 알아야할 것 같아요.
코드의 일부를 올려주신다면, 더 정확한 답변을 드릴 수 있을 거예요. 추가로 스크린샷이나 문제 상황을 더 자세히 알려주시면 도움이 될 것 같아요.
코드와 관련된 질문이 있다면, 코드를 완성해 주시고 어떤 문제가 발생하는지 자세히 설명해주시면 더 정확한 답변을 드릴 수 있을 거예요.
더 자세한 내용이 있다면 알려주세요. 도움이 필요하신 부분이 있으면 언제든지 물어보세요. 좋은 결과 얻을 수 있도록 도와드리겠습니다.
답변 2