javascript - 永久设置相对放置元素的位置

标签 javascript jquery html css

我有一排均匀分布的导航项,看起来像这样:

enter image description here

当前选择的菜单项是粗斜体。设计师希望其他人在悬停时变成粗斜体。发生这种情况时,它会使该元素的文本变宽,从而将所有其他元素推到上方,因为它们以固定边距内联显示。我必须摆脱轻推。

解决此问题的正确方法是什么?我有几个使用 javascript 的想法:

  • 加载,将文本包裹在 div 中,并将每个 div 的宽度设置为文本的宽度。
  • 加载时,获取每个菜单项相对于 div 的位置,然后使用结果坐标将它们的位置设置为绝对位置(这没问题,因为它们在导航 div 中始终处于相同的绝对位置)。

这两个看起来都有点 hackish,而且这是一个非常简单的问题,所以我认为一定有更简单的方法。

如果它有所作为,我会使用 jQuery。

以下是将重现该问题的相当小的 HTML 页面:

<head>
<style type="text/css">
    body {
        background: black;
        font-family: sans-serif;
    }
    a {
        margin: 0px 20px;
        font-size: 16px;
        color: white;
        text-decoration: none;
    }
    a:hover {
        font-weight: bold;
        font-style: italic;
    }
</style>
</head>

<body>
    <a id="projectslink" href="#projects">Projects</a>
    <a id="innovationslink" href="#innovations">Innovations</a>
    <a id="newslink" href="#news">News</a>
    <a id="aboutlink" href="#about">About</a>
    <a id="contactlink" href="#contact">Contact</a>
    <a id="breathlink" href="#">Breath*</a>
</body>

最佳答案

我认为这个由来已久的 CSS 问题没有优雅的解决方案...我可以想到两种“hackish”CSS 解决方案可供选择:

  • 给元素 display: block-inline 和固定宽度(在 em 中,当然是为了防止字体缩放/缩放问题)。如果内边距看起来一致,宽度将因元素而异。
  • 隐藏文本并将其替换为图像。

在我看来,的第一个解决方案(设置固定宽度 onload)还不错。不乱用 position “感觉是对的”,至少比其他选择要安全得多。

澄清一下,这就是我将如何实现您的第一个解决方案:

HTML:无变化

CSS:没有变化

JavaScript:

$(function() {    
    $('a').each(function() {
        var menuItem = $(this);
        menuItem.css({
            'display': 'inline-block',
            'width':   menuItem.outerWidth(true),
            'margin':  0,
            'text-align': 'center'
        }); 
    });
});

如你所见:

  • 无需将菜单项包裹在div中(只需在JS中设置display: block-inline);
  • 通过将宽度设置为 computed outerWidth()(包括边距、填充和边框宽度),清除 可以使每个单独的元素保持居中margin 并将 text-align 设置为 center

实例on JSFiddle .

关于javascript - 永久设置相对放置元素的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8874507/

相关文章:

javascript - 单击动态添加的元素

javascript - 使用 AJAX 和 PHP 永久覆盖简单的点击计数

javascript - 有没有办法在 google chrome 扩展程序中增加变量而无需打开扩展程序?

javascript - Jquery slider 故障

jquery - 在 div css + jQuery 上添加图像

javascript - 使用 jQuery/CSS 收缩/增长动画

javascript - Flowplayer 在 IE 下无法启动

html - 在 Chrome 中查看源代码时如何设置图标?

html - 样式不会被覆盖

javascript - 当我在服务器中将 Promise 与 dialogflow 库一起使用时 - 出现错误