【问题标题】:Why is ul aligned to the bottom为什么 ul 底部对齐
【发布时间】:2017-01-04 10:11:47
【问题描述】:

一个多小时以来,我一直在认真地处理这件事。基本上我有一个导航栏,最左边有一个图标,链接与图像底部对齐。

我尝试过处理填充、边距、行高、垂直对齐以及我能想到的所有其他内容。我还尝试在 ul 内部和之前放置图像。我需要将 ul 项目(将是链接)垂直对齐到图标的中心。

我已将所有代码放入一个文件中,我将在此处复制。此外,当您发布时,请解释为什么解决方案会起作用,而不仅仅是发布代码。我在此处发布之前搜索的其他有关此的帖子没有解释任何内容,只是包含了在我尝试时没有帮助的代码。不幸的是,因为我不知道解决方案是什么或它与什么相关,所以我将所有代码都包括在内。

body {
  margin: 0;
  /*background-color: #10f009;*/
  font-size: 62.5%;
  font-family: sans-serif;
}
img {
  margin: 0 0 0 0;
  max-width: 100%;
  height: 50%;
}
.smallSection {
  margin: 100px;
}
.paragraph {
  font-size: 2em;
  max-width: 500px;
}
.title {
  font-size: 2.4em;
}
.list {
  list-style: solid inside url("");
  font-size: 2em;
}
.nav-link {
  list-style-type: none;
  display: inline-block;
  text-align: center;
  font-size: 2em;
  width: 200px;
  border: 1px solid red;
}
.nav-icon {
  display: inline-block;
  border: 1px solid red;
}
.largeSection {} #section1 {
  background-image: url("../img/placeholder.jpg")
}
#nav {
  border: 1px solid red;
  margin: 0;
  padding: 0;
  align: top;
  height: 100px;
  line-height: 1;
}
/*temporary*/

div {
  border: 1px solid red;
}
<!-- Dawn Little -->
<div id="section1" class="largeSection">
  <!-- Navigation -->
  <div>
    <ul id="nav">
      <div style="width:70px;height:70px;border: 1px solid red;display: inline-block;">
        <!-- The img link is obviously broken so this is here instead. -->
      </div>
      <!-- <img src="img/herbfalife-icon.png" width="70px" height="70px" class="nav-icon"> -->
      <li class="nav-link">Who am I</li>
      <li class="nav-link">What I do</li>
      <li class="nav-link">3-Day Trial</li>
      <li class="nav-link">Challenges</li>
      <li class="nav-link">Become a Coach</li>
    </ul>
  </div>
  <div class="smallSection">
    <p class="paragraph">
      <span class="title">Client Name<br /></span> Hi, I'm a wife, mother, and Personal Wellness Coach with Herbalife Nutrition. My super power - I change lives.
    </p>
  </div>
</div>
<!-- What I do -->
<div id="section2" class="largeSection">
  <div class="smallSection">
    <p class="paragraph">
      <span class="title">What I do</span>
      <ul class="list">
        <li>Wellness Evaluations</li>
        <li>Nutrition Coaching</li>
        <li>Impact Lifestyle</li>
        <li>Get Results</li>
        <li>Coach Coaches</li>
      </ul>
    </p>
  </div>
</div>
<!-- 3-day trial -->
<div id="section3" class="largeSection">
  <div class="smallSection">
    <p class="title">
      Try Our 3-Day Trial
    </p>
    <p class="title">
      What you get:
    </p>
    <ul class="list">
      <li>Personal Wellness Coach</li>
      <li>Wellness Evaluation</li>
      <li>Meal Plan</li>
      <li>Daily Support</li>
      <li>Plan of Action</li>
      <li>6 Meals</li>
      <li>Metabolism Booster</li>
    </ul>
  </div>
</div>
<!-- Challenges -->
<div id="section4" class="largeSection">
  <div class="smallSection">
    <p class="title">
      Join a Weight Loss Challenge
    </p>
    <p class="title">What you get:</p>
    <ul class="list">
      <li>Personal Wellness Evaluation</li>
      <li>Personalized Program</li>
      <li>Nutrition Classes</li>
      <li>ommunity of Support</li>
      <li>Accountability</li>
      <li>Opportunity to Win Cash &amp Prizes</li>
    </ul>
  </div>
</div>
<!-- Become a coach -->
<div id="section5" class="largeSection">
  <div class="smallSection">
    <p class="title">
      Become a Coach
    </p>
    <p class="title">
      What you get:
    </p>
    <ul class="list">
      <li>Opportunity to Change Lives</li>
      <li>Opportunity for Personal &amp Financial Growth</li>
      <li>Training</li>
      <li>Potential to Change Lives in Over 90 Countries</li>
      <li>Be Part of a Team</li>
      <li>Get in the Best Shape You've Ever Been</li>
    </ul>
  </div>
</div>

【问题讨论】:

  • 我找到了一个技术上可行的解决方案,但它有点 hacky。我必须将#nav 高度和行高都设置为 70 像素。图像仍然高约 26 像素(或链接太低 26 像素),所以我将图像相对对齐了这么多。如果有人有更好的解决方案,我将不胜感激。

标签: html css html-lists vertical-alignment webpage


【解决方案1】:

这种编码方式有点难以对齐。我将重写你的代码。但是,我建议您使用 CSS 框架,例如 bootstrap 或 zurb。

首先,你需要像

这样重写HTML部分
 <!-- Navigation -->
    <div class="header clearfix">
     <div class="logo">
          <!-- The img link is obviously broken so this is here instead. -->
     </div>
     <div class="nagivation">
      <ul id="nav">
        <li class="nav-link">Who am I</li>
        <li class="nav-link">What I do </li>
        <li class="nav-link">3-Day Trial</li>
        <li class="nav-link">Challenges</li>
        <li class="nav-link">Become a Coach</li>
      </ul>
        </div>
    </div>

我添加了headernagivation 然后将这些行添加到您的 CSS 到

  .clearfix:after {
     visibility: hidden;
     display: block;
     font-size: 0;
     content: " ";
     clear: both;
     height: 0;
     }
.clearfix { display: inline-block; }
/* start commented backslash hack \*/
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* close commented backslash hack */

.header{
  min-height:70px;
  clear:both
}
.logo{
  width:20%;
  float:left;
}
.nagivation{
  width:80%;
  float:right;
}

您还需要在 CSS 代码中删除 #nav

根据你的需要,你可以改变这个类

.nagivation #nav{

// add needed adjustment  
}

您可以在这里https://jsfiddle.net/mhadaily/7f152z3r/访问所有代码

【讨论】:

  • 在所有回复中,这个似乎效果最好。对于我的大脑来说,完成你所做的事情为时已晚,但我会在早上看它,如果它仍然是最好的答案,我会这样标记它。非常感谢。
【解决方案2】:

完成您想要的最简单的方法是简单地浮动图标,如下面的css和this pen中所示。

    #nav {
      border: 1px solid red;
      height:100px;
      line-height:1;
      display:inline-block;
    }
    .nav-icon {
        display: inline-block;
        border: 1px solid red;
        float:left;
     }

浮动强制其他元素围绕浮动元素流动。您只想对浮动保持警惕,因为如果您不保持警惕(它们会折叠其父容器),它们会对您的布局造成严重破坏。您可以阅读有关它的所有信息here

【讨论】:

  • 嘿,谢谢,这看起来很有希望。但是,当我查看您的钢笔链接时,它显示的文本与图像顶部对齐。它需要与中间对齐。
  • 嘿,我又看了看钢笔,我所要做的就是将它相对对齐,让它在图像的中间。
【解决方案3】:

我不是 UI 专家。但是通过查看下面的标签,我可以问你几个问题来理解?因为您在 ul 中编写非 li 标签。尝试用 li 标签包装你的代码。 只需转到 w3cshool 链接即可。

http://www.w3schools.com/html/tryit.asp?filename=tryhtml_lists_menu

http://www.w3schools.com/html/html_lists.asp

 <ul id="nav">
    <div style="width:70px;height:70px;border: 1px solid red;display: inline-block;">
      <!-- The img link is obviously broken so this is here instead. -->
    </div>
    <!-- <img src="img/herbfalife-icon.png" width="70px" height="70px" class="nav-icon"> -->
    <li class="nav-link">Who am I</li>
    <li class="nav-link">What I do </li>

【讨论】:

  • 哦,这可能是因为当我将代码复制到 SO 中时,我感到沮丧和不耐烦,所以它并不完全以一种有意义的方式。我确实在 li 标签内以及在 ul 之外的图像进行了尝试,显然 ul 内没有 li 标签。感谢您指出这一点。
【解决方案4】:

简单地将li 元素向上移动一点怎么样?

.nav-link { 
    position: relative; 
    bottom: 20px;
}

【讨论】:

  • 我试过了,我现在不记得结果了,而且太晚了所以我现在不打算尝试,但它没有奏效。不过还是谢谢。
  • 我将它与您提供的确切代码一起使用,它对我有用。请在有能力的时候再试一次。
  • 啊,我明白我做了什么。我曾尝试相对对齐顶部,而不是底部。您的解决方案确实有效,但是我决定实际上只是相对对齐图像,因此图像和页面顶部之间有一点空间。昨晚我一定很累,看不到这种可能性。
【解决方案5】:

首先,应该在&lt;ul&gt; 中的唯一元素是&lt;li&gt;&lt;div&gt;(或链接或任何实际存在的内容)可能会让您感到悲伤。

然而,真正的问题是您在错误的元素上使用了错误的 CSS 属性。你想要vertical-align(不是“对齐”),它应该应用于列表项(而不是容器)。

试试这个:

<ul>
  <li class="nav-link"><!-- img here --></li>
  <li class="nav-link">Who am I</li>
  <li class="nav-link">What I do</li>
  <li class="nav-link">3-Day Trial</li>
  <li class="nav-link">Challenges</li>
  <li class="nav-link">Become a Coach</li>
</ul>

.nav-link { vertical-align: middle; }

【讨论】:

  • 对齐的东西是一个测试(其中之一)。 Aso 对于垂直对齐,我尝试了以各种方式尝试它。在所有相关章节中没有任何解决方案。无论如何,谢谢。
  • 我用您给定的代码尝试了我的解决方案,它工作得很好...您还没有告诉我们更多上下文和/或其他要求吗?
  • 不,我想我把所有相关代码都复制进去了,我用的是 chrome,你用的是别的吗?我怀疑是这样,但也许。
猜你喜欢
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2012-02-04
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2017-08-03
相关资源
最近更新 更多