웹접근성 카테고리 하위 메뉴

by hohoya33

HTML

<div tabindex="0">

<ul class="ctg_mall_lst" role="navigation" aria-label="SSG 통합카테고리">
	<li class="ctg_top_mn">
		<a href="http://www.ssg.com" aria-label="SSG.COM 바로가기" class="ctg_top_lnk">SSG.COM</a>
		<button aria-expanded="false" class="ctg_a11y_btn"><span class="blind">SSG.COM 하위 메뉴 3개의 항목</span></button>


    <div class=" ctg_sub_area" aria-hidden="true">
      <ul class="ctg_sub_lst" role="menu">
         <li class="ctg_sub_mn">
          <a role="menuitem" aria-label="패션 바로가기" href="#" class="ctg_sub_lnk">패션</a>
          <button aria-expanded="false" class="ctg_a11y_btn"><span class="blind">패션 하위 메뉴</span></button>
         </li>
         <li class="ctg_sub_mn">
          <a role="menuitem" aria-label="잡화 바로가기" href="#" class="ctg_sub_lnk">잡화</a>
          <button aria-expanded="false" class="ctg_a11y_btn"><span class="blind">잡화 하위 메뉴</span></button>
         </li>
         <li class="ctg_sub_mn">
          <a role="menuitem" href="#" aria-label="뷰티 바로가기" class="ctg_sub_lnk">뷰티</a>
         </li>
      </ul>
    </div>


	</li>
  <li class="ctg_top_mn">
		<a href="http://shinsegaemall.ssg.com/" aria-label="신세계몰 바로가기" class="ctg_top_lnk">신세계몰</a>
		<button aria-expanded="false" class="ctg_a11y_btn"><span class="blind">신세계몰 하위 메뉴 3개의 항목</span></button>
    
        <div class="ctg_sub_area" aria-hidden="true">
      <ul class="ctg_sub_lst" role="menu">
         <li class="ctg_sub_mn">
          <a role="menuitem" aria-label="여성패션 바로가기" href="#" class="ctg_sub_lnk">여성패션</a>
          <button aria-expanded="false" class="ctg_a11y_btn"><span class="blind">여성패션 하위 메뉴</span></button>
         </li>
         <li class="ctg_sub_mn">
          <a role="menuitem" aria-label="남성/캐주얼 바로가기" href="#" class="ctg_sub_lnk">남성/캐주얼</a>
          <button aria-expanded="false" class="ctg_a11y_btn"><span class="blind">남성/캐주얼 하위 메뉴</span></button>
         </li>
         <li class="ctg_sub_mn">
          <a role="menuitem" aria-label="패션잡화 바로가기" href="#"...

CSS

:focus{outline:4px solid #FF0000}
body{color:#fff;background:#282c34}
.blind{overflow:hidden;position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;line-height:0;white-space:normal;word-wrap:break-word;word-break:break-all;clip:rect(0,0,0,0)}
.blind:before{display:block;width:0;height:0;font-size:0;content:'\00a0'}
ul li{list-style:none}

.ctg_mall_lst{position:relative}

.ctg_top_mn{width:170px;height:46px;border-top: 1px dotted #d8d8d8;background:#fff}
.ctg_top_mn a{overflow:hidden;text-overflow:ellipsis;word-break:break-all;white-space:nowrap;text-decoration:none}
.ctg_top_lnk{display:block;height:20px;line-height:20px;padding:12px 20px;color:#777;letter-spacing:-.3px}
.ctg_top_lnk:focus{color:#222}


.ctg_a11y_btn{display:none;position:relative;z-index:10;float:right;width:20px;height:25px;overflow:hidden;margin-top:-25px;background:transparent}
.ctg_a11y_btn:after{content:'';display:inline-block;width:4px;height:4px;border-top:1px solid #888;border-right:1px solid #888;transform:rotate(45deg)}
.ctg_top_mn>.ctg_a11y_btn{height:45px;margin-top:-45px}



.ctg_sub_area{display:none;position:absolute;top:0;bottom:0;left:210px;border:1px solid #d1d1d1;background:#fff}
.ctg_sub_lst{width:140px;padding:0}
.ctg_sub_lnk{display:block;margin-left:10px;padding:1px 10px 0 10px;line-height:23px;border:1px solid transparent;color:#777;font-size:13px;letter-spacing:-.3px}
.ctg_sub_mn.on>.ctg_sub_lnk,.ctg_sub_mn>.ctg_sub_lnk:focus{color:#222;font-family:NanumBarunGothicBold}
.ctg_sub_mn.ctg_sub_child.on>.ctg_sub_lnk{position:relative;z-index:110;border-color:#d8d8d8;border-right-color:#fff}

.ctg_top_mn.on .ctg_sub_area{display:block}

JavaScript

$('.ctg_mall_lst').on('click', '.ctg_a11y_btn', function(e){
  var welTarget = $(e.currentTarget);
  var welParentList = welTarget.parent();

  if (welTarget.hasClass('on')) {
    welTarget.removeClass('on').attr('aria-expanded', 'false');
    welParentList.removeClass('on');
    welParentList.find('>.ctg_sub_area').attr('aria-hidden', 'true');
  } else {
    welParentList.siblings().find('.ctg_a11y_btn').removeClass('on').attr('aria-expanded', 'false').hide();
    welTarget.addClass('on').attr('aria-expanded', 'true');
    welParentList.addClass('on').siblings().removeClass('on');
    welParentList.find('>.ctg_sub_area').attr('aria-hidden', 'false');
  }
  
 
  
}).on('focusin', '.ctg_top_mn, .ctg_sub_mn', function(e){
  var welTarget = $(e.currentTarget);
  welTarget.find('>.ctg_a11y_btn').show();
  welTarget.siblings(':not(.on)').find('>.ctg_a11y_btn').hide();
  welTarget.siblings().find('li:not(.on) .ctg_a11y_btn').hide();
  
}).on('mouseenter', '.ctg_top_mn', function(e){
  var welTarget = $(e.currentTarget);
  welTarget.addClass('on').siblings().removeClass('on');
  
}).on('mouseleave', '.ctg_top_mn', function(e){
  var welTarget = $(e.currentTarget);
  welTarget.removeClass('on');
});