【问题标题】:li elements fill ul width with same spacing between element in Horizontal menuli 元素以水平菜单中元素之间的相同间距填充 ul 宽度
【发布时间】:2018-03-06 11:51:18
【问题描述】:

我有一个使用ul 作为主菜单容器和li 作为菜单列表项的水平菜单导航,我使用ul 的显示表格和li 的表格单元格,所以当每个@987654328 @ 将适合 ul 宽度,问题是每个单词菜单项之间的间隙不一样,原因是因为我在 li 元素之间设置了填充但是如果我去掉填充,它不会有任何间隙无论如何,即使li 元素内有分词,我也需要保持每个单词菜单项之间的间隔相同,并且我需要保持显示的响应能力。

Demo

css代码:

body{
  background-color: #ff2;
  margin: 0px !important;
}
ul { 
    display:table;
    width:100%;
    box-sizing:border-box; 
    -moz-box-sizing:border-box;
    -webkit-box-sizing:border-box;
    background-color: #F25800;
    padding: 0 10px;
}
li { 
    display:table-cell; 
    text-align:center;
    padding: 10px 12px;
} 
li:hover{
  background-color: #64b448;
}
li a{
  text-decoration:none;
}
li a span{
  font-size: 13px; 
  color: #fff;
}

html代码:

<ul>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/kebutuhan-rumah.html" class="level-top"><span>Kebutuhan Rumah</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/kebutuhan-pribadi.html" class="level-top"><span>Kebutuhan Pribadi</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/makanan-minuman.html" class="level-top"><span>Makanan & Minuman</span></a> 
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/kebutuhan-kantor.html" class="level-top"><span>Kebutuhan Kantor</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/otomotif.html" class="level-top"><span>Otomotif</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/listrik-teknik.html" class="level-top"><span>Listrik & Teknik</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/alat-bangunan.html" class="level-top"><span>Alat Bangunan</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/elektronik.html" class="level-top"><span>Elektronik</span></a> 
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/pakaian.html" class="level-top"><span>Pakaian</span></a> 
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/pecah-belah.html" class="level-top"><span>Pecah Belah</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/kesehatan.html" class="level-top"><span>Kesehatan</span></a> 
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/mainan-hobi.html" class="level-top"><span>Mainan & Hobi</span></a>
   </li>
</ul>

【问题讨论】:

  • 如果您可能注意到,li 之间没有间隙......这是您定义的填充和它们的宽度(为 li 添加背景)
  • @TemaniAfif 但每个单词之间有一个间隙
  • 我知道,但这不是 li 元素之间的差距......和它们的背景,你会看到......你在 li 和文本对齐中心上指定了填充,所以差距来自这个
  • @TemaniAfif 但我只定义了顶部和底部的填充
  • li { display:table-cell; text-align:center; padding: 10px 12px; } --> 你有 10px 的顶部/底部和 20px 的左/右...添加一个我告诉你的背景,你会明白 :)

标签: html css


【解决方案1】:

body{
  background-color: #ff2;
  margin: 0px !important;
}
ul { 
    display:flex;
    width:100%;
    box-sizing:border-box; 
    -moz-box-sizing:border-box;
    -webkit-box-sizing:border-box;
    background-color: #F25800;
    padding: 0 10px;
}
li { 
    display:inline-flex; 
    flex-wrap: wrap;
    flex: 1;
    padding: 10px 12px;
    text-align:center;
    align-items: center;
    padding: 10px 12px;
} 
li:hover{
  background-color: #64b448;
}
li a{
  text-decoration:none;
}
li a span{
  font-size: 13px; 
  color: #fff;
}
 
<ul>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/kebutuhan-rumah.html" class="level-top"><span>Kebutuhan Rumah</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/kebutuhan-pribadi.html" class="level-top"><span>Kebutuhan Pribadi</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/makanan-minuman.html" class="level-top"><span>Makanan & Minuman</span></a> 
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/kebutuhan-kantor.html" class="level-top"><span>Kebutuhan Kantor</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/otomotif.html" class="level-top"><span>Otomotif</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/listrik-teknik.html" class="level-top"><span>Listrik & Teknik</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/alat-bangunan.html" class="level-top"><span>Alat Bangunan</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/elektronik.html" class="level-top"><span>Elektronik</span></a> 
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/pakaian.html" class="level-top"><span>Pakaian</span></a> 
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/pecah-belah.html" class="level-top"><span>Pecah Belah</span></a>
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/kesehatan.html" class="level-top"><span>Kesehatan</span></a> 
   </li>
   <li class="ui-menu-item level0 classic parent ">
      <div class="open-children-toggle"></div>
      <a href="http://test.com/mainan-hobi.html" class="level-top"><span>Mainan & Hobi</span></a>
   </li>
</ul>

这是适用的代码。

  1. ul的显示更改为flex
  2. li 的显示设置为inline-flex,将其配置为换行,并使用flex: 1 调整大小。使用align-items: center 使其垂直居中。

【讨论】: