我一直在寻找制作隐藏/显示内容或仅包含CSS且没有javascript的列表的好方法。 我设法做了这个动作:
<!DOCTYPE html>
<head>
<style>
#cont {display: none; }
.show:focus + .hide {display: inline; }
.show:focus + .hide + #cont {display: block;}
</style>
</head>
<body>
<div>
<a href="#show"class="show">[Show]</a>
<a href="#hide"class="hide">/ [Hide]</a>
<div id="cont">Content</div>
</div>
</body>
</html>
在这里演示:http://jsfiddle.net/6W7XD/ 它正在发挥作用,但并非如此。这是问题所在: 显示内容后,您可以通过单击“页面上的任意位置”将其隐藏。如何禁用它?如何通过单击隐藏“仅”隐藏内容? 提前谢谢!
答案 0 :(得分:30)
我不会使用复选框,我会使用您已有的代码
DEMO http://jsfiddle.net/6W7XD/1/
CSS
body {
display: block;
}
.span3:focus ~ .alert {
display: none;
}
.span2:focus ~ .alert {
display: block;
}
.alert{display:none;}
HTML
<span class="span3">Hide Me</span>
<span class="span2">Show Me</span>
<p class="alert" >Some alarming information here</p>
这样一来,只有点击hide元素
才能隐藏文本答案 1 :(得分:15)
这会让你大吃一惊:Hidden radio buttons。
HTML:
<label for="show">
<span>[Show]</span>
</label>
<input type=radio id="show" name="group">
<label for="hide">
<span>[Hide]</span>
</label>
<input type=radio id="hide" name="group">
<span id="content">Content</span>
和CSS:
input#show, input#hide {
display:none;
}
span#content {
display:none;
}
input#show:checked ~ span#content {
display:block;
}
input#hide:checked ~ span#content {
display:none;
}
答案 2 :(得分:9)
有3个纯CSS的快速示例,没有javascript,其内容显示为“点击”,“维护点击”和第三个“onhover”(所有仅在Chrome中测试)。很抱歉这个帖子的问题,但这个问题是第一个seo结果,也许我的贡献可以帮助像我这样的初学者
我认为(未经过测试)但论证“内容”的优势是你可以添加很好的图标,例如来自Font Awesome(其\ f-Code)或十六进制图标代替文本“隐藏”和“显示”国际化的伎俩。
示例链接http://jsfiddle.net/MonkeyTime/h3E9p/2/
<style>
label { position: absolute; top:0; left:0}
input#show, input#hide {
display:none;
}
span#content {
display: block;
-webkit-transition: opacity 1s ease-out;
transition: opacity 1s ease-out;
opacity: 0;
height: 0;
font-size: 0;
overflow: hidden;
}
input#show:checked ~ .show:before {
content: ""
}
input#show:checked ~ .hide:before {
content: "Hide"
}
input#hide:checked ~ .hide:before {
content: ""
}
input#hide:checked ~ .show:before {
content: "Show"
}
input#show:checked ~ span#content {
opacity: 1;
font-size: 100%;
height: auto;
}
input#hide:checked ~ span#content {
display: block;
-webkit-transition: opacity 1s ease-out;
transition: opacity 1s ease-out;
opacity: 0;
height: 0;
font-size: 0;
overflow: hidden;
}
</style>
<input type="radio" id="show" name="group">
<input type="radio" id="hide" name="group" checked>
<label for="hide" class="hide"></label>
<label for="show" class="show"></label>
<span id="content">Lorem iupsum dolor si amet</span>
<style>
#show1 { position: absolute; top:20px; left:0}
#content1 {
display: block;
-webkit-transition: opacity 1s ease-out;
transition: opacity 1s ease-out;
opacity: 0;
height: 0;
font-size: 0;
overflow: hidden;
}
#show1:before {
content: "Show"
}
#show1:active.show1:before {
content: "Hide"
}
#show1:active ~ span#content1 {
opacity: 1;
font-size: 100%;
height: auto;
}
</style>
<div id="show1" class="show1"></div>
<span id="content1">Ipsum Lorem</span>
<style>
#show2 { position: absolute; top:40px; left:0}
#content2 {
display: block;
-webkit-transition: opacity 1s ease-out;
transition: opacity 1s ease-out;
opacity: 0;
height: 0;
font-size: 0;
overflow: hidden;
}
#show2:before {
content: "Show"
}
#show2:hover.show2:before {
content: "Hide"
}
#show2:hover ~ span#content2 {
opacity: 1;
font-size: 100%;
height: auto;
}
/* extra */
#content, #content1, #content2 {
float: left;
margin: 100px auto;
}
</style>
<div id="show2" class="show2"></div>
<span id="content2">Lorem Ipsum</span>
答案 3 :(得分:5)
这是我最近使用过的。
CSS
div#tabs p{display:none;}
div#tabs p.tab1:target {display:block;}
div#tabs p.tab2:target {display:block;}
div#tabs p.tab3:target {display:block;}
HTML
<div id='tabs'>
<h2 class="nav-tab-wrapper">
<a href="#tab1" class="nav-tab tab1">Pages</a>
<a href="#tab2" class="nav-tab nav-tab-active tab2">Email</a>
<a href="#tab3" class="nav-tab tab3">Support</a>
</h2>
<p id='tab1' class='tab1'>Awesome tab1 stuff</p>
<p id='tab2' class='tab2'>Tab2 stuff</p>
<p id='tab3' class='tab3'>Tab3 stuff</p>
</div>
https://jsfiddle.net/hoq0djwc/1/
希望它在某个地方有所帮助。
答案 4 :(得分:5)
我使用隐藏的复选框来查看某些消息的持久视图。该复选框可以隐藏(显示:无)或不隐藏。这是一个很小的代码,我可以写。
您可以在JSFiddle
上查看和测试演示<强> HTML:强>
<input type=checkbox id="show">
<label for="show">Help?</label>
<span id="content">Do you need some help?</span>
<强> CSS:强>
#show,#content{display:none;}
#show:checked~#content{display:block;}
运行代码段
#show,#content{display:none;}
#show:checked~#content{display:block;}
&#13;
<input id="show" type=checkbox>
<label for="show">Click for Help</label>
<span id="content">Do you need some help?</span>
&#13;
答案 5 :(得分:4)
首先,感谢威廉。
第二 - 我需要一个动态版本。它有效!
一个例子:
CSS:
p[id^="detailView-"]
{
display: none;
}
p[id^="detailView-"]:target
{
display: block;
}
HTML:
<a href="#detailView-1">Show View1</a>
<p id="detailView-1">View1</p>
<a href="#detailView-2">Show View2</a>
<p id="detailView-2">View2</p>
答案 6 :(得分:1)
我有另一个简单的解决方案:
<a href="#alert" class="span3" tabindex="0">Hide Me</a>
<a href="#" class="span2" tabindex="0">Show Me</a>
<p id="alert" class="alert" >Some alarming information here</p>
body { display: block; }
p.alert:target { display: none; }
答案 7 :(得分:1)
如果按[show],文本[show]将被隐藏,反之亦然。
此示例在Chrome中不起作用,我不知道为什么......
.show {
display: none;
}
.hide:focus + .show {
display: inline;
}
.hide:focus {
display: none;
}
.hide:focus ~ #list { display:none; }
@media print {
.hide, .show {
display: none;
}
}
&#13;
<div><a class="hide" href="#">[hide]</a> <a class="show" href="#">[show]</a>
<ol id="list">
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ol>
</div>
&#13;
答案 8 :(得分:1)
我知道它是一个旧帖子但是这个解决方案(I've made a JSFiddle to illustrate it)怎么样...使用:after
的{{1}}伪元素来显示/隐藏<span>
切换链接本身(除了必须显示/隐藏的<span>
消息)。当伪元素失去它的焦点时,该消息被隐藏。
初始情况是一个隐藏的消息,当.alert
与<span>
重点关注时会显示。当此:after content : "Show Me";
被关注时,<span>
变为空,而第二个:after content
的{{1}}(最初为空)变为&# 34;隐藏我&#34; 。因此,当您点击第二个:after content
时,第一个失去它的焦点,情况会回到它的初始状态。
我开始提供@Vector提供的解决方案我保持DOM的状态ky @Frederic Kizar
HTML:
<span>
CSS:
<span>
答案 9 :(得分:1)
以下答案包括更改&#34;显示/隐藏&#34;的文字,并使用一个复选框,两个标签,总共四行html和五行css。它也从内容隐藏开始。
<强> HTML 强>
<input id="display-toggle" type=checkbox>
<label id="display-button" for="display-toggle"><span>Display Content</span></label>
<label id="hide-button" for="display-toggle"><span>Hide Content</span></label>
<div id="hidden-content"><br />Hidden Content</div>
<强> CSS 强>
label {
background-color: #ccc;
color: brown;
padding: 15px;
text-decoration: none;
font-size: 16px;
border: 2px solid brown;
border-radius: 5px;
display: block;
width: 200px;
text-align: center;
}
input,
label#hide-button,
#hidden-content {
display: none;
}
input#display-toggle:checked ~ label#display-button {
display: none;
}
input#display-toggle:checked ~ label#hide-button {
display: block;
background-color: #aaa;
color: #333
}
input#display-toggle:checked ~ #hidden-content {
display: block;
}
答案 10 :(得分:1)
现在(2020年),您可以使用纯HTML5做到这一点,并且不需要JavaScript或CSS3。
<details>
<summary>Put your summary here</summary>
<p>Put your content here!</p>
</details>
答案 11 :(得分:0)
仅想说明在嵌套列表的上下文中,@ jeffmcneill建议使用隐藏复选框<input>
的方法—在这种情况下,每个显示/隐藏的元素应保持其状态独立于焦点和show /隐藏页面上其他元素的状态。
通过为页面上显示/隐藏的元素所使用的所有复选框的id
属性赋予通用的开始字符集,可以为样式表规则使用经济的[id^=""]
选择器方案来回切换可点击元素的外观和相关的显示/隐藏元素的display
状态。在这里,我的id
是“ expanded-1”,“ expanded-2”,“ expanded-3”。
请注意,我还使用了@Diepen的:after
选择器想法,以使<label>
元素中的html内容不存在。
还请注意,<input>
<label>
<div class="collapsible">
序列很重要,并且具有+
选择器而不是~
的相应CSS。
.collapse-below {
display: inline;
}
p.collapse-below::after {
content: '\000A0\000A0';
}
p.collapse-below ~ label {
display: inline;
}
p.collapse-below ~ label:hover {
color: #ccc;
}
input.collapse-below,
ul.collapsible {
display: none;
}
input[id^="expanded"]:checked + label::after {
content: '\025BE';
}
input[id^="expanded"]:not(:checked) + label::after {
content: '\025B8';
}
input[id^="expanded"]:checked + label + ul.collapsible {
display: block;
}
input[id^="expanded"]:not(:checked) + label + ul.collapsible {
display: none;
}
<ul>
<li>single item a</li>
<li>single item b</li>
<li>
<p class="collapse-below" title="this expands">multiple item a</p>
<input type="checkbox" id="expanded-1" class="collapse-below" name="toggle">
<label for="expanded-1" title="click to expand"></label>
<ul class="collapsible">
<li>sub item a.1</li>
<li>sub item a.2</li>
</ul>
</li>
<li>single item c</li>
<li>
<p class="collapse-below" title="this expands">multiple item b</p>
<input type="checkbox" id="expanded-2" class="collapse-below" name="toggle">
<label for="expanded-2" title="click to expand"></label>
<ul class="collapsible">
<li>sub item b.1</li>
<li>sub item b.2</li>
</ul>
</li>
<li>single item d</li>
<li>single item e</li>
<li>
<p class="collapse-below" title="this expands">multiple item c</p>
<input type="checkbox" id="expanded-3" class="collapse-below" name="toggle">
<label for="expanded-3" title="click to expand"></label>
<ul class="collapsible">
<li>sub item c.1</li>
<li>sub item c.2</li>
</ul>
</li>
</ul>