【问题标题】:Dropdown menu links show on Focus下拉菜单链接显示在焦点上
【发布时间】:2017-10-19 15:45:48
【问题描述】:

当使用键盘切换时,似乎无法显示(焦点)下拉链接。尝试了几种不同的风格,但没有运气。任何帮助将不胜感激。

body {
	  background: #005bbb;
	  font: 14px Sofia,Arial,sans-serif;
    color: #444;
    height: 100%;
    line-height: 1;}

.nav-global a {text-decoration: none}

.nav-global ul li {
    color: #005bbb;
    float: left; 
	display: inline; 
	position: relative; 
	margin: 0;
	width: 235px}
	
.nav-global ul li:hover {
	background-color: #003e51;}

	
/* style the first level slightly different */

.nav-global > ul > li {
	margin: 0;
	width: auto;
	background: #fff;
	color: #005bbb}

.nav-global ul li a {
	color: #005bbb;
	padding: 12px 16px 14px 16px;
	display: block; 
	font: 15px Sofia Bold, "Trebuchet MS", sans-serif;}
	
.nav-global ul li a:hover {
	color: #fff}
	
.nav-global > ul > li > a {}

.nav-global li:hover > a  {color: #fff}	
	
		
/* ----------------------------------------------- secondary nav ----------------------------------------------- */




.nav-global ul li ul {
	position: absolute;
	max-height: 0; 
	overflow: hidden; 
	margin: 0; 
	opacity: 0;}

.nav-global ul li:hover > ul {
	max-height: 1000px; 
	overflow: visible; 
	opacity: 1;}
	
.nav-global ul li ul li {
	background-color: #003e51;}
	
.nav-global ul li ul li a {
	color: #fff;
	font: 13px Sofia, "Trebuchet MS", sans-serif;
	padding: 0;
	line-height: 30px;
	text-indent: 15px;}


.nav-global ul li ul li a:hover {
	background: #002935;}

.nav-global ul li ul li:first-child {
	padding-top: 10px}

.nav-global ul li ul li:last-child {
	padding-bottom: 10px}
.
<div class="nav-main">
<nav class="nav-global">

    <ul>
	    <li><a href="/findmaterials" class="find">Find Materials</a>
    	
      <ul>
    		<li><a href="/findmaterials/everything">Everything</a></li>
			<li><a href="http://catalog.lib.buffalo.edu/">Catalog</a></li>
			<li><a href="/findmaterials/databases">Databases</a></li>
			<li><a href="/findmaterials/ebooks">E-Books</a></li>
			<li><a href="http://ll3md4hy6n.search.serialssolutions.com">E-Journals</a></li>
			<li><a href="/reserve">Course Reserve</a></li>
			<li><a href="/off-campus">Off Campus Access</a></li>
    	</ul>
    </li>
          </ul>
   
   
   
   </nav>
    </div>
 =

我尝试将这样的代码用于“聚焦”,但不起作用:

.nav-global ul li:focus > ul {
max-height: 1000px; 
overflow: visible; 
opacity: 1;}

【问题讨论】:

  • 请尝试创建Minimal, Complete and Verifiable example。仅仅链接到您的网站是不够的。
  • 这不是我的网站。只是导航本身。没有别的了。
  • 明白,但您仍然应该能够生成一个最小示例并提供代码,以便其他人可以帮助您。
  • 我把它放到了 JSFiddle 中。
  • 首先,li 本身不能成为焦点元素——你需要给它一个 tabindex,它才能获得焦点。其次,:focus 不适合显示子导航 - 因为只要用户点击子导航内的第一个链接,li 就会松开焦点。您真正想要的是:focus-within - 但请注意浏览器支持。 developer.mozilla.org/en-US/docs/Web/CSS/:focus-within, caniuse.com/#feat=css-focus-within 长话短说,如果你现在想要体面的浏览器支持 - 你想要一个 JavaScript 解决方案。

标签: html css


【解决方案1】:

tabindex="0" 添加到nav-global:focus 选择器将起作用。在下面的代码 sn-p 中,我应用了此更改并将所有子菜单链接添加到 tabindex 订单。参考this technique for WCAG 2.0

请注意,一旦您使用 tab 键打开菜单,您的下一个选项卡将关闭菜单,因为 nav-global 失去焦点,如对您问题的评论所示。如果鼠标悬停在菜单上,它将保持打开状态,您可以键入 TAB 以查看tabindex 中的每个链接如何获得焦点。

我建议使用 javascript 控制菜单可见性,这样您就不必依赖 css 来维持其状态。 Js 可以让你更好地控制用户体验。例如,添加一个键处理程序以在键入 ESC 时关闭菜单。

代码如下:

body {
  background: #005bbb;
  font: 14px Sofia, Arial, sans-serif;
  color: #444;
  height: 100%;
  line-height: 1;
}

.nav-global a {
  text-decoration: none
}

.nav-global ul li {
  color: #005bbb;
  float: left;
  display: inline;
  position: relative;
  margin: 0;
  width: 235px
}

.nav-global ul li:hover {
  background-color: #003e51;
}


/* style the first level slightly different */

.nav-global>ul>li {
  margin: 0;
  width: auto;
  background: #fff;
  color: #005bbb
}

.nav-global ul li a {
  color: #005bbb;
  padding: 12px 16px 14px 16px;
  display: block;
  font: 15px Sofia Bold, "Trebuchet MS", sans-serif;
}

.nav-global ul li a:hover {
  color: #fff
}

.nav-global>ul>li>a {}

.nav-global li:hover>a {
  color: #fff
}


/* ----------------------------------------------- secondary nav ----------------------------------------------- */

.nav-global:focus>ul>li>ul {
  max-height: 1000px;
  overflow: visible;
  opacity: 1;
}

.nav-global>ul>li:focus>ul {
  max-height: 1000px;
  overflow: visible;
  opacity: 1;
}

.nav-global:focus>ul>li {
  background-color: #003e51;
}

.nav-global:focus>ul>li>a {
  color: white;
}

.nav-global ul li ul {
  position: absolute;
  max-height: 0;
  overflow: hidden;
  margin: 0;
  opacity: 0;
}

.nav-global ul li:hover>ul {
  max-height: 1000px;
  overflow: visible;
  opacity: 1;
}

.nav-global ul li ul li {
  background-color: #003e51;
}

.nav-global ul li ul li a {
  color: #fff;
  font: 13px Sofia, "Trebuchet MS", sans-serif;
  padding: 0;
  line-height: 30px;
  text-indent: 15px;
}

.nav-global ul li ul li a:hover {
  background: #002935;
}

.nav-global ul li ul li:first-child {
  padding-top: 10px
}

.nav-global ul li ul li:last-child {
  padding-bottom: 10px
}

.
<div class="nav-main">
  <nav class="nav-global" tabindex="0">

    <ul>
      <li>
        <a href="/findmaterials" class="find" tabindex="-1">Find Materials</a>

        <ul>
          <li><a href="/findmaterials/everything" tabindex="0">Everything</a></li>
          <li><a href="http://catalog.lib.buffalo.edu/" tabindex="0">Catalog</a></li>
          <li><a href="/findmaterials/databases" tabindex="0">Databases</a></li>
          <li><a href="/findmaterials/ebooks" tabindex="0">E-Books</a></li>
          <li><a href="http://ll3md4hy6n.search.serialssolutions.com" tabindex="0">E-Journals</a></li>
          <li><a href="/reserve" tabindex="0">Course Reserve</a></li>
          <li><a href="/off-campus" tabindex="0">Off Campus Access</a></li>
        </ul>
      </li>
    </ul>



  </nav>
</div>

【讨论】:

  • 这是我试图让导航执行的操作:youtu.be/hDl-3JA8mJ0 我需要能够对下拉列表中的所有链接进行标签。好像这是使用javascript。谢谢您的帮助。我会继续努力的。
  • 相信你需要一个js解决方案。按照您的方式构建菜单,并使用tabindex="0" 将您的菜单项包含在tabindex 顺序中。您可以使用onmouseoveronfocus 打开菜单。除非采取特定操作,否则请保持菜单打开,例如选择菜单项时,键入ESC时,当用户单击菜单外部时。由于 tabindex 项目在 DOM 中是按顺序排列的,因此菜单应该像在视频中一样工作。用js创建菜单,请参考https://www.w3schools.com/howto/howto_js_dropdown.asp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
相关资源
最近更新 更多