我想切换 a <div>
,但我的要求是它必须在javascript
关闭的情况下工作。我想选择一个声明“修改搜索”的超链接,并显示包含搜索条件的 div。
我发现了大量使用 的演示jQuery
,但它们都需要javascript
启用。任何帮助表示赞赏。
我想切换 a <div>
,但我的要求是它必须在javascript
关闭的情况下工作。我想选择一个声明“修改搜索”的超链接,并显示包含搜索条件的 div。
我发现了大量使用 的演示jQuery
,但它们都需要javascript
启用。任何帮助表示赞赏。
给你,船长!(编辑——科学更新)
HTML:
<label for=cb>Click Here</label>
<input type='checkbox' style='display: none' id=cb>
<div>
Hello. This is some stuff.
</div>
CSS:
input:checked + div { display: none; }
编辑- 附加说明:display: none
将导致某些浏览器 (IE) 不注意该<input>
复选框。除了使用display
CSS 属性隐藏它,您还可以使用类似position: absolute; left: -10000px;
.
下面是一个简单的示例,您将能够使用 css 创建切换,而无需任何 JAVASCRIPT 和 JQUERY。您还可以使用没有 JQUERY 的 css 添加动画。CSS3 太棒了!:)
.box{width:200px;
height:0;
background:red;
transition:all 0.4s linear;}
input:checked ~ .box{height:220px;}
<input id="toggle" type="checkbox" style="visibility:hidden">
<label for="toggle"> CLICK ME </label>
<div class="box"> </div>
该<details>
元素在没有应用任何 CSS 或 JavaScript 的情况下执行您所要求的操作。
它当然不是 a div
,所以它不能从字面上回答你的问题,但我读到你的要求是有一些你希望有条件地显示或隐藏的内容。
创建一个披露小
<details>
部件,其中信息仅在小部件切换到“打开”状态时可见。可以使用该<summary>
元素提供摘要或标签。
不幸的是,浏览器对的支持<details>
并不完美,IE 和 Edge 目前根本不支持。边缘状态为正在考虑中。IE 的开发已停止,因此它永远不会获得支持。
没有 javascript,您无法切换点击。结尾。
更新:
如果您可以使用CSS 3
选择器,您将不得不更改您的 DOM 结构并使用CSS 3
选择器而不使用涵盖旧浏览器的库,这可能比关闭 javascript 的用户更常见,您可以使用 @pointy 回答:selected
.
所以我想说,实际上这仍然是不可能的......!
对于已接受答案的更精致版本,一种常见的做法是将隐藏的复选框 + 标签组合在一起,以便能够在屏幕上拥有一个可点击的标签,该标签映射到 JavaScript ( .checked
) 和 CSS都可用的隐藏支持值( :checked
)
<input type='checkbox' id='css-toggle-switch' checked='checked' class='css-toggle-switch'>
<label for='css-toggle-switch' class='btn'>Error Details</label>
<div class='css-toggle-content'>
<pre><code>Unexpected StackOverflow</code></pre>
</div >
通过将复选框放在首位,我们可以根据:checked
选择器来驱动 CSS 决策。我们可以使用相邻兄弟选择+
器或通用兄弟选择器来抓取后续元素~
/* always hide the checkbox */
.css-toggle-switch { display: none; }
/* update label text to reflect state */
.css-toggle-switch + label:before { content: "Hide "; }
.css-toggle-switch:checked + label:before { content: "Show "; }
/* conditionally hide content when checked */
.css-toggle-switch:checked ~ .css-toggle-content { display: none; }
/* make the label look clickable */
.css-toggle-switch + label {
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.css-toggle-switch { display: none; }
.css-toggle-switch + label:before { content: "Hide "; }
.css-toggle-switch:checked + label:before { content: "Show "; }
.css-toggle-switch:checked ~ .css-toggle-content { display: none; }
.css-toggle-switch + label {
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* just some styles to make the demo a little more pleasant */
.btn {
padding: 5px 10px;
background: white;
border: 1px solid grey;
border-radius: 3px;
width: 130px;
display: inline-block;
text-align: center;
}
.btn:hover {
background: #e6e6e6;
-webkit-box-shadow: inset 0 -1px 0 #dddddd;
-moz-box-shadow: inset 0 -1px 0 #dddddd;
box-shadow: inset 0 -1px 0 #dddddd;
}
.panel {
padding: 15px;
background: #ffe06d;
border: 1px solid #d69e01;
border-radius: 3px;
}
pre {
padding: 5px;
margin-bottom: 0;
background: #eaeaea;
border: 1px solid grey;
}
<div class="panel">
<input type='checkbox' id='css-toggle-switch'
checked='checked' class='css-toggle-switch'>
<label for='css-toggle-switch' class='btn'>
Error Details
</label>
<div class='css-toggle-content'>
<pre><code>Unexpected StackOverflow</code></pre>
</div >
</div>
聚会晚了大约三年,但是当我想做同样的事情时,我发现了这个,用于移动菜单,随后找到了一个非常好的解决方案,所以我想我会把它发布给其他人.
基本思想来自这篇文章:http ://www.creativebloq.com/css3/build-smart-mobile-navigation-without-hacks-6122800 。我想我使用了一种稍微简单的方法(在设置它时偶然发现)。这通过单击菜单按钮隐藏/显示导航。
在 CSS 中,nav 设置为“隐藏”,nav:target 设置为显示。页面有两个菜单按钮,使用同一张图片,都有类menubutton,绝对位置在同一个地方。menbuttonON 的索引为 1000,位于 html 中的导航外部 menubuttonOFF 的索引为 1001,但位于导航内部,因此起初它是不可见的
在 HTML 中,单击 menubuttonON 链接到 nav,然后它是目标,因此它会显示。在那个导航里面是 menubuttonOFF,它的 z-index 比 menubutton ON 高,所以现在它在最上面。单击 menubuttonOFF 链接回 menubuttonON,因此 nav 不是目标,并且会消失,同时使用 menubuttonOFF。
简化的 CSS(没有特定于站点的格式):
nav {display: none;}
nav:target {display: block !important;}
.menubutton { position: absolute;
text-align: right;
top: 0;
margin-top: 14%;} /* This margin puts it below the header logo */
.menubuttonON {z-index: 1000;}
.menubuttonOFF {z-index: 1001;}
HTML
<header> <!-- logo here --> </header>
<div class="menubutton menubuttonON" name="buttonON"><a href="#nav"><img src="../Images/menubutton.png">MENU</a></div>
<nav id="nav" name="nav">
<div class="menubutton menubuttonOFF"><a
href="#buttonON"><img src="../Images/menubutton.png">CLOSE</a></div>
<ul> <!-- all the navigation stuff --> </ul>
</nav>
你可以在这里看到它的工作原理:http ://www.thewritersgreenhouse.co.uk/storyelements_resources/storyelements.htm 。
如果没有 JavaScript,您所问的问题是不可能的。(或者,正如@Pointy 指出的那样,CSS3 选择器。)
您将不得不修改您的要求,或者更好的是,默认情况下只显示表单并为 JavaScript 用户隐藏(如果需要)。您的页面可以为所有人工作,并且为那些无法使用它们的人禁用不重要的功能。
没有Javascript,没有切换。有一些伪CSS3的方法,但如果你必须支持JS关闭,你肯定不支持CSS3。
正如其他人所说,您必须使用JS来实现div的切换。如果您希望您的网站在禁用 javascript 的情况下工作,您需要将您的网站设计为在 javascript 不可用时优雅地失败。换句话说,您的网站不应依赖 JavaScript 来运行。例如:AJAX 表单应该回退到 HTTP 提交等。
如果不使用 Javascript 或发送另一个请求,您将无法做到这一点。
如果您可以接受额外的请求(即添加页面加载是可以的),那么最直接的解决方案是将链接指向当前 URL,但添加查询字符串参数,例如http://example.com/current-page?showsearch=1
. 然后,在服务器上,检查是否showsearch
设置了参数,如果设置了,则将搜索 div 初始化为可见。
当然,您必须注意页面状态的其余部分在请求中仍然存在;您可能必须使用表单才能携带用户可能输入的任何数据,这很可能意味着您的链接不能是链接,但必须是按钮(因为链接无法触发没有 Javascript 的表单提交)。
在禁用 JS 的情况下使其工作的方法是让超链接有一些 href 来完成您想要的任务 - 例如:
/the/original/url?advanced-search=true
当 ?advanced-search=true 存在时,Web 服务器提供不同的内容。如果启用了 JS,您研究的 jquery 代码应该只是取消原始操作。