CSS - 无序列表问题
CSS - Unordered list issue
我想将 ul
浮动到左侧,将列表项浮动到右侧,这样它们在 div
:
中看起来像这样
项目 1 项目 2 项目 3
CSS:
.body-nav {
width: 1090px;
margin: 0 auto 0 auto;
background-color: lightblue; }
.body-nav ul {
margin: 0;
padding: 0;
float: left;
list-style: none; }
.body-nav ul li {
float: right;
padding-right: 15px; }
我得到了链接以查看我希望它们的外观。这里的问题是我失去了我的背景颜色。就像这些链接在 div
.
之外
这是我的 HTML:
<header>
<div class="header-content">
<img src="images/logo.png" class="logo" alt="Site Logo">
<ul>
<li>24/7 Support (513) 571-7809</li>
<li><a href="#">Manage my account</a></li>
</ul>
</div>
</header>
<div class="body-nav">
<ul>
<li><a href="#">Web Hosting</a></li>
<li><a href="#">Reseller Hosting</a></li>
<li><a href="#">Domain Names</a></li>
<li><a href="#">SSL Certificates</a></li>
</ul>
</div><!--end body div-->
以下将解决您的问题 (http://jsfiddle.net/76y7wbf6/1/):
.body-nav {
overflow:hidden;
}
问题源于使用浮动,它在正常 DOM 流程之外稍微走了一步。您的 .body-nav
元素失去了对其子元素的追踪,并占据了 0(或 1px)的高度。
另一种选择是将 clearfix class 应用到 body-nav,它看起来像 (http://jsfiddle.net/76y7wbf6/):
.clearfix:after {
clear:both;
display: block;
content: ' ';
}
我喜欢用的一个比喻:[=16=]
Using floats is like traveling through hyperspace. They exist, kinda, and can impact other DOM elements... but they are also travelling at a different dimensional plane (left-right).
To bridge the float hyperspace travel, you can apply clear:both on itself or overflow:hidden on its parent.
... And if you apply float on a floating element's parent, it can provide a self-clear, but then that parent is traveling through hyperspace too.
为什么不使用浮动,为什么不使用 CSS3 并使用 flexbox 布局。将 UL 显示设置为 "inline-flex" 将为您提供具有浅蓝色背景的所需结果。
这只是为了向您展示有一些简单的方法可以实现您想要实现的目标(水平无序列表),而不是使用有限的方法,例如display:inline-flex
或complicated/tricky接近
最重要的是,我们不要把简单的事情复杂化。
所以,
从您的 .body-nav ul
中删除 float:left
(在那里没有意义)
将您的 .body-nav ul li
设置为 display inline
(这样 li
将按其状态显示 - 内联 - 而不是默认行为 display:list-item
下面的片段:
.body-nav {
width: 1090px;
margin: 0 auto 0 auto; /* you can shorthand this to - margin:0 auto - */
background-color: lightblue;
}
.body-nav ul {
margin: 0;
padding: 0;
list-style: none;
}
.body-nav ul li {
display:inline;
padding-right: 15px;
}
<header>
<div class="header-content">
<img src="images/logo.png" class="logo" alt="Site Logo">
<ul>
<li>24/7 Support (513) 571-7809</li>
<li><a href="#">Manage my account</a>
</li>
</ul>
</div>
</header>
<div class="body-nav">
<ul>
<li><a href="#">Web Hosting</a>
</li>
<li><a href="#">Reseller Hosting</a>
</li>
<li><a href="#">Domain Names</a>
</li>
<li><a href="#">SSL Certificates</a>
</li>
</ul>
</div>
<!--end body div-->
我想将 ul
浮动到左侧,将列表项浮动到右侧,这样它们在 div
:
项目 1 项目 2 项目 3
CSS:
.body-nav {
width: 1090px;
margin: 0 auto 0 auto;
background-color: lightblue; }
.body-nav ul {
margin: 0;
padding: 0;
float: left;
list-style: none; }
.body-nav ul li {
float: right;
padding-right: 15px; }
我得到了链接以查看我希望它们的外观。这里的问题是我失去了我的背景颜色。就像这些链接在 div
.
这是我的 HTML:
<header>
<div class="header-content">
<img src="images/logo.png" class="logo" alt="Site Logo">
<ul>
<li>24/7 Support (513) 571-7809</li>
<li><a href="#">Manage my account</a></li>
</ul>
</div>
</header>
<div class="body-nav">
<ul>
<li><a href="#">Web Hosting</a></li>
<li><a href="#">Reseller Hosting</a></li>
<li><a href="#">Domain Names</a></li>
<li><a href="#">SSL Certificates</a></li>
</ul>
</div><!--end body div-->
以下将解决您的问题 (http://jsfiddle.net/76y7wbf6/1/):
.body-nav {
overflow:hidden;
}
问题源于使用浮动,它在正常 DOM 流程之外稍微走了一步。您的 .body-nav
元素失去了对其子元素的追踪,并占据了 0(或 1px)的高度。
另一种选择是将 clearfix class 应用到 body-nav,它看起来像 (http://jsfiddle.net/76y7wbf6/):
.clearfix:after {
clear:both;
display: block;
content: ' ';
}
我喜欢用的一个比喻:[=16=]
Using floats is like traveling through hyperspace. They exist, kinda, and can impact other DOM elements... but they are also travelling at a different dimensional plane (left-right).
To bridge the float hyperspace travel, you can apply clear:both on itself or overflow:hidden on its parent.
... And if you apply float on a floating element's parent, it can provide a self-clear, but then that parent is traveling through hyperspace too.
为什么不使用浮动,为什么不使用 CSS3 并使用 flexbox 布局。将 UL 显示设置为 "inline-flex" 将为您提供具有浅蓝色背景的所需结果。
这只是为了向您展示有一些简单的方法可以实现您想要实现的目标(水平无序列表),而不是使用有限的方法,例如display:inline-flex
或complicated/tricky接近
最重要的是,我们不要把简单的事情复杂化。
所以,
从您的
.body-nav ul
中删除float:left
(在那里没有意义)将您的
.body-nav ul li
设置为display inline
(这样li
将按其状态显示 - 内联 - 而不是默认行为display:list-item
下面的片段:
.body-nav {
width: 1090px;
margin: 0 auto 0 auto; /* you can shorthand this to - margin:0 auto - */
background-color: lightblue;
}
.body-nav ul {
margin: 0;
padding: 0;
list-style: none;
}
.body-nav ul li {
display:inline;
padding-right: 15px;
}
<header>
<div class="header-content">
<img src="images/logo.png" class="logo" alt="Site Logo">
<ul>
<li>24/7 Support (513) 571-7809</li>
<li><a href="#">Manage my account</a>
</li>
</ul>
</div>
</header>
<div class="body-nav">
<ul>
<li><a href="#">Web Hosting</a>
</li>
<li><a href="#">Reseller Hosting</a>
</li>
<li><a href="#">Domain Names</a>
</li>
<li><a href="#">SSL Certificates</a>
</li>
</ul>
</div>
<!--end body div-->