<a> link 在 div hide/show 中 CSS 不工作
<a> link in a div hide/show with CSS not working
在这个站点我发现并修改了一个 CSS/HTML 例子。一切似乎都很顺利,但是 div 中的 <a>
link 不起作用:它的显示没有问题,但是当我点击它们时,唯一发生的事情就是隐藏 div 和没有了。
代码如下:
.clicker {
outline: none;
text-align: center;
font-size: 1em;
font-style: italic;
color: blue;
text-decoration: underline;
cursor: pointer;
margin-top: -2em;
margin-bottom: 3em;
}
.hiddendiv {
display: none;
}
.clicker:focus + .hiddendiv {
display: block;
}
body#l-autore div.main div.hiddendiv ul.opere {
font-size: 0.75em;
list-style-type: none;
font-style: italic;
text-align: center;
}
body#l-autore div.main div.hiddendiv ul.opere li {
display: inline;
}
<body id="l-autore" xml:lang="it-IT">
<div class="header">
<h1>Brevi profili biografici degli autori</h1>
</div>
<div class="main">
<h1 id="sigil_toc_id_1">EXAMPLE</h1>
<div class="clicker" tabindex="1">
<h2 id="sigil_toc_id_2">
<p class="autori" id="id_romano">Romano</p>
</h2>
</div>
<div class="hiddendiv">
<ul class="opere">
<li>
<a href="Cap02sez1.html">
<span class="nr">I</span>
</a>
</li>
<li>
<a href="Cap02sez2.html">
<span class="nr">II</span>
</a>
</li>
</ul>
</div>
</div>
</body>
Cap02sez1.html
和Cap02sez1.html
两个文件当然是存在的:之前把link放在DIV里面正常link打开正确的文件.
当您加载页面时,您在包含 link 的 div 上设置 display: none
。单击 Romano 后,您将使用 .clicker:focus + .hiddendiv
使它们暂时可见。但是,这仅适用于 .clicker
在 'focus' 中的情况。一旦您单击其中一个 link,.clicker
就会失去焦点。
不幸的是,我认为这不可能用原始 CSS 解决,因为 CSS 中既没有 previous selector
也没有 parent selector
。因此,可能无法使用原始 CSS.
来定位子 link 的 .hiddendiv
显示
我会考虑使用 JavaScript(最好是 jQuery)来解决这个问题,只需做一些小改动:
HTML:
<p class="autori" onclick="show()"/>
CSS:
.visible {
display: block;
}
(同时删除 .clicker:focus + .hiddendiv
选择器)
JavaScript / jQuery:
function show() {
$(".hiddendiv").toggleClass("visible");
}
每当您单击 'Romano' 时,.hiddendiv
将在可见和不可见之间切换。我相信 这就是您想要的。如果您只想显示它,而不想隐藏它,您可以使用$(".hiddendiv").addClass("visible");
代替。
希望你能使用JavaScript;否则我认为这无法解决抱歉!
没有 JavaScript
的更新答案
实际上可以用 raw CSS 解决您的问题!您可以模拟原始 CSS 中的按钮单击,并对 HTML 的结构进行一些更改。 仅 的方法是利用 checkbox
的 hacky 版本。首先,我们将您的 .clicker
放入复选框的标签内:
<input type="checkbox" id="show" />
<label for="show">
<div class="clicker" tabindex="1">
<h2 id="sigil_toc_id_2">
<p class="autori" id="id_romano">Romano</p>
</h2>
</div>
</label>
请注意 clicker
div 现在是新输入 #show
的标签。现在我们修改 CSS 来反映这一点,用一个新的目标,同时隐藏 real 复选框:
#show {
display: none;
}
然后我们可以根据不可见复选框的 :checked
状态切换可见性:
#show:checked ~ .hiddendiv {
display: block;
}
#show:not(:checked) ~ .hiddendiv {
display: none;
}
当然,您还需要删除以下两项:
.hiddendiv {
display: none;
}
.clicker:focus + .hiddendiv {
display: block;
}
工作示例here(带有整理过的代码)。
因此,您有一个单独的 div 的可见性切换,原始 HTML 和 CSS :)
没有 JavaScript 和多个隐藏内容 Div 的更新答案
很有可能使它以相同的方式与隐藏的多个不同部分一起工作。为此,您只需创建一系列隐藏的复选框,每个 start 具有相同的名称。您可以使用 #show_1, #show2, #show_3, etc
而不是仅使用 #show
。然后,您可以使用 CSS 正则表达式 [id^=show]
.
来定位它们
HTML:
<input type="checkbox" id="show_1" />
<label for="show_1"></label>
</input>
<input type="checkbox" id="show_2" />
<label for="show_2"></label>
</input>
CSS:
[id^=show] {
display: none;
}
[id^=show]:checked ~ .hiddendiv {
display: block;
}
[id^=show]:not(:checked) ~ .hiddendiv {
display: none;
}
这是一个 new fiddle 显示它在 dividual hidden divs :)
中使用多个切换控制
由于CSS样式,hreflink在执行前断开连接。
当您单击 "I" 或 "II" 时,'.hiddendiv' 中的每个代码都是松散的。
所以如果你想通过点击事件显示和显示“.hiddendiv”,
我建议将javascript与onclick事件一起使用
[我做什么]
- 删除 css“.clicker:focus + .hiddendiv {display: block;}”
- 添加 javascript 在点击事件中隐藏和显示。
- 将 'a' 更改为 'div' 以使用 "onclick"
- 点击"I"或"II"时,在隐藏'.hiddendiv'之前执行movePage函数
function viewList(){
document.getElementsByClassName('hiddendiv')[0].style.display = 'block'
}
function movePage(path) {
window.location.href = path;
document.getElementsByClassName('hiddendiv')[0].style.display = ''
}
.clicker {
outline: none;
text-align: center;
font-size: 1em;
font-style: italic;
color: blue;
text-decoration: underline;
cursor: pointer;
margin-top: -2em;
margin-bottom: 3em;
}
.hiddendiv {
display: none;
}
.clicker:focus + .hiddendiv {
/* display: block;*/
}
body#l-autore div.main div.hiddendiv ul.opere {
font-size: 0.75em;
list-style-type: none;
font-style: italic;
text-align: center;
}
body#l-autore div.main div.hiddendiv ul.opere li {
display: inline;
}
<body id="l-autore" xml:lang="it-IT">
<div class="header">
<h1>Brevi profili biografici degli autori</h1>
</div>
<div class="main">
<h1 id="sigil_toc_id_1">EXAMPLE</h1>
<div class="clicker" tabindex="1">
<h2 id="sigil_toc_id_2">
<p class="autori" id="id_romano" onclick=viewList()>Romano</p>
</h2>
</div>
<div class="hiddendiv">
<ul class="opere">
<li>
<div onclick=movePage('Cap02sez1.html')>
<span class="nr">I</span>
</div>
</li>
<li>
<div onclick=movePage('Cap02sez2.html')>
<span class="nr">II</span>
</div>
</li>
</ul>
</div>
</div>
</body>
在这个站点我发现并修改了一个 CSS/HTML 例子。一切似乎都很顺利,但是 div 中的 <a>
link 不起作用:它的显示没有问题,但是当我点击它们时,唯一发生的事情就是隐藏 div 和没有了。
代码如下:
.clicker {
outline: none;
text-align: center;
font-size: 1em;
font-style: italic;
color: blue;
text-decoration: underline;
cursor: pointer;
margin-top: -2em;
margin-bottom: 3em;
}
.hiddendiv {
display: none;
}
.clicker:focus + .hiddendiv {
display: block;
}
body#l-autore div.main div.hiddendiv ul.opere {
font-size: 0.75em;
list-style-type: none;
font-style: italic;
text-align: center;
}
body#l-autore div.main div.hiddendiv ul.opere li {
display: inline;
}
<body id="l-autore" xml:lang="it-IT">
<div class="header">
<h1>Brevi profili biografici degli autori</h1>
</div>
<div class="main">
<h1 id="sigil_toc_id_1">EXAMPLE</h1>
<div class="clicker" tabindex="1">
<h2 id="sigil_toc_id_2">
<p class="autori" id="id_romano">Romano</p>
</h2>
</div>
<div class="hiddendiv">
<ul class="opere">
<li>
<a href="Cap02sez1.html">
<span class="nr">I</span>
</a>
</li>
<li>
<a href="Cap02sez2.html">
<span class="nr">II</span>
</a>
</li>
</ul>
</div>
</div>
</body>
Cap02sez1.html
和Cap02sez1.html
两个文件当然是存在的:之前把link放在DIV里面正常link打开正确的文件.
当您加载页面时,您在包含 link 的 div 上设置 display: none
。单击 Romano 后,您将使用 .clicker:focus + .hiddendiv
使它们暂时可见。但是,这仅适用于 .clicker
在 'focus' 中的情况。一旦您单击其中一个 link,.clicker
就会失去焦点。
不幸的是,我认为这不可能用原始 CSS 解决,因为 CSS 中既没有 previous selector
也没有 parent selector
。因此,可能无法使用原始 CSS.
.hiddendiv
显示
我会考虑使用 JavaScript(最好是 jQuery)来解决这个问题,只需做一些小改动:
HTML:
<p class="autori" onclick="show()"/>
CSS:
.visible {
display: block;
}
(同时删除 .clicker:focus + .hiddendiv
选择器)
JavaScript / jQuery:
function show() {
$(".hiddendiv").toggleClass("visible");
}
每当您单击 'Romano' 时,.hiddendiv
将在可见和不可见之间切换。我相信 这就是您想要的。如果您只想显示它,而不想隐藏它,您可以使用$(".hiddendiv").addClass("visible");
代替。
希望你能使用JavaScript;否则我认为这无法解决抱歉!
没有 JavaScript
的更新答案实际上可以用 raw CSS 解决您的问题!您可以模拟原始 CSS 中的按钮单击,并对 HTML 的结构进行一些更改。 仅 的方法是利用 checkbox
的 hacky 版本。首先,我们将您的 .clicker
放入复选框的标签内:
<input type="checkbox" id="show" />
<label for="show">
<div class="clicker" tabindex="1">
<h2 id="sigil_toc_id_2">
<p class="autori" id="id_romano">Romano</p>
</h2>
</div>
</label>
请注意 clicker
div 现在是新输入 #show
的标签。现在我们修改 CSS 来反映这一点,用一个新的目标,同时隐藏 real 复选框:
#show {
display: none;
}
然后我们可以根据不可见复选框的 :checked
状态切换可见性:
#show:checked ~ .hiddendiv {
display: block;
}
#show:not(:checked) ~ .hiddendiv {
display: none;
}
当然,您还需要删除以下两项:
.hiddendiv {
display: none;
}
.clicker:focus + .hiddendiv {
display: block;
}
工作示例here(带有整理过的代码)。
因此,您有一个单独的 div 的可见性切换,原始 HTML 和 CSS :)
没有 JavaScript 和多个隐藏内容 Div 的更新答案
很有可能使它以相同的方式与隐藏的多个不同部分一起工作。为此,您只需创建一系列隐藏的复选框,每个 start 具有相同的名称。您可以使用 #show_1, #show2, #show_3, etc
而不是仅使用 #show
。然后,您可以使用 CSS 正则表达式 [id^=show]
.
HTML:
<input type="checkbox" id="show_1" />
<label for="show_1"></label>
</input>
<input type="checkbox" id="show_2" />
<label for="show_2"></label>
</input>
CSS:
[id^=show] {
display: none;
}
[id^=show]:checked ~ .hiddendiv {
display: block;
}
[id^=show]:not(:checked) ~ .hiddendiv {
display: none;
}
这是一个 new fiddle 显示它在 dividual hidden divs :)
中使用多个切换控制由于CSS样式,hreflink在执行前断开连接。
当您单击 "I" 或 "II" 时,'.hiddendiv' 中的每个代码都是松散的。
所以如果你想通过点击事件显示和显示“.hiddendiv”,
我建议将javascript与onclick事件一起使用
[我做什么]
- 删除 css“.clicker:focus + .hiddendiv {display: block;}”
- 添加 javascript 在点击事件中隐藏和显示。
- 将 'a' 更改为 'div' 以使用 "onclick"
- 点击"I"或"II"时,在隐藏'.hiddendiv'之前执行movePage函数
function viewList(){
document.getElementsByClassName('hiddendiv')[0].style.display = 'block'
}
function movePage(path) {
window.location.href = path;
document.getElementsByClassName('hiddendiv')[0].style.display = ''
}
.clicker {
outline: none;
text-align: center;
font-size: 1em;
font-style: italic;
color: blue;
text-decoration: underline;
cursor: pointer;
margin-top: -2em;
margin-bottom: 3em;
}
.hiddendiv {
display: none;
}
.clicker:focus + .hiddendiv {
/* display: block;*/
}
body#l-autore div.main div.hiddendiv ul.opere {
font-size: 0.75em;
list-style-type: none;
font-style: italic;
text-align: center;
}
body#l-autore div.main div.hiddendiv ul.opere li {
display: inline;
}
<body id="l-autore" xml:lang="it-IT">
<div class="header">
<h1>Brevi profili biografici degli autori</h1>
</div>
<div class="main">
<h1 id="sigil_toc_id_1">EXAMPLE</h1>
<div class="clicker" tabindex="1">
<h2 id="sigil_toc_id_2">
<p class="autori" id="id_romano" onclick=viewList()>Romano</p>
</h2>
</div>
<div class="hiddendiv">
<ul class="opere">
<li>
<div onclick=movePage('Cap02sez1.html')>
<span class="nr">I</span>
</div>
</li>
<li>
<div onclick=movePage('Cap02sez2.html')>
<span class="nr">II</span>
</div>
</li>
</ul>
</div>
</div>
</body>