html - 我怎样才能像示例图像那样将子列表项居中?

标签 html css html-lists

我正在尝试弄清楚如何将下面的嵌套列表居中。目前我正在使用边距和填充来插入列表项。

将鼠标悬停在父列表项上时会显示嵌套列表。由于某些原因,嵌套列表项显示为 inline-flex,因为 inline-block 在此示例中没有显示。

我想要的示例图片 enter image description here

  #nav {
  margin: 0;
}

ul {
  background: #F8F8F8;
  text-align: center; /* centers 1st level list items but not 2nd level(?)*/
  margin: 0 auto;
  padding-inline-start: 0px; /* override chrome user agent style of 40px */
}


/*1st level li styling */

.nav-tab {
  border: 1px solid #F8F8F8;
  border-radius: 10px 10px 0 0;
  display: inline-block;
  background: #F8F8F8;
  padding: 0 40px;
  font-family: 'Segoe UI';
  font-size: 30px;
  color: #707070;
}

.nav-tab:hover {
  background-color: white;
  border: 1px solid white;
  border-radius: 10px 10px 0 0;
}


/*2nd level ul styling */

.dropdown-content {
  position: absolute; /* drops submenu below tabs */
  display: none;      /* hides submenu */
  list-style-type: none; /* removes bullet points */
  background: white;
  font-family: 'Segoe UI';
  font-size: 25px;
  border: white;
  min-width: 100%; /* li stretches % of length of parent element */
  left: 380px;     /* an attempt to push the first list item across the page */
}

li .sub-nav-link {
  text-decoration: none; /* removes underline on links */
  font-family: 'Segoe UI';
  font-size: 25px;
  color: #707070;
  margin-right: 120px; /* an attempt to push the 2nd, 3rd, ..  list items further across the page */
}

li:hover>.dropdown-content {
  display: inline-flex; /* inline-block didnt work for me here(?) - but inline-flex did */
}
<nav class="nav" id="primary-nav">
  <ul>
    <li class="nav-tab">Products
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">Range</a></li>
        <li><a href="#" class="sub-nav-link">Catalogue</a></li>
        <li><a href="#" class="sub-nav-link">Search</a></li>
      </ul>
    </li>
    <li class="nav-tab">About Us
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">Mission</a></li>
        <li><a href="#" class="sub-nav-link">Background</a></li>
        <li><a href="#" class="sub-nav-link">Design</a></li>
        <li><a href="#" class="sub-nav-link">Production</a></li>
      </ul>
    </li>
    <li class="nav-tab">Events
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">Calendar</a></li>
        <li><a href="#" class="sub-nav-link">link 2</a></li>
        <li><a href="#" class="sub-nav-link">link 3</a></li>
      </ul>
    </li>
    <li class="nav-tab">Stockists
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">List</a></li>
        <li><a href="#" class="sub-nav-link">link 2</a></li>
        <li><a href="#" class="sub-nav-link">link 3</a></li>
      </ul>
    </li>
    <li class="nav-tab">Contact
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">Feedback</a></li>
        <li><a href="#" class="sub-nav-link">FAQ</a></li>
        <li><a href="#" class="sub-nav-link">Details</a></li>
      </ul>
    </li>
  </ul>
</nav>

a JSFiddle to play with my code

最佳答案

只要让顶层的 ul 成为相对的并且保持父 li 不定位,那么你就可以完全定位子 ul 以获取全宽并居中对齐 child :

#nav {
  margin: 0;
}

ul {
  background: #F8F8F8;
  text-align: center; /* centers 1st level list items but not 2nd level(?)*/
  margin: 0 auto;
  padding-inline-start: 0px; /* override chrome user agent style of 40px */
  
  position:relative;  /* ADD THIS */
}

/*1st level li styling */
.nav-tab {
  border: 1px solid #F8F8F8;
  border-radius: 10px 10px 0 0;
  display: inline-block;
  background: #F8F8F8;
  padding: 0 40px;
  font-family: 'Segoe UI';
  font-size: 30px;
  color: #707070;
}

.nav-tab:hover {
  background-color: white;
  border: 1px solid white;
  border-radius: 10px 10px 0 0;
}

/*2nd level ul styling */
.dropdown-content {
  position: absolute; /* drops submenu below tabs */
  list-style-type: none; /* removes bullet points */
  background: white;
  font-family: 'Segoe UI';
  font-size: 25px;
  border: white;
  margin:0;
  padding:0;
  display:none;
  text-align:center;
  left: 0; 
  right:0;   /* stretch content full width of ul with left and right */
  top:100%;  /* push content below current ul */
}

.dropdown-content > li {
    display:inline-block; /* so they centre */
    margin:0 1em;         /* space between each item */
}

li .sub-nav-link {
  text-decoration: none; /* removes underline on links */
  font-family: 'Segoe UI';
  font-size: 25px;
  color: #707070;
}

li:hover>.dropdown-content {
  display: block; 
}
<nav class="nav" id="primary-nav">
  <ul>
    <li class="nav-tab">Products
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">Range</a></li>
        <li><a href="#" class="sub-nav-link">Catalogue</a></li>
        <li><a href="#" class="sub-nav-link">Search</a></li>
      </ul>
    </li>
    <li class="nav-tab">About Us
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">Mission</a></li>
        <li><a href="#" class="sub-nav-link">Background</a></li>
        <li><a href="#" class="sub-nav-link">Design</a></li>
        <li><a href="#" class="sub-nav-link">Production</a></li>
      </ul>
    </li>
    <li class="nav-tab">Events
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">Calendar</a></li>
        <li><a href="#" class="sub-nav-link">link 2</a></li>
        <li><a href="#" class="sub-nav-link">link 3</a></li>
      </ul>
    </li>
    <li class="nav-tab">Stockists
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">List</a></li>
        <li><a href="#" class="sub-nav-link">link 2</a></li>
        <li><a href="#" class="sub-nav-link">link 3</a></li>
      </ul>
    </li>
    <li class="nav-tab">Contact
      <ul class="dropdown-content">
        <li><a href="#" class="sub-nav-link">Feedback</a></li>
        <li><a href="#" class="sub-nav-link">FAQ</a></li>
        <li><a href="#" class="sub-nav-link">Details</a></li>
      </ul>
    </li>
  </ul>
</nav>

关于html - 我怎样才能像示例图像那样将子列表项居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53277852/

相关文章:

html - CSS 溢出 :hidden hiding a list's bullets?

javascript - 在一个位置点击,在其他地方注册为点击

php - 动态加载 <ul> 并排序为 5 行的列

html - 使所有列翻转并在后面显示文本

javascript - 如何正确禁用与 input-group-addon 一起使用的跨度

CSS - 按设定比例填充

javascript - 为什么下面的 Javascript 代码(设置 CSS 样式)不起作用?

html - Firefox 从斜杠中打破单词

javascript - 如何给网页添加背景音乐?

javascript - 单击元素时取消选择其他元素