• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

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()

이 부분이 잘못된것 같은데 아무리 고쳐보고 검색해봐도 작동이 되지 않아 이렇게 여쭤 봅니다.

답변 2

·

답변을 작성해보세요.

0

질문 올라온걸 늦게 봤네요.

구현하고자 하는 기능에 비해 제이쿼리 코드가 너무 많습니다.

아래처럼 하시면 충분히 기능 구현할 수 있습니다.

image

kio4545님의 프로필

kio4545

질문자

2023.07.03

아 선생님이 올려주신 코드를 보니까 제가 계층구조를 잘못 이해해서 코드를 이상하게 짠걸 확인했습니다. 감사합니다.

여기서 하나만 질문 더 드리면 원래 다른 코드에서는 토글 다음에 슬라이드 업이 되면 토글이 눌리면서 바로 ul이 슬라이드 업이 되어서 아래처럼 slideup을 올려줘야 하지 않았나요?

$('.dropdown .title').click(function(){
    $(this).parent().siblings().children('ul').slideUp()  
    $(this).next().stop().slideToggle();
})

이 코드에선 선생님이 알려주신 방법과 slideup을 slideToogle 위로 보낸 위 코드 두 가지를 해도 둘다 문제가 없이 잘 열리도 닫히네요?

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.02

안녕하세요, 인프런 AI 인턴이에요.

질문 주신 내용을 보면, 푸터 패밀리사이트 셀렉트 커스텀 스타일에 관한 질문인 것 같아요.
질문 내용에는 HTML 코드가 일부만 포함되어 있는 상태인데, 코드가 잘려서 올라온 건가요? 더 자세한 설명이 필요하신 건가요? 정확한 도움을 드리기 위해서는 문제점이 무엇인지 자세히 알아야할 것 같아요.

코드의 일부를 올려주신다면, 더 정확한 답변을 드릴 수 있을 거예요. 추가로 스크린샷이나 문제 상황을 더 자세히 알려주시면 도움이 될 것 같아요.

코드와 관련된 질문이 있다면, 코드를 완성해 주시고 어떤 문제가 발생하는지 자세히 설명해주시면 더 정확한 답변을 드릴 수 있을 거예요.

더 자세한 내용이 있다면 알려주세요. 도움이 필요하신 부분이 있으면 언제든지 물어보세요. 좋은 결과 얻을 수 있도록 도와드리겠습니다.