css - 检查输入时如何将 css 应用于父级的兄弟元素?
问题描述
我正在努力让移动汉堡导航工作,但由于元素的嵌套/关系,我无法将 CSS 应用于元素。我的汉堡包图标 ( #mobile-menu
) 根据输入 ( #nav-trigger
) 是否被检查(变成 X)正确动画。
但是当#nav-trigger
被选中时,我也想改变的绝对定位#header-nav
(选中时将其置于视图中)。这就是我卡住的地方。我如何使用 CSS 选择器将 CSS 规则更改应用于#header-nav
何时#nav-trigger
检查?我正在使用 SCSS,并且我尝试过嵌套选择器,例如~
,+
等等,但我无法让它工作。任何帮助是极大的赞赏。谢谢!
<nav id="header-nav">
<ul>
<li>
<a>Nav item</a>
</li>
<li>
<a>Nav item</a>
</li>
<!-- etc... -->
</ul>
</nav>
<div id="mobile-menu-container">
<div id="mobile-menu-div">
<label id="mobile-menu-label" for="nav-trigger"></label>
<input type="checkbox" id="nav-trigger"/>
<div id="mobile-menu"></div>
</div>
</div>
解决方案
使用javascript - 没有浏览器支持(尚)仅通过 CSS 来“返回”“遍历”(父级 - 父级 - 兄弟级等)。
div :parent :parent ~ .... no way!! :)
相关 StackOverflow 问: 有 CSS 父选择器吗?
基本的香草 JS 示例:
var checkbox = document.querySelector("input[name=hamburger]");
var header = document.getElementById("header-nav");
var label = document.getElementById("mobile-menu-label");
var checked = checkbox.checked;
if (checked){
// Checkbox is checked..
header.classList.toggle('active');
label.innerHTML = "by deafult checked";
} else{
label.innerHTML = "by deafult not checked";
}
checkbox.addEventListener( 'change', function() {
if(this.checked) {
// Checkbox is checked..
header.classList.toggle('active');
label.innerHTML = "is true";
} else {
// Checkbox is not checked..
header.classList.toggle('active');
label.innerHTML = "is false";
}
});
input[type=checkbox]:checked ~ #mobile-menu {
color: white;
background-color: magenta;
transition: background-color 0.5s ease;
font-style: normal;
cursor: pointer;
}
#header-nav.active{
transition: background-color 0.5s ease;
background: red;
}
label{
cursor: pointer;
}
<nav id="header-nav">
<ul>
<li>
<a>Nav item</a>
</li>
<li>
<a>Nav item</a>
</li>
<!-- etc... -->
</ul>
</nav>
<div id="mobile-menu-container">
<div id="mobile-menu-div">
<input name="hamburger" name="nav-trigger" type="checkbox" id="nav-trigger" checked/>
<label id="mobile-menu-label" for="nav-trigger">Hello</label>
<div id="mobile-menu">hamburger</div>
</div>
</div>
通过 jQuery
使用toggleClass() Method
:
https ://www.w3schools.com/jquery/html_toggleclass.asp
相关 StackOverflow Q:如果选中复选框,则 Jquery 添加一个类
jQuery 遍历方法
jQuery 遍历,意思是“移动”,用于根据 HTML 元素与其他元素的关系“查找”(或选择)HTML 元素。
推荐阅读
- php - 未能编写复杂条件
- jquery - Ajax 加载 html 页面并使其适合 div 大小
- python-3.x - 在 Python 中,如何发送带有 5 个嵌套深度的 URL 编码参数的 POST 请求?
- spring - Spring Boot 和 Kotlin - 找不到我的 ID
- c# - c# 我可以将方法应用于 IQueryable 以将其转换为列表吗?
- cloud-foundry - 如何更改 CLI 用于在 cf push 中上传应用程序文件的临时路径
- c++ - 为什么 getline 方法不让我有机会在 C++ 中输入消息?
- three.js - 非常远的点光源无法正确渲染
- angular - 嵌套路由:如何在路由内路由?
- java - 匹配位,然后读取 16 位并存储到新变量