如何使用:使用 css 检查响应式导航栏

问题描述

我在 checkButton 类中添加一个复选框。

      <div class="hamburger">
        <input type="checkBox" id="check"/>
        <label for="check" class="checkButton">
          <i class="fas fa-bars" style="font-size: 35px"></i>
        </label>
      </div>
    </div>
    <div>
      <ul class="navItems">
        <li><a href="#home" class="navItem active">HOME</a></li>
        <li><a href="#services" class="navItem">SERVICES</a></li>
        <li><a href="#projects" class="navItem">PROJECTS</a></li>
        <li><a href="#ourTeam" class="navItem">OUR TEAM</a></li>
        <li><a href="#contact" class="navItem">CONTACT</a></li>
      </ul>
    </div>

然后我添加了一些 CSS 以显示点击时的外观。

    ul{
        position: fixed;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        width: 100%;
        height: 100vh;
        z-index: 0;
        right: 100%;
        background-color: #e54136;
        transition: all .5s;
    }

能否请您告诉我如何使用 :clicked链接它,以便我的 ul 在点击 checkButton 类时发生变化。 这是我所做的,但它不起作用。

    ul{
        position: fixed;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        width: 100%;
        height: 100vh;
        z-index: 0;
        right: 100%;
        background-color: #e54136;
        transition: all .5s;
    }

选中时,必须将right: 0;带入ul

.checkButton:checked ~ ul{
    right: 0%;
}

解决方法

General Sibling Combinator 引用左侧元素的同级。

您的 import {useHistory} from 'react-router-dom' const history = useHistory(); function signup(event) { console.log({email,password}); firebase.auth().createUserWithEmailAndPassword(email,password) .then((user) => { // Signed in // ... this.history.push('/Quiz') console.log(email,password) firebase.database().ref('users/' + user.uid).set({ email: user.email,password: user.password }); }) .catch((error) => { var errorCode = error.code; var errorMessage = error.message; // .. console.log(errorMessage) }); } 不是您的 ul 的兄弟姐妹。它是输入的祖父母(或表亲,一旦被移除)的兄弟姐妹的孩子。

no way 可以从 input 中选择 ul,因此要使其正常工作,您需要重新排列标记。

...但不要。 CSS 本身并不是解决这个问题的好工具。使用 JavaScript。利用 ARIA 等无障碍工具。

,

这应该有效

var check = document.querySelector('.hamburger > .checkButton');
var menu = document.querySelector('.navItems');

check.addEventListener('click',function(e) {
  e.preventDefault();
  menu.classList.toggle('show');
});
ul {
  position: fixed;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100vh;
  z-index: 0;
  right: 100%;
  background-color: #e54136;
  transition: all .5s;
}

ul.show {
  right: 0;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" rel="stylesheet" />
<div class="hamburger">
  <button class="checkButton">
      <i class="fas fa-bars"></i>
  </button>
</div>
<ul class="navItems">
  <li>Test</li>
  <li>Test</li>
  <li>Test</li>
  <li>Test</li>
  <li>Test</li>
  <li>Test</li>
</ul>

,

这是一个非常简单的例子,说明它应该如何在没有 JS 的情况下工作:

label {
  cursor:pointer;
}
input +  nav {
  visibility:hidden;
}
input:checked + nav {
  visibility:visible;
}
<label for="a1">Hamburger button,click me</label>
<input type="checkbox" id="a1">
<nav>Hidden menu</nav>

,

ul ~ p 选择前面有

元素的每个元素。 为了更好地理解阅读https://www.w3schools.com/cssref/css_selectors.asp

但是如果你不想使用 jQuery 的 js

这是带复选框的代码

ul.navItems{
        position: fixed;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        width: 100%;
        height: 100vh;
        z-index: 0;
        right: 100%;
        background-color: #e54136;
        transition: all .5s;
    }
    .hamburger input:checked + ul.navItems {
        right: 0%;
    }
<div>
    <div class="hamburger">
        <input type="checkbox" id="check"/>
        <ul class="navItems">
            <li><a href="#home" class="navItem active">HOME</a></li>
            <li><a href="#services" class="navItem">SERVICES</a></li>
            <li><a href="#projects" class="navItem">PROJECTS</a></li>
            <li><a href="#ourTeam" class="navItem">OUR TEAM</a></li>
            <li><a href="#contact" class="navItem">CONTACT</a></li>
        </ul>
    </div>
</div>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...