首页 > 解决方案 > HTML将最后一个导航栏项目向右对齐

问题描述

我有个问题。我创建了以下导航栏:

* {
    box-sizing: border-box;
    font-family: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif;
    font-size: 16px;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    margin: 0;
    padding: 0;
}

body {
    background: linear-gradient( rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3) ), url(src/assets/images/background2.jpg);
    background-position: center center;
    background-repeat: no-repeat;
    background-attachment: fixed;
    background-size: cover;
    background-color:#464646;
}


a {
    text-decoration: none;
}

li {
    list-style: none;
}

.navbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 20px;
    background-color: #547430;
    color: #fff;
}

.nav-links a {
    color: #fff;
}


/* LOGO */

.logo {
    font-size: 2vw;
    font-family: Rockwell;
    text-align: center;
    position: absolute;
    width: 30%;
    left: 50%;
    margin-left: -15%;
}


/* NAVBAR MENU */

.menu {
    display: flex;
    gap: 1em;
    font-size: 18px;
    z-index: 9;
}

.menu li:hover {
    background-color: #7ead47;
    border-radius: 5px;
    transition: 0.3s ease;
}

.menu li {
    padding: 5px 14px;
    font-weight: bold;
}


/* DROPDOWN MENU */

.services {
    position: relative;
}

.dropdown {
    background-color: rgb(1, 139, 139);
    padding: 1em 0;
    position: absolute;
    /*WITH RESPECT TO PARENT*/
    display: none;
    border-radius: 8px;
    top: 35px;
}

.dropdown li+li {
    margin-top: 10px;
}

.dropdown li {
    padding: 0.5em 1em;
    width: 8em;
    text-align: center;
}

.dropdown li:hover {
    background-color: #4c9e9e;
}

.account {
    position: absolute;
    right: 0;
}

.services:hover .dropdown {
    display: block;
}


/*RESPONSIVE NAVBAR MENU STARTS*/


/* CHECKBOX HACK */

input[type=checkbox] {
    display: none;
}


/*HAMBURGER MENU*/

.hamburger {
    display: none;
    font-size: 24px;
    user-select: none;
}


/* APPLYING MEDIA QUERIES */

@media (max-width: 1000px) {
    .menu {
        display: block;
        position: absolute;
        background-color: #547430;
        margin-top: 5px;
        text-align: left;
        height: 100%;
        width: 100%;
        padding: 16px 0;
        transition: all 0.3s ease;
        left: -100%;
    }
    .logo {
        font-size: 5vw;
    }
    .menu li:hover {
        display: inline-block;
        background-color: #7ead47;
        transition: 0.3s ease;
    }
    .menu li+li {
        margin-top: 12px;
    }
    input[type=checkbox]:checked~.menu {
        left: 0%;
    }
    .hamburger {
        display: block;
    }
    .dropdown {
        left: 50%;
        top: 30px;
        transform: translateX(35%);
    }
    .dropdown li:hover {
        background-color: #4c9e9e;
    }
}






/*RESPONSIVE NAVBAR MENU STARTS*/
/* CHECKBOX HACK */
input[type=checkbox]{
  display: none;
}
/*HAMBURGER MENU*/
.hamburger {
  display: none;
  font-size: 24px;
  user-select: none;
}
/* APPLYING MEDIA QUERIES */
@media (max-width: 1000px) {

  .menu {
    display: block;
    position: absolute;
    background-color: #547430;
    margin-top: 5px;
    text-align: left;
    height: 100%;
    width: 100%;
    padding: 16px 0;
    transition: all 0.3s ease;
    left: -100%;
  }

  .logo {
    font-size: 5vw;
  }

  .menu li:hover {
    display: inline-block;
    background-color: #7ead47;
    transition: 0.3s ease;
  }

  .menu li + li {
    margin-top: 12px;
  }

  input[type=checkbox]:checked ~ .menu{
    left: 0%;
  }

  .hamburger {
    display: block;
  }

  .dropdown {
    left: 50%;
    top: 30px;
    transform: translateX(35%);
  }

  .dropdown li:hover {
    background-color: #4c9e9e;
  }

}
<nav class="navbar">
  <div class="logo">Audio Diary</div>
  <ul class="nav-links">

    <!-- USING CHECKBOX HACK -->
    <input type="checkbox" id="checkbox_toggle" />
    <label for="checkbox_toggle" class="hamburger">&#9776;</label>

    <!-- NAVIGATION MENUS -->
    <div class="menu">
      <li><a href="/">Home</a></li>
      <li><a href="/">Explore</a></li>
      <li><a href="/">Info</a></li>
      <li class="account" id="login"><a href="/login">Login</a></li>
      <li class="services">
        <a href="/">Services</a>
        <ul class="dropdown">
          <li><a href="/">Dropdown 1 </a></li>
          <li><a href="/">Dropdown 2</a></li>
          <li><a href="/">Dropdown 2</a></li>
          <li><a href="/">Dropdown 3</a></li>
          <li><a href="/">Dropdown 4</a></li>
        </ul>
      </li>
    </div>
  </ul>
</nav>

但现在我希望导航栏中的项目与类:account在右侧对齐。我已经试过了

float:right;

margin-left: auto

.accountcss的类中,但这不会导致任何更改。我做错了什么,我该如何做到这一点?

标签: htmlcss

解决方案


使用position: absolutewithright: 0向左对齐

* {
  box-sizing: border-box;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  margin: 0;
  padding: 0;
}

body {
  background: linear-gradient( rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)), url(src/assets/images/background2.jpg);
  background-position: center center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-size: cover;
  background-color: #464646;
}

a {
  text-decoration: none;
}

li {
  list-style: none;
}

.navbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px;
  background-color: #547430;
  color: #fff;
}

.nav-links a {
  color: #fff;
}


/* LOGO */

.logo {
  font-size: 2vw;
  font-family: Rockwell;
  text-align: center;
  position: absolute;
  width: 30%;
  left: 50%;
  margin-left: -15%;
}


/* NAVBAR MENU */

.menu {
  display: flex;
  gap: 1em;
  font-size: 18px;
  z-index: 9;
}

.menu li:hover {
  background-color: #7ead47;
  border-radius: 5px;
  transition: 0.3s ease;
}

.menu li {
  padding: 5px 14px;
  font-weight: bold;
}


/* DROPDOWN MENU */

.account {
  position: relative;
}

.dropdown {
  background-color: rgb(1, 139, 139);
  padding: 1em 0;
  position: absolute;
  /*WITH RESPECT TO PARENT*/
  display: none;
  border-radius: 8px;
  top: 35px;
}

.dropdown li+li {
  margin-top: 10px;
}

.dropdown li {
  padding: 0.5em 1em;
  width: 8em;
  text-align: center;
}

.dropdown li:hover {
  background-color: #4c9e9e;
}

.account {
  position: absolute;
  right: 0;
}

.account:hover .dropdown {
  display: block;
}


/*RESPONSIVE NAVBAR MENU STARTS*/


/* CHECKBOX HACK */

input[type=checkbox] {
  display: none;
}


/*HAMBURGER MENU*/

.hamburger {
  display: none;
  font-size: 24px;
  user-select: none;
}


/* APPLYING MEDIA QUERIES */

@media (max-width: 1000px) {
  .menu {
    display: block;
    position: absolute;
    background-color: #547430;
    margin-top: 5px;
    text-align: left;
    height: 100%;
    width: 100%;
    padding: 16px 0;
    transition: all 0.3s ease;
    left: -100%;
  }
  .logo {
    font-size: 5vw;
  }
  .menu li:hover {
    display: inline-block;
    background-color: #7ead47;
    transition: 0.3s ease;
  }
  .menu li+li {
    margin-top: 12px;
  }
  input[type=checkbox]:checked~.menu {
    left: 0%;
  }
  .hamburger {
    display: block;
  }
  .dropdown {
    left: 50%;
    top: 30px;
    transform: translateX(35%);
  }
  .dropdown li:hover {
    background-color: #4c9e9e;
  }
}
<nav class="navbar">
  <div class="logo">Audio Diary</div>
  <ul class="nav-links">

    <!-- USING CHECKBOX HACK -->
    <input type="checkbox" id="checkbox_toggle" />
    <label for="checkbox_toggle" class="hamburger">&#9776;</label>

    <!-- NAVIGATION MENUS -->
    <div class="menu">
      <li><a href="/">Home</a></li>
      <li><a href="/">Explore</a></li>
      <li><a href="/">Info</a></li>
      <li class="account" id="login"><a href="/login">Login</a></li>
    </div>
  </ul>
</nav>

更新:

由于下拉菜单消失时去它。那么这个消失的原因是 dropdown 和 btn on 之间有一些空间hover。因此,当您尝试进入下拉菜单时,请删除hoverbtn 上的事件,然后下拉菜单就会消失。快速进入下拉菜单时不会出现此行为。

解决方案 :

  • 单击 btn 时触发下拉菜单,再次单击或在外部单击时将其关闭

  • 或者通过删除 btn 和下拉菜单之间的空格

我已经展示了第二个解决方案并减少.dropdown {top: 35px;}.dropdown {top: 30px;}

* {
  box-sizing: border-box;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  margin: 0;
  padding: 0;
}

body {
  background: linear-gradient( rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)), url(src/assets/images/background2.jpg);
  background-position: center center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-size: cover;
  background-color: #464646;
}

a {
  text-decoration: none;
}

li {
  list-style: none;
}

.navbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px;
  background-color: #547430;
  color: #fff;
}

.nav-links a {
  color: #fff;
}


/* LOGO */

.logo {
  font-size: 2vw;
  font-family: Rockwell;
  text-align: center;
  position: absolute;
  width: 30%;
  left: 50%;
  margin-left: -15%;
}


/* NAVBAR MENU */

.menu {
  display: flex;
  gap: 1em;
  font-size: 18px;
  z-index: 9;
}

.menu li:hover {
  background-color: #7ead47;
  border-radius: 5px;
  transition: 0.3s ease;
}

.menu li {
  padding: 5px 14px;
  font-weight: bold;
}


/* DROPDOWN MENU */

.services {
  position: relative;
}

.dropdown {
  background-color: rgb(1, 139, 139);
  padding: 1em 0;
  position: absolute;
  /*WITH RESPECT TO PARENT*/
  display: none;
  border-radius: 8px;
  top: 30px;
}

.dropdown li+li {
  margin-top: 10px;
}

.dropdown li {
  padding: 0.5em 1em;
  width: 8em;
  text-align: center;
}

.dropdown li:hover {
  background-color: #4c9e9e;
}

.account {
  position: absolute;
  right: 0;
}

.services:hover .dropdown {
  display: block;
}


/*RESPONSIVE NAVBAR MENU STARTS*/


/* CHECKBOX HACK */

input[type=checkbox] {
  display: none;
}


/*HAMBURGER MENU*/

.hamburger {
  display: none;
  font-size: 24px;
  user-select: none;
}


/* APPLYING MEDIA QUERIES */

@media (max-width: 1000px) {
  .menu {
    display: block;
    position: absolute;
    background-color: #547430;
    margin-top: 5px;
    text-align: left;
    height: 100%;
    width: 100%;
    padding: 16px 0;
    transition: all 0.3s ease;
    left: -100%;
  }
  .logo {
    font-size: 5vw;
  }
  .menu li:hover {
    display: inline-block;
    background-color: #7ead47;
    transition: 0.3s ease;
  }
  .menu li+li {
    margin-top: 12px;
  }
  input[type=checkbox]:checked~.menu {
    left: 0%;
  }
  .hamburger {
    display: block;
  }
  .dropdown {
    left: 50%;
    top: 30px;
    transform: translateX(35%);
  }
  .dropdown li:hover {
    background-color: #4c9e9e;
  }
}


/*RESPONSIVE NAVBAR MENU STARTS*/


/* CHECKBOX HACK */

input[type=checkbox] {
  display: none;
}


/*HAMBURGER MENU*/

.hamburger {
  display: none;
  font-size: 24px;
  user-select: none;
}


/* APPLYING MEDIA QUERIES */

@media (max-width: 1000px) {
  .menu {
    display: block;
    position: absolute;
    background-color: #547430;
    margin-top: 5px;
    text-align: left;
    height: 100%;
    width: 100%;
    padding: 16px 0;
    transition: all 0.3s ease;
    left: -100%;
  }
  .logo {
    font-size: 5vw;
  }
  .menu li:hover {
    display: inline-block;
    background-color: #7ead47;
    transition: 0.3s ease;
  }
  .menu li+li {
    margin-top: 12px;
  }
  input[type=checkbox]:checked~.menu {
    left: 0%;
  }
  .hamburger {
    display: block;
  }
  .dropdown {
    left: 50%;
    top: 30px;
    transform: translateX(35%);
  }
  .dropdown li:hover {
    background-color: #4c9e9e;
  }
}
<nav class="navbar">
  <div class="logo">Audio Diary</div>
  <ul class="nav-links">

    <!-- USING CHECKBOX HACK -->
    <input type="checkbox" id="checkbox_toggle" />
    <label for="checkbox_toggle" class="hamburger">&#9776;</label>

    <!-- NAVIGATION MENUS -->
    <div class="menu">
      <li><a href="/">Home</a></li>
      <li><a href="/">Explore</a></li>
      <li><a href="/">Info</a></li>
      <li class="account" id="login"><a href="/login">Login</a></li>
      <li class="services">
        <a href="/">Services</a>
        <ul class="dropdown">
          <li><a href="/">Dropdown 1 </a></li>
          <li><a href="/">Dropdown 2</a></li>
          <li><a href="/">Dropdown 2</a></li>
          <li><a href="/">Dropdown 3</a></li>
          <li><a href="/">Dropdown 4</a></li>
        </ul>
      </li>
    </div>
  </ul>
</nav>


推荐阅读