CSS:对齐面包屑
CSS: Aligning breadcrumb
我正在尝试将面包屑与其主体的其余部分对齐。
BODY {
height: 100%;
overflow: hidden;
background-color: tan;
}
/* breadcrumb styles */
#test-breadcrumb ul {
list-style: none;
display: inline-table;
padding-left: 2px;
}
#test-breadcrumb ul li {
display: block;
float: left;
line-height: 32px;
vertical-align: middle;
text-align: center;
position: relative;
margin: 0 8px 0 0;
font-size: 14px;
padding-top: 0px;
padding-bottom: 0px;
}
#test-breadcrumb ul li.test-breadcrumb-active {
background: #00abe2;
padding-right: 15px;
padding-left: 10px;
color: #ffffff;
}
#test-breadcrumb ul li:after {
content: "";
border-top: 16px solid transparent;
border-bottom: 16px solid transparent;
position: absolute;
right: -15px;
top: 0;
z-index: 1;
}
#test-breadcrumb ul li.test-breadcrumb-active:after {
border-left: 16px solid #00abe2;
}
#test-breadcrumb ul li:before {
content: "";
border-top: 16px solid transparent;
border-bottom: 16px solid transparent;
border-left: 16px solid #efefef;
position: absolute;
left: 0;
top: 0;
}
#test-breadcrumb ul li:first-child {
padding-left: 20px;
}
#test-breadcrumb ul li:first-child:before {
display: none;
}
.test-breadcrumb-area {
padding: 32px 0 12px 0;
margin-left: 10px;
}
.test-navbutton-inactive {
cursor: pointer;
display: inline-block;
line-height: 32px;
vertical-align: middle;
text-align: center;
background: #ffffff;
color: #666666;
padding: 0px 20px;
margin-right: 4px;
margin-bottom: 8px;
text-decoration: none;
}
<div class="test-breadcrumbs">
<div class="test-breadcrumb-area">
<div id="test-breadcrumb">
<div id="test-navbutton-shared" class="test-navbutton-inactive">Shared</div>
<div id="test-navbutton-personal" class="test-navbutton-inactive">Personal</div>
<div id="test-navbutton-users" class="test-navbutton-inactive" style="cursor: pointer;">Users</div>
<ul>
<li id="test-breadcrumb-user-label" class="test-breadcrumb-active">test user 1</li>
</ul>
</div>
<div class="test-clear"></div>
</div>
</div>
这里是 jsfiddle
我注意到删除 line:14 上的 float:left
会稍微向下移动测试用户面包屑,但这并没有解决问题,我希望它会横向移动而不是垂直移动。我还添加了 vertical-align: middle
line:16 但是它似乎并没有太大的区别。
我应该修改什么才能正确对齐最后一个面包屑?
您希望为其提供与正文其余部分相同的边距,并将其垂直对齐到底部。
例如:
#test-breadcrumb ul {
margin-bottom: 8px;
vertical-align: bottom;
}
https://jsfiddle.net/1Lpk8qdd/9/
编辑
更好的解决方案是删除边距并将其垂直对齐到顶部。
例如:
#test-breadcrumb ul {
margin: 0;
vertical-align: top;
}
您可以按照 Vic 的回答修复 CSS,这是完全合法的,但我认为这是标记和样式过于复杂的问题。如果您使用适合您要解决的问题的标记,您可以避免很多未来的麻烦。
解决方案
这是 inline-block
元素的完美用例,它适用于列出多个需要具有块级属性(如填充、背景颜色等)的内联元素。而不是尝试协调浮动和非浮动元素,使所有项目成为无序列表的一部分,并使用更广泛的 类 来设置列表项目的样式。
我已将您的 HTML 和 CSS 简化为使用 类 和更简单的标记来实现相同的效果:
body {
background: tan;
}
.breadcrumb-wrap {
list-style: none;
margin: 0;
padding: 0;
}
.breadcrumb {
background: #fff;
color: #666;
cursor: pointer;
display: inline-block;
font-size: 1em;
line-height: 2em;
margin: 0 8px 0 0;
padding: 0px 20px;
text-align: center;
vertical-align: middle;
}
.breadcrumb.active {
background: #00abe2;
color: #fff;
padding: 0 15px 0 10px;
position: relative;
}
.breadcrumb.active:after {
content:"";
border-bottom: 16px solid transparent;
border-left: 16px solid #00abe2;
border-top: 16px solid transparent;
position: absolute;
right: -15px;
top: 0;
z-index: 1;
}
<ul class="breadcrumb-wrap">
<li class="breadcrumb">Shared</li>
<li class="breadcrumb">Personal</li>
<li class="breadcrumb">Users</li>
<li class="breadcrumb active">Test User 1</li>
</ul>
我正在尝试将面包屑与其主体的其余部分对齐。
BODY {
height: 100%;
overflow: hidden;
background-color: tan;
}
/* breadcrumb styles */
#test-breadcrumb ul {
list-style: none;
display: inline-table;
padding-left: 2px;
}
#test-breadcrumb ul li {
display: block;
float: left;
line-height: 32px;
vertical-align: middle;
text-align: center;
position: relative;
margin: 0 8px 0 0;
font-size: 14px;
padding-top: 0px;
padding-bottom: 0px;
}
#test-breadcrumb ul li.test-breadcrumb-active {
background: #00abe2;
padding-right: 15px;
padding-left: 10px;
color: #ffffff;
}
#test-breadcrumb ul li:after {
content: "";
border-top: 16px solid transparent;
border-bottom: 16px solid transparent;
position: absolute;
right: -15px;
top: 0;
z-index: 1;
}
#test-breadcrumb ul li.test-breadcrumb-active:after {
border-left: 16px solid #00abe2;
}
#test-breadcrumb ul li:before {
content: "";
border-top: 16px solid transparent;
border-bottom: 16px solid transparent;
border-left: 16px solid #efefef;
position: absolute;
left: 0;
top: 0;
}
#test-breadcrumb ul li:first-child {
padding-left: 20px;
}
#test-breadcrumb ul li:first-child:before {
display: none;
}
.test-breadcrumb-area {
padding: 32px 0 12px 0;
margin-left: 10px;
}
.test-navbutton-inactive {
cursor: pointer;
display: inline-block;
line-height: 32px;
vertical-align: middle;
text-align: center;
background: #ffffff;
color: #666666;
padding: 0px 20px;
margin-right: 4px;
margin-bottom: 8px;
text-decoration: none;
}
<div class="test-breadcrumbs">
<div class="test-breadcrumb-area">
<div id="test-breadcrumb">
<div id="test-navbutton-shared" class="test-navbutton-inactive">Shared</div>
<div id="test-navbutton-personal" class="test-navbutton-inactive">Personal</div>
<div id="test-navbutton-users" class="test-navbutton-inactive" style="cursor: pointer;">Users</div>
<ul>
<li id="test-breadcrumb-user-label" class="test-breadcrumb-active">test user 1</li>
</ul>
</div>
<div class="test-clear"></div>
</div>
</div>
这里是 jsfiddle
我注意到删除 line:14 上的 float:left
会稍微向下移动测试用户面包屑,但这并没有解决问题,我希望它会横向移动而不是垂直移动。我还添加了 vertical-align: middle
line:16 但是它似乎并没有太大的区别。
我应该修改什么才能正确对齐最后一个面包屑?
您希望为其提供与正文其余部分相同的边距,并将其垂直对齐到底部。
例如:
#test-breadcrumb ul {
margin-bottom: 8px;
vertical-align: bottom;
}
https://jsfiddle.net/1Lpk8qdd/9/
编辑
更好的解决方案是删除边距并将其垂直对齐到顶部。
例如:
#test-breadcrumb ul {
margin: 0;
vertical-align: top;
}
您可以按照 Vic 的回答修复 CSS,这是完全合法的,但我认为这是标记和样式过于复杂的问题。如果您使用适合您要解决的问题的标记,您可以避免很多未来的麻烦。
解决方案
这是 inline-block
元素的完美用例,它适用于列出多个需要具有块级属性(如填充、背景颜色等)的内联元素。而不是尝试协调浮动和非浮动元素,使所有项目成为无序列表的一部分,并使用更广泛的 类 来设置列表项目的样式。
我已将您的 HTML 和 CSS 简化为使用 类 和更简单的标记来实现相同的效果:
body {
background: tan;
}
.breadcrumb-wrap {
list-style: none;
margin: 0;
padding: 0;
}
.breadcrumb {
background: #fff;
color: #666;
cursor: pointer;
display: inline-block;
font-size: 1em;
line-height: 2em;
margin: 0 8px 0 0;
padding: 0px 20px;
text-align: center;
vertical-align: middle;
}
.breadcrumb.active {
background: #00abe2;
color: #fff;
padding: 0 15px 0 10px;
position: relative;
}
.breadcrumb.active:after {
content:"";
border-bottom: 16px solid transparent;
border-left: 16px solid #00abe2;
border-top: 16px solid transparent;
position: absolute;
right: -15px;
top: 0;
z-index: 1;
}
<ul class="breadcrumb-wrap">
<li class="breadcrumb">Shared</li>
<li class="breadcrumb">Personal</li>
<li class="breadcrumb">Users</li>
<li class="breadcrumb active">Test User 1</li>
</ul>