【问题标题】:How to keep my drop-down menu properly aligned with my element?如何使我的下拉菜单与我的元素正确对齐?
【发布时间】:2015-06-14 17:18:23
【问题描述】:

我创建了一个下拉菜单,当我单击包含允许打开菜单的类触发器的文本时出现该下拉菜单,但是我遇到了问题。我的页面是响应式的,所以我需要菜单与元素正确对齐:http://prntscr.com/7gw5ox

当我调整页面大小时:http://prntscr.com/7gw5wd

我的 HTML 代码(下拉菜单 - 位于页面底部):

    <div id="help-down-down-menu" class="drop-down-menu">
        <ul>
            <li>
                <a href="faq.php">Frequently Asked Questions</a>
            </li>
            <li>
                <a href="faq.php">Test</a>
            </li>
            <li>
                <a href="faq.php">Test</a>
            </li>
            <li>
                <a href="faq.php">Test</a>
            </li>
        </ul>
    </div>

带有包含下拉菜单触发器的文本的页脚代码:

    <div id="footer">
        <div class="wrapper">
            <ul>
                <li>
                    <span class="drop-down-menu-trigger" id="help">Help</span>
                </li>
            </ul>
            <span id="footer-copyright">
                <a href="./..">Coded by Dylan - ©2015-2016</a>
            </span>
        </div>
    </div>

JavaScript 代码:

(function($)
{
    $(".drop-down-menu-trigger").click(function(e)
    {
        e.preventDefault();
        $(".drop-down-menu").css({"visibility": "visible"});
    });
})(jQuery);

CSS:

.drop-down-menu
{
    background-color: #FFFFFF;
    box-shadow: 0 15px 110px rgba(0, 0, 0, 0.2);
    border-radius: 3px;
    text-align: center;
    position: absolute;
    top: 150%;
    left: 500px;
    visibility: hidden;
}

.drop-down-menu:after
{
    top: 100%;
    left: 50%;
    margin-left: -15px;
    border: 15px solid transparent;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-top-color: #FFFFFF;
}

.drop-down-menu a
{
    display: block;
    color: #000000;
    padding: 10px;
}

.drop-down-menu a:hover
{
    background-color: #F5F5F5;
}

.drop-down-menu #faq:before
{
    content: "\f059";
    font-size: 18px;
    margin-right: 5px;
}

【问题讨论】:

  • 尝试将drop-down-menumarginpadding 设置为0,然后告诉我它是否有效。
  • 不,它没有。这是绝对位置的问题,因为child不是相对于它的parent定位的,所以我不知道如何解决这个问题。
  • 如果您还没有尝试过相对定位,您是否尝试过? ?
  • @Uptop14 我知道解决这个问题的方法,但你能不能。提供类页脚的css代码以及其中的css代码。如果您提供工作的demo 或网站的链接会更容易。
  • 这里的演示:nextgenfocus.com/test

标签: javascript jquery html css drop-down-menu


【解决方案1】:

你需要像这样修改你的代码:

HTML : 在页脚注释之后,您的 HTML 代码必须是这样的

<div class="drop-display">
    <div id="help-down-down-menu" class="drop-down-menu">
        <ul>
            <li>
                <a class="modal-window-trigger" name="modal-window-faq" id="faq" href="faq.php">Frequently Asked Questions</a>
            </li>
            <li>
                <a href="faq.php">Test</a>
            </li>
            <li>
                <a href="faq.php">Test</a>
            </li>
            <li>
                <a href="faq.php">Test</a>
            </li>
        </ul>
    </div>
</div>

<div id="footer">
    <div class="wrapper">
        <ul>
      <!-- +++++++++++++++++++++++++++++++++ ADDED & UPDATED +++++++++++++++++++++++++++++ -->
            <li>
                <span class="drop-down-menu-trigger" id="help" onclick="getPos(this)">Help</span>
            </li>
            <li>
                <span class="drop-down-menu-trigger" id="test" onclick="getPos(this)">Help</span>
            </li>
      <!-- +++++++++++++++++++++++++++++++++ ADDED & UPDATED +++++++++++++++++++++++++++++ -->
        </ul>
        <span id="footer-copyright">
            <a href="./..">Coded by Dylan - ©2015-2016</a>
        </span>
    </div>
</div>
<div id="modal-window-faq" class="modal-window">
    ...
    ...
    ... <!-- Same as your code is-->
</div>
<div id="expose-mask"></div>
<script src="javascript/scripts.js"></script>
</div>
</div>
</body>
</html>

CSS

1) 新增类:drop-display,

2) 删除了 1 个重复的下拉菜单类,并修改了一个。

.drop-display
{
    display: block;
    width: 100%;
    //text-align: center; REMOVE THIS LINE
    position: absolute; /* CHANGED FROM absolute */
    z-index: 999;
}

.drop-down-menu // NO UPDATE HERE
{
    display:inline-block;
    background-color: #FFFFFF;
    box-shadow: 0 15px 110px rgba(0, 0, 0, 0.2);
    border-radius: 3px;
    text-align: center;
    position: relative;
}

JQuery

1) 添加了一行以在页面加载时隐藏下拉菜单

2) Visibility to fadeIn() OR fadeToggle()的修改代码

$(".drop-down-menu").hide(); // On very first line of scripts.js file
function getPos(elems) 
{
    var x = elems.offsetLeft, y = elems.offsetTop;
    var curId = event.target.id;
    var hw = $("#" + curId ).width();
    var dw = $(".drop-down-menu").width();
    var dh = $(".drop-down-menu").height();
    var temp = dw/2;
    var tempx = hw/2;
    var xPos = x - temp + tempx;
    var yPos = y - dh - 20;
    $(".drop-display").css("left", xPos + "px");
    $(".drop-display").css("top", yPos + "px");

    $(".drop-down-menu").fadeToggle();
}

我很确定这会奏效,如果仍有任何问题,请随时询问。

更新

HTML - 增加了一个 ul 和 onclick 事件

CSS - 移除了 text-align:center line 并改变了相对于绝对的位置。

JQuery - 总变化

【讨论】:

  • 太棒了!工作!非常感谢,伙计...这是我需要的解决方案。
  • 好的,伙计,我想问你一件事。我有问题。我想在页脚中添加几个带有下拉菜单的链接,但问题是下拉菜单与单击的元素没有正确对齐。看:prntscr.com/7gz0f8 代码:prntscr.com/7gz0m6 如何使每个元素与下拉菜单正确对齐?
  • 我试过了,但是没有用。你可以调整你的附加代码来适应我的吗? jsfiddle.net/j9o9399t 我需要的是一个动态的系统。我希望能够在任何地方使用类下拉菜单,并且下拉菜单始终与单击的项目正确对齐。我也想当我点击一个项目时,另一个元素的下拉菜单被删除并替换为点击的项目的下拉菜单。
  • @Uptop14 我已经上传了一些文件检查它们here
【解决方案2】:

使用 jQuery。调整大小时更新位置。

var $menu = $('#help-down-down-menu');     
var $trigger = $('#help');

$(window).on('resize', setPosition);

var setPosition = function() {
  var offset = $trigger.offset().left;

  $menu.css('left', offset);
};

类似的东西。

编辑

对不起,不要使用 jQuery。

您的问题是#help-down-down-menu 的定位是absolute,但相对与其父级#site-pusher。

将#help-down-down-menu 放入 #footer-copyright。

HTML

<span class="drop-down-menu-trigger" id="help">
 Help

  <div id="help-down-down-menu" class="drop-down-menu" style="visibility: visible;">

     ...   

  </div>

</span>

CSS

#help {
  position: relative;
}
#help-down-down-menu {
  position: absolute;
  /* take out everything else */
}

从那里开始。

【讨论】:

【解决方案3】:

将下拉元素放在页脚内,然后添加位置:相对于页脚元素,并使用:

    left: 50%;
    top: -90%;
    transform: translate(-50%, -90%);

定位下拉元素。

jsfiddle:https://jsfiddle.net/mf8mgw5d/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多