javascript - 如何使用 Javascript 检测区域的宽度并应用正确的菜单间距

标签 javascript jquery html css

我可以使用 Javascript 来检测 menuArea 的大小吗?然后应用每个 <li>适合总尺寸的尺寸menuArea

// something like this...

var menuSpace = Math.floor((menuAreaWidth - menuButtonsTotalWidth) / (menuButtons.length - 1));
// set positions
var menuButtonsLeft = 0;

$('#menuArea .menuButtonHolder').each(function(i, buttonHolder) {
  if (i < (menuButtons.length - 1)) {
    $(buttonHolder).css({
      'left': menuButtonsLeft + 'px',
      'width': menuButtons[i].buttonWidth + 'px'
    });
  }
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333;
}
#menuArea {
  max-width: 1050px;
  margin: 0px auto;
}
li {
  float: left;
}
li .menuButtonHolder {
  display: inline-block;
}
li a {
  display: block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="menuArea">
  <ul>
    <li><a href="/">Home</a></li>
    <li><a href="news.aspx">News and Events</a></li>
    <li><a href="social.aspx">Social</a></li>    
    <li><a href="blog.aspx">Our Blog</a></li>
    <li><a href="contact.aspx">Contact</a></li>
  <ul>
</div>

没有它,为了让菜单填满整个menuArea我发现自己不得不反复试验不同的 padding: 0px 20px 0px 20px等等,直到它们都在这里或那里拉伸(stretch)整个距离。

最佳答案

请不要将 JavaScript 用于您可以让 CSS 完成的事情。

Flexbox 有一个很好的方法可以为您解决这个问题,将这些行添加到您的示例中:

ul {
    display: flex;
    flex-direction: row;
    justify-content: space-between;
}

如果您希望元素的宽度与最大元素的宽度相同:

li {
    flex: 1;
}

示例片段:

ul {
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    list-style-type: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
    background-color: #333;
}

#menuArea {
    max-width: 1050px;
    margin: 0px auto;
}

li .menuButtonHolder {
    display: inline-block;
}

li {
	flex: 1;
}

li a {
    display: block;
    color: white;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
}
<div id="menuArea">
<ul>
 <li><a href="/">Home with a really long name.</a></li>
 <li><a href="about.aspx">Home</a></li>
 <li><a href="news.aspx">News</a></li>
 <li><a href="social.aspx">Social</a></li>    
 <li><a href="blog.aspx">Blog</a></li>
 <li><a href="contact.aspx">Contact</a></li>
<ul>
</div>

关于javascript - 如何使用 Javascript 检测区域的宽度并应用正确的菜单间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40866416/

相关文章:

jquery - Bootstrap 表单向导 - 在验证步骤之前阻止进度

javascript - 创建 Wordpress 网站的移动版本

php - Facebox 取消事件

jquery - Div 切换显示/ overflow hidden 父 Div

php - 我需要将一个 php 变量传递给 DataTables.Editable sUpdateURL

php - 从 MySQL 数据库获取数据到 HTML 下拉列表

css - 将 3 个 div 与一列有 2 个并排对齐

javascript - Chrome 中的时态

javascript - 使用简单的 JavaScript 或 jQuery 分别识别每个选择选项并在 DIV 中显示

javascript替换为子匹配作为数组索引