我正在创建一个不使用JavaScript的CSS下拉菜单,经过研究我发现了这段代码 http://jsfiddle.net/zsp7t/1/
<div class="dropdown" id="dropdown">
<input type="checkbox" id="drop1" />
<label for="drop1" class="dropdown_button">
<img src="http://ichef.bbci.co.uk/wwfeatures/43_43/images/live/p0/17/tx/p017txf6.jpg" height="43" width="43" /><span id="arrowSpan" class="arrow"></span>
</label>
<ul class="dropdown_content">
<li><a href="#">Privacy settings</a>
</li>
<li><a href="#">Account settings</a>
</li>
<li><a href="#">Logout</a>
</li>
</ul>
</div>
这是CSS
body {
background-color: white;
font: normal 11px Tahoma, Verdana, Arial, Sans-Serif;
color: #222;
height: 380px;
}
#arrowSpan{
display:block;
margin-left:17px;
margin-top:2px;
margin-bottom:5px;
}
.dropdown {
display: block;
display: inline-block;
margin: 0px 3px;
position: relative;
}
/* ===[ For demonstration ]=== */
.dropdown {
margin-top: 25px
}
/* ===[ End demonstration ]=== */
.dropdown .dropdown_button {
cursor: pointer;
width: auto;
display: inline-block;
padding: 0px 0px;
border: 1px solid silver;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 2px;
font-weight: bold;
color: #717780;
line-height: 16px;
text-decoration: none !important;
background: white;
}
.dropdown input[type="checkbox"]:checked + .dropdown_button {
border: 1px solid #3B5998;
color: white;
background: silver;
-moz-border-radius-topleft: 2px;
-moz-border-radius-topright: 2px;
-moz-border-radius-bottomright: 0px;
-moz-border-radius-bottomleft: 0px;
-webkit-border-radius: 2px 2px 0px 0px;
border-radius: 2px 2px 0px 0px;
border-bottom-color: silver;
}
.dropdown input[type="checkbox"] + .dropdown_button .arrow {
display: inline-block;
width: 1px;
height: 1px;
border-top: 5px solid silver;
border-right: 5px solid transparent;
border-left: 5px solid transparent;
}
.dropdown input[type="checkbox"]:checked + .dropdown_button .arrow {
border-color: white transparent transparent transparent
}
.dropdown .dropdown_content {
position: absolute;
border: 1px solid #777;
padding: 0px;
background: white;
margin: 0;
display: none;
right:0;
}
.dropdown .dropdown_content li {
list-style: none;
margin-left: 0px;
line-height: 16px;
border-top: 1px solid #FFF;
border-bottom: 1px solid #FFF;
margin-top: 2px;
margin-bottom: 2px;
}
.dropdown .dropdown_content li:hover {
background: silver;
}
.dropdown .dropdown_content li a {
display: block;
padding: 2px 7px;
padding-right: 15px;
color: black;
text-decoration: none !important;
white-space: nowrap;
}
.dropdown .dropdown_content li:hover a {
color: white;
text-decoration: none !important;
}
.dropdown input[type="checkbox"]:checked ~ .dropdown_content {
display: block
}
.dropdown input[type="checkbox"] {
display: none
}
这对我来说是完美的...唯一的问题是我希望用户在空白区域外单击时列表消失(取消选中框) 那有什么帮助吗?
注意:我不想使用任何JavaScript
答案 0 :(得分:0)
您可以使用没有目标的<a>
代码(仅href
上的哈希)并使用其:focus
属性:
HTML:http://jsfiddle.net/sVxxZ/1/
<span class="dropdown">
<a href="#">
Dropdown
</a>
<span class="dropdown_content">asdf</span>
</span>
CSS:
.dropdown_content {
display: none;
}
.dropdown a:focus + .dropdown_content {
display: block;
}
<a>
标记(链接)具有一种特殊行为,在单击它们时会接收:focus
伪类,直到用户单击其他内容为止。例如,在IE和一些旧版本的Firefox和Chrome中,这用于在最后点击的链接周围添加虚线边框。单击其他任何地方都会忽略此边框。
后来将其标准化为:focus
伪类,当它们被点击/触摸/标记到可用元素(输入,链接等)时会应用于它们,直到它们失焦(用户点击/触摸/标签了)别的东西。链接(<a>
元素)也需要href
属性可点击(可用)。
通过将href
设置为#
,我们告诉浏览器导航到此页面,找到名为的锚点(是的,没有)。由于此锚不存在,所以没有任何反应,但链接仍然是可点击的,因此将在聚焦时应用
:focus
伪类。
我们dropdown_content
与display:none
在一起,因此默认情况下会隐藏它。有了这个,我们使用一个兄弟选择器+
来选择一个类dropdown_content
的元素,它在它之前有一个:focus
ed链接(在HTML中),并设置它的{{1 } display
,一个可见的值。当用户点击其他内容(包括菜单中的任何内容)时,菜单会关闭,因为该链接不会包含block
。
如果您希望菜单保持打开状态(如果用户点击其中),则必须稍微更改CSS选择器(实际上只需删除:focus
)并放置菜单+
在<div>
标记内。
你原来的必要改动:http://jsfiddle.net/zsp7t/32/
答案 1 :(得分:0)
将标签用作叠加层。我宁愿使用JS。
<div class="dropdown" id="dropdown">
<input type="checkbox" id="drop1" />
<label for="drop1" class="dropdown_button">
<img src="http://ichef.bbci.co.uk/wwfeatures/43_43/images/live/p0/17/tx/p017txf6.jpg" height="43" width="43" /><span id="arrowSpan" class="arrow"></span>
</label>
<span class="dropdown_button_dummy">
<img src="http://ichef.bbci.co.uk/wwfeatures/43_43/images/live/p0/17/tx/p017txf6.jpg" height="43" width="43" /><span id="arrowSpan" class="arrow"></span>
</span>
<div class="ddw">
<ul class="dropdown_content">
<li><a href="#">Privacy settings</a></li>
<li><a href="#">Account settings</a></li>
<li><a href="#">Logout</a></li>
</ul>
</div>
</div>
从position: relative;
移除.dropdown
以使标签相对于正文。
.dropdown {
display: inline-block;
}
.dropdown .dropdown_button {
display: inline-block;
/* Style */
}
.dropdown .dropdown_button_dummy {
display: none;
}
.dropdown input[type="checkbox"]:checked ~ .dropdown_button_dummy {
display: inline-block;
/* Style */
}
.dropdown input[type="checkbox"]:checked + .dropdown_button {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: block;
z-index: 1;
/* Remove styles */
}
.dropdown .ddw {
position: relative;
z-index: 2;
}
.dropdown input[type="checkbox"]:checked ~ .ddw > .dropdown_content {
display: block
}
.dropdown input[type="checkbox"] {
display: none
}
由于您丢失了下拉按钮,请创建dropdown_button_dummy以替换标签