html - 如何使用 CSS 强制列表项显示在一行上?

标签 html css html-lists

我将列表项用作“假菜单项”,如下所示:

 <li>Match
    <ul class="second-level-menu">
      <li class="inlineblock" id="mniMatchWorkersWithJobLocs" name="mniMatchWorkersWithJobLocs">Workers with Jobs/Locations</li>
      <li id="mniMatchWorkersWithShifts" name="mniMatchWorkersWithShifts">Workers with Shifts</li>
    </ul>
  </li>

问题是较长的子菜单项,例如“Workers with Jobs/Locations”,会分两行;我希望他们保持在一条线上。

我伪聪明地认为只需将 li 分配给这个类就足够了:

.inlineblock {
  display: inline-block;
}

...但它并没有削减芥末。我错过了什么或想错了什么?

更新

根据答案,我现在有了这个 CSS:

.inlineblock {
  display: inline-block;
}
li.inlineblock ul li{
  display: inline-block;
}

...以及这个 HTML:

  <li class="inlineblock">Match
    <ul class="second-level-menu">
      <li id="mniMatchWorkersWithJobLocs" name="mniMatchWorkersWithJobLocs">Workers with Jobs/Locations</li>
      <li id="mniMatchWorkersWithShifts" name="mniMatchWorkersWithShifts">Workers with Shifts</li>
    </ul>
  </li>

...但我仍然看到这个:

enter image description here

这是伪造菜单的完整 HTML:

<template name="mnuScheduler">
  <div class="grid">
    <div class="col-All">
      <nav>
        <ul class="top-level-menu">
          <li>Schedules
            <ul class="second-level-menu">
              <li id="mniOpenExisting" name="mniOpenExisting">Open Existing</li>
              <li>Create New...
                <ul class="third-level-menu">
                  <li id="mniCreateNewScheduleBasedOnExisting" name="mniCreateNewScheduleBasedOnExisting">Based on Existing</li>
                  <li id="mniCreateNewScheduleFromScratch" name="mniCreateNewScheduleFromScratch">From Scratch</li>
                </ul>
              </li>
              <li id="mniSaveCurrentSchedule" name="mniSaveCurrentSchedule">Save Current</li>
              <li id="mniEmailCurrentSchedule" name="mniEmailCurrentSchedule">Email Current</li>
              <li id="mniPrintCurrentSchedule" name="mniPrintCurrentSchedule">Print Current</li>
            </ul>
          </li>
          <li>Jobs/Locations
            <ul class="second-level-menu">
              <li id="mniAddNewJobLoc" name="mniAddNewJobLoc">Add New</li>
              <li id="mniViewOrEditJobLoc" name="mniViewOrEditJobLoc">View or Edit</li>
            </ul>
          </li>
          <li>Shifts
            <ul class="second-level-menu">
              <li id="mniAddNewShift" name="mniAddNewShift">Add New</li>
              <li id="mniViewOrEditShift" name="mniViewOrEditShift">View or Edit</li>
            </ul>
          </li>
          <li>Workers
            <ul class="second-level-menu">
              <li id="mniAddNewWorker" name="mniAddNewWorker">Add New</li>
              <li id="mniViewOrEditWorker" name="mniViewOrEditWorker">View or Edit</li>
            </ul>
          </li>
          <li class="inlineblock">Match
            <ul class="second-level-menu">
              <li id="mniMatchWorkersWithJobLocs" name="mniMatchWorkersWithJobLocs">Workers with Jobs/Locations</li>
              <li id="mniMatchWorkersWithShifts" name="mniMatchWorkersWithShifts">Workers with Shifts</li>
            </ul>
          </li>
          <li>Rules
            <ul class="second-level-menu">
              <li id="mniSetRules" name="mniSetRules">Establish/Maintain</li>
            </ul>
          </li>
          <li>Help
            <ul class="second-level-menu">
              <li id="mniAbout" name="mniAbout">About</li>
              <li id="mniHowTo" name="mniHowTo">How To...</li>
              <li id="mniContact" name="mniContact">Contact Us</li>
              <li id="mniAcquireLicense" name="mniAcquireLicense">Acquire License</li>
            </ul>
          </li>
        </ul>
      </nav>
    </div>
  </div>
</template>

更新 2

这个:

CSS:
.inlineblock {
  white-space: nowrap;
}
li.inlineblock ul li{
  display: inline-block;
}

HTML:

  <li class="inlineblock">Match
    <ul class="second-level-menu">
      <li id="mniMatchWorkersWithJobLocs" name="mniMatchWorkersWithJobLocs">Workers with Jobs/Locations</li>
      <li id="mniMatchWorkersWithShifts" name="mniMatchWorkersWithShifts">Workers with Shifts</li>
    </ul>
  </li>

...导致两个子菜单项出现在同一行(向前一步,向后两步)

这个:

/*.inlineblock {
  white-space: nowrap;
}
li.inlineblock ul li{
  display: inline-block;
}*/
li {
  white-space: nowrap;
}

...确实将两个菜单项放在各自单独的行中,但第一个被“截断”(它显示为“Workers with Jobs/Lo”)

更新 3

应 Joseph Marikle 的要求,这里是所有的 CSS:

html {
  font-family:'Segoe UI Light', 'Bookman Old Style', Calibri, Candara, serif;
}
header {
  background: #d2edf4;
  background-image: linear-gradient(to bottom, #d0edf5, #e1e5f0 100%);
  padding: 20px 15px 15px 15px;
  position: relative;
}
/*body {
  font-family: 'Palatino Linotype', 'Bookman Antigua', Palatino, serif;
  background-color: lightyellow;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;

  font-size: 14px;

  width:80%;
  margin-left:auto;
  margin-right:auto;
  padding: 10px 50px 200px;
}*/
body {
  height: 100%;
  min-height: 100%;
  width: 80%;
  margin: 0 auto;
  padding: 50px 48px 0;
  line-height: 1;
  color: #333;
  background: #FFF;
  font-family: ff-tis-web-pro, 'Palatino Linotype', 'Bookman Antigua', Palatino, Georgia, serif;
  -webkit-text-size-adjust: 100%;
}
nav {
    background-color: forestgreen;
}
form {
    background-color: lightyellow;
}
h1 {
  color: navy;
  font-family: "Segoe UI", serif;
  font-size: 2.5em;
  margin: 0;
  margin-bottom: 10px;
  display: inline-block;
  margin-right: 1em;
}
h2 {
  font-family: 'Bookman Old Style', Verdana, sans-serif;
}
input:focus {
  background-color: lightyellow;
}
input:hover {
  background-color: azure;
}
table {
  width: 1200px;
  margin: 0 auto;
  background-color: azure;
  /*min-height: 100%;*/
  margin-top: 80px;
}
table, th, td {
    border: 1px solid navy;
    border-collapse: collapse;
}
th, td {
    padding: 5px;
    /*text-align: left;*/
}
input[type="text"] {
  margin-bottom: 4px;
}
input[type="submit"] {
  margin-top: 8px;
}
input[type="time"] {
  margin: 3px;
}
p {
  font-size: 14px;
}

[class*='col-'] {
    float: left;
    margin: 4px;
}
.grid {
  background: white;
}
.module {
  background: lightyellow;
}
.col-All {
    width: 90%;
}
.col-2-3 {
    width: 60%;
}
.col-1-3 {
    width: 30%;
}
.col-1-2 {
    width: 45%;
}
.col-1-4 {
    width: 22.5%;
}

/* for aligning input texts that follow labels on forms and such; can create other sizes too (label120,etc.) */
.label88 {
    width: 88px;
    display: inline-block;
}
.label144 {
    width: 144px;
    display: inline-block;
}
.joblocoptionallabel {
  width: 124px;
  display: inline-block;
}
/*.inlineblock {
  white-space: nowrap;
}
li.inlineblock ul li{
  display: inline-block;
}*/
li {
  white-space: nowrap;
}
.hide {
  visibility: hidden;
  display: none;
}
.smallcaps {
    font-variant: small-caps;
}
.container {
  max-width: 1200px;
  margin: 0 auto;
  background: lightyellow;
}
.dateLabel {
  font-size: 16px;
  font-family: Candara, 'Segoe UI', sans-serif;
  color: forestgreen;
}
.shiftLabel {
  font-size: 13px;
  font-family: Calibri, serif;
  color: red;
}
.jobLoc {
  margin-right: 16px;
  width: 115px;
}
.jobLocCount {
  width: 40px;
}
.trabajar {
  width: 159px;
  margin-right: 16px;
  margin-top: 4px;
}
.shortTextInput {
    width: 64px;
}
.floatleft {
    float: left;
    display: block;
}
/* Menu-specific styles/rules, adapted from  */
.third-level-menu {
    position: absolute;
    top: 0;
    right: -150px;
    width: 150px;
    list-style: none;
    padding: 0;
    margin: 0;
    display: none;
}
.third-level-menu > li {
    height: 30px;
    background: gray;
}
.third-level-menu > li:hover {
    background: white;
}
.second-level-menu {
    position: absolute;
    top: 30px;
    left: 0;
    width: 150px;
    list-style: none;
    padding: 0;
    margin: 0;
    display: none;
}
.second-level-menu > li {
    position: relative;
    height: 30px;
    background: orange;
    color: white;
}
.second-level-menu > li:hover {
    background: green;
}
.top-level-menu {
    list-style: none;
    padding: 0;
    margin-bottom: 12px;
    width: 100%;
    display:block;
    /*border: 1px; <= not working*/
}
.top-level-menu > li {
    position: relative;
    float: left;
    height: 30px;
    width: 150px;
    background: moccasin;
}
.top-level-menu > li:hover {
    background: lightgray;
}
.top-level-menu li:hover > ul {
    /* On hover, display the next level's menu */
    display: inline;
}
/* End of Menu-specific Styles */

最佳答案

最初的问题是列表项环绕在一个菜单中,理想情况下应该将全名保持在一行中。第一个提议的解决方案是应用 white-space:nowrap,但在这个特定实例中,原始发布者有一个菜单可以切断溢出(使用 overflow:hidden) .为了克服这个问题,只需更改嵌入容器列表(一个简单的 ul 元素)的宽度就简单多了。 150px 的宽度最初设置大概是为了确保菜单对于具有短名称的元素的子菜单项看起来是统一的。通过将宽度设置(或保留)为 auto 并为其指定 min-width: 100%;,可以在不丢失超宽列表宽度的情况下实现相同的效果。这是有效的,因为子菜单是相对于父 li 项的。 100% 将与父级 li 的宽度相同。

TL;DR:总而言之,删除宽度并添加 100% 的最小宽度解决了 OP 的问题。

代码修改如下:

html {
  font-family:'Segoe UI Light', 'Bookman Old Style', Calibri, Candara, serif;
}
header {
  background: #d2edf4;
  background-image: linear-gradient(to bottom, #d0edf5, #e1e5f0 100%);
  padding: 20px 15px 15px 15px;
  position: relative;
}
/*body {
  font-family: 'Palatino Linotype', 'Bookman Antigua', Palatino, serif;
  background-color: lightyellow;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;

  font-size: 14px;

  width:80%;
  margin-left:auto;
  margin-right:auto;
  padding: 10px 50px 200px;
}*/
body {
  height: 100%;
  min-height: 100%;
  width: 80%;
  margin: 0 auto;
  padding: 50px 48px 0;
  line-height: 1;
  color: #333;
  background: #FFF;
  font-family: ff-tis-web-pro, 'Palatino Linotype', 'Bookman Antigua', Palatino, Georgia, serif;
  -webkit-text-size-adjust: 100%;
}
nav {
    background-color: forestgreen;
}
form {
    background-color: lightyellow;
}
h1 {
  color: navy;
  font-family: "Segoe UI", serif;
  font-size: 2.5em;
  margin: 0;
  margin-bottom: 10px;
  display: inline-block;
  margin-right: 1em;
}
h2 {
  font-family: 'Bookman Old Style', Verdana, sans-serif;
}
input:focus {
  background-color: lightyellow;
}
input:hover {
  background-color: azure;
}
table {
  width: 1200px;
  margin: 0 auto;
  background-color: azure;
  /*min-height: 100%;*/
  margin-top: 80px;
}
table, th, td {
    border: 1px solid navy;
    border-collapse: collapse;
}
th, td {
    padding: 5px;
    /*text-align: left;*/
}
input[type="text"] {
  margin-bottom: 4px;
}
input[type="submit"] {
  margin-top: 8px;
}
input[type="time"] {
  margin: 3px;
}
p {
  font-size: 14px;
}

[class*='col-'] {
    float: left;
    margin: 4px;
}
.grid {
  background: white;
}
.module {
  background: lightyellow;
}
.col-All {
    width: 90%;
}
.col-2-3 {
    width: 60%;
}
.col-1-3 {
    width: 30%;
}
.col-1-2 {
    width: 45%;
}
.col-1-4 {
    width: 22.5%;
}

/* for aligning input texts that follow labels on forms and such; can create other sizes too (label120,etc.) */
.label88 {
    width: 88px;
    display: inline-block;
}
.label144 {
    width: 144px;
    display: inline-block;
}
.joblocoptionallabel {
  width: 124px;
  display: inline-block;
}
/*.inlineblock {
  white-space: nowrap;
}
li.inlineblock ul li{
  display: inline-block;
}*/
li {
  white-space: nowrap;
}
.hide {
  visibility: hidden;
  display: none;
}
.smallcaps {
    font-variant: small-caps;
}
.container {
  max-width: 1200px;
  margin: 0 auto;
  background: lightyellow;
}
.dateLabel {
  font-size: 16px;
  font-family: Candara, 'Segoe UI', sans-serif;
  color: forestgreen;
}
.shiftLabel {
  font-size: 13px;
  font-family: Calibri, serif;
  color: red;
}
.jobLoc {
  margin-right: 16px;
  width: 115px;
}
.jobLocCount {
  width: 40px;
}
.trabajar {
  width: 159px;
  margin-right: 16px;
  margin-top: 4px;
}
.shortTextInput {
    width: 64px;
}
.floatleft {
    float: left;
    display: block;
}
/* Menu-specific styles/rules, adapted from  */
.third-level-menu {
    position: absolute;
    top: 0;
    right: -150px;
    width: 150px;
    list-style: none;
    padding: 0;
    margin: 0;
    display: none;
}
.third-level-menu > li {
    height: 30px;
    background: gray;
}
.third-level-menu > li:hover {
    background: white;
}
.second-level-menu {
    position: absolute;
    top: 30px;
    left: 0;
    /*width: 150px;*/
    min-width: 100%;
    list-style: none;
    padding: 0;
    margin: 0;
    display: none;
}
.second-level-menu > li {
    position: relative;
    height: 30px;
    background: orange;
    color: white;
}
.second-level-menu > li:hover {
    background: green;
}
.top-level-menu {
    list-style: none;
    padding: 0;
    margin-bottom: 12px;
    width: 100%;
    display:block;
    /*border: 1px; <= not working*/
}
.top-level-menu > li {
    position: relative;
    float: left;
    height: 30px;
    width: 150px;
    background: moccasin;
}
.top-level-menu > li:hover {
    background: lightgray;
}
.top-level-menu li:hover > ul {
    /* On hover, display the next level's menu */
    display: inline;
}
/* End of Menu-specific Styles */
<div class="grid">
    <div class="col-All">
      <nav>
        <ul class="top-level-menu">
          <li>Schedules
            <ul class="second-level-menu">
              <li id="mniOpenExisting" name="mniOpenExisting">Open Existing</li>
              <li>Create New...
                <ul class="third-level-menu">
                  <li id="mniCreateNewScheduleBasedOnExisting" name="mniCreateNewScheduleBasedOnExisting">Based on Existing</li>
                  <li id="mniCreateNewScheduleFromScratch" name="mniCreateNewScheduleFromScratch">From Scratch</li>
                </ul>
              </li>
              <li id="mniSaveCurrentSchedule" name="mniSaveCurrentSchedule">Save Current</li>
              <li id="mniEmailCurrentSchedule" name="mniEmailCurrentSchedule">Email Current</li>
              <li id="mniPrintCurrentSchedule" name="mniPrintCurrentSchedule">Print Current</li>
            </ul>
          </li>
          <li>Jobs/Locations
            <ul class="second-level-menu">
              <li id="mniAddNewJobLoc" name="mniAddNewJobLoc">Add New</li>
              <li id="mniViewOrEditJobLoc" name="mniViewOrEditJobLoc">View or Edit</li>
            </ul>
          </li>
          <li>Shifts
            <ul class="second-level-menu">
              <li id="mniAddNewShift" name="mniAddNewShift">Add New</li>
              <li id="mniViewOrEditShift" name="mniViewOrEditShift">View or Edit</li>
            </ul>
          </li>
          <li>Workers
            <ul class="second-level-menu">
              <li id="mniAddNewWorker" name="mniAddNewWorker">Add New</li>
              <li id="mniViewOrEditWorker" name="mniViewOrEditWorker">View or Edit</li>
            </ul>
          </li>
          <li class="inlineblock">Match
            <ul class="second-level-menu">
              <li id="mniMatchWorkersWithJobLocs" name="mniMatchWorkersWithJobLocs">Workers with Jobs/Locations</li>
              <li id="mniMatchWorkersWithShifts" name="mniMatchWorkersWithShifts">Workers with Shifts</li>
            </ul>
          </li>
          <li>Rules
            <ul class="second-level-menu">
              <li id="mniSetRules" name="mniSetRules">Establish/Maintain</li>
            </ul>
          </li>
          <li>Help
            <ul class="second-level-menu">
              <li id="mniAbout" name="mniAbout">About</li>
              <li id="mniHowTo" name="mniHowTo">How To...</li>
              <li id="mniContact" name="mniContact">Contact Us</li>
              <li id="mniAcquireLicense" name="mniAcquireLicense">Acquire License</li>
            </ul>
          </li>
        </ul>
      </nav>
    </div>
  </div>

关于html - 如何使用 CSS 强制列表项显示在一行上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653804/

相关文章:

javascript - currentTarget Javascript 的替代品

javascript - Jquery .next() 未按预期工作

jquery - iphone 和三星 galaxy 字体大小不同

html - 渐变叠加在文本上

jquery - div水平滚动时暂停垂直滚动,水平滚动结束时继续垂直滚动

css - 包含 <a href> 和 <span> 作为可点击链接的整个 <li> 元素

html - 每个 li 的不同列表样式图像

html - 堆叠 div 元素

jquery - 如何覆盖引导元素的默认内容?

html - jquery on click事件,li标签内的href