如何指定子菜单div的位置并防止菜单div改变

How to specify the position of sub-menu div and prevent the menu div changed

我学习了 here 中关于下拉菜单的教程。

但是当我尝试实现子菜单时卡住了。到目前为止,我已经设法编写了这段代码。 HTML:

<div class="dropdown" style="float:left;">
  <button class="dropbtn">Left</button>
  <div class="dropdown-content" style="left:0;">
    <div class="dropdown-list draggable" href="#">Link 1
        <div class="dropdown-sub-list">
          <div class="draggable" href="#">Link 4</div>
          <div class="draggable" href="#">Link 5</div>
          <div class="draggable" href="#">Link 6</div>
          <div class="draggable" href="#">Link 7</div>
        </div>
    </div>
    <div class="dropdown-list draggable" href="#">Link 2
    <div class="dropdown-sub-list">
          <div class="draggable" href="#">Link 4b</div>
          <div class="draggable" href="#">Link 5b</div>
          <div class="draggable" href="#">Link 6b</div>
          <div class="draggable" href="#">Link 7b</div>
        </div>
    </div>
    <div class="dropdown-list draggable" href="#">Link 3</div>
  </div>
</div>

CSS:

.dropbtn {
    background-color: #4CAF50;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}

.dropdown {
    position: relative;
    display: inline-block;
}

.dropdown-content {
    display: none;
    position: absolute;
    right: 0;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-sub-list {
    display: none;
    position:relative;
    float:left;
    right: 0;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-content .draggable {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}

.dropdown-content .draggable:hover{background-color: #f1f1f1}

.dropdown-list:hover .dropdown-sub-list{
    display : block;
}

.dropdown:hover .dropdown-content {
    display: block;
}

.dropdown:hover .dropbtn {
    background-color: #3e8e41;
}

这是 jsfiddle: https://jsfiddle.net/yusrilmaulidanraji/9sdck1z1/3/

我的问题是:

提前谢谢你。

只需将您的 css 替换为:

.dropbtn {
    background-color: #4CAF50;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}

.dropdown {

    display: inline-block;
}

.dropdown-content {
    display: none;
    position: absolute;
    right: 0;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-sub-list {
    display: none;

    float:right;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-content .draggable {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}

.dropdown-content .draggable:hover{background-color: #f1f1f1}

.dropdown-list:hover .dropdown-sub-list{
    display : block;
}

.dropdown:hover .dropdown-content {
    display: block;
}

.dropdown:hover .dropbtn {
    background-color: #3e8e41;
}

Updated Fiddle.

  1. .dropdown-content .draggable中添加position: relative(以便下拉菜单可以定位到右侧)

  2. .dropdown-sub-list 上使用 position: absolute。还要添加 left: 100%(moves drop down to the right); top: 0(移动到顶部)

.dropbtn {
  background-color: #4CAF50;
  color: white;
  padding: 16px;
  font-size: 16px;
  border: none;
  cursor: pointer;
}
.dropdown {
  position: relative;
  display: inline-block;
}
.dropdown-content {
  display: none;
  position: absolute;
  right: 0;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
}
.dropdown-sub-list {
  display: none;
  position: absolute;
  top: 0;
  left: 100%;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
}
.dropdown-content .draggable {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  position: relative;
}
.dropdown-content .draggable:hover {
  background-color: #f1f1f1
}
.dropdown-list:hover .dropdown-sub-list {
  display: block;
}
.dropdown:hover .dropdown-content {
  display: block;
}
.dropdown:hover .dropbtn {
  background-color: #3e8e41;
}
<div class="dropdown" style="float:left;">
  <button class="dropbtn">Left</button>
  <div class="dropdown-content" style="left:0;">
    <div class="dropdown-list draggable" href="#">Link 1
      <div class="dropdown-sub-list">
        <div class="draggable" href="#">Link 4</div>
        <div class="draggable" href="#">Link 5</div>
        <div class="draggable" href="#">Link 6</div>
        <div class="draggable" href="#">Link 7</div>
      </div>
    </div>
    <div class="dropdown-list draggable" href="#">Link 2
      <div class="dropdown-sub-list">
        <div class="draggable" href="#">Link 4b</div>
        <div class="draggable" href="#">Link 5b</div>
        <div class="draggable" href="#">Link 6b</div>
        <div class="draggable" href="#">Link 7b</div>
      </div>
    </div>
    <div class="dropdown-list draggable" href="#">Link 3</div>
  </div>
</div>

.dropdown-content {
    display: none;
    position: absolute; "change here"
    right: 0;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-sub-list {
    display: none;
    top: 40px;
    position: absolute; "change here"
    float: left; "not sure you need this"
    right: -41px;
    background-color: #f9f9f9;
    min-width: 160px;
    z-index: 1; "change here"
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
}

对您的 css 检查进行了一些更改 fiddle link

https://jsfiddle.net/9sdck1z1/11/

.dropbtn {
    background-color: #4CAF50;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}

.dropdown {
    position: relative;
    display: inline-block;
}

.dropdown-content {
    display: none;
    position: absolute;
    right: 0;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-sub-list {
    background-color: #f9f9f9;
    display: none;
    float: left;
    min-width: 160px;
    position: absolute;
    right: -160px;
    top: 0;

}

.dropdown-content .draggable {
   color: black;
    display: block;
    padding: 12px 16px;
    position: relative;
    text-decoration: none;
}

.dropdown-content .draggable:hover{background-color: #f1f1f1}

.dropdown-list.draggable:hover .dropdown-sub-list{

  display : block;
}


.dropdown:hover .dropdown-content {
    display: block;
}

.dropdown:hover .dropbtn {
    background-color: #3e8e41;
}

寻找基于 CSS 的下拉菜单,它们要简单得多...有很多 'pointless' DIV。

我还没有设计它的样式,但这就是让它工作所需的全部内容。

(您不需要 class 名称 .sub 和 .sub-2,但它会帮助您在设置样式时跟踪事物)

HTML

<nav>
<ul>
    <li><a href="#">Left</a>
        <ul class="sub">
          <li><a href="#">Link 1</a>
            <ul class="sub-2">
              <li><a href="#">link 1 - 1</a></li>
              <li><a href="#">link 1 - 2</a></li>
              <li><a href="#">link 1 - 3</a></li>
            </ul> 
          </li>
          <li>link 2</li>
          <li>link 3</li>
        </ul> 
            </li>
</ul> 
</nav>

CSS:

nav li{list-style-type:none; }
nav ul.sub, nav ul.sub-2{display:none; }
nav ul li:hover .sub, nav .sub li:hover .sub-2{display:block; }