无法增加面包屑(ol 列表)的宽度以填充父项
Trouble increasing width of breadcrumb (ol list) to fill parent
我正在尝试在我的 Bootstrap 支持的网站上构建一个简单的面包屑导航系统。
我使用红队设计 CSS3 面包屑作为灵感。
这是我目前得到的:
我想做的是确保最后一个活动面包屑的宽度始终填充父 ol
元素。所以最终产品应该是这样的:
我试过弄乱边距和填充以及其他一些东西,但似乎没有任何效果。
HTML:
<ol class="breadcrumb">
<li><a href="home.html"><i class="fa fa-home"></i><span> </span></a></li>
<li><a><span>Travel </span></a></li>
<li class="current"><a><span>Destination </span></a></li>
</ol>
(注意 - 我决定使用 .current
class 而不是 Bootstrap .active
class)
这是CSS:
ul {
margin:0;
padding:0;
list-style:none;
}
.breadcrumb {
overflow:hidden;
width:100%;
}
.breadcrumb > li + li:before {
content:none;
}
.breadcrumb li {
float:left;
margin:0 .5em 0 1em;
}
.breadcrumb a {
background:#ddd;
padding:.7em 1em;
float:left;
text-decoration:none;
color:#444;
text-shadow:0 1px 0 rgba(255,255,255,.5);
position:relative;
}
.breadcrumb a:hover {
background:#efc9ab;
}
.breadcrumb a::before, .breadcrumb a::after {
content:'';
position:absolute;
top:0;
bottom:0;
width:1em;
background:#ddd;
transform:skew(-10deg);
}
.breadcrumb a::before {
left:-.5em;
border-radius:5px 0 0 5px;
}
.breadcrumb a:hover::before {
background:#efc9ab;
}
.breadcrumb a::after {
right:-.5em;
border-radius:0 5px 5px 0;
}
.breadcrumb a:hover::after {
background:#efc9ab;
}
.breadcrumb .current {
padding-right:500px;
}
.breadcrumb .current, .breadcrumb .current:hover {
font-weight:bold;
}
.breadcrumb .current::after, .breadcrumb .current::before {
content:normal;
}
这可以使用 flex (comprehensive guide) 来解决。我有
- 将
ol
设置为 display: flex;
以启用 flexbox 布局;
- 从列表项中删除了
float
指令;
- 从
.current
项中删除了 padding-right
;
- 在项目
display: block;
和填充宽度内制作锚点;
- 使
.current
项目可以随 flex-grow: 1; max-width: 100%;
增长;
- 创建了一个小演示,包含在下面。
ol {
margin: 0;
padding: 0;
list-style: none;
}
.breadcrumb {
display: flex;
}
.breadcrumb li {
margin: 0 .5em 0 1em;
max-width: 100%;
}
.breadcrumb a {
position: relative;
display: block;
box-sizing: border-box;
width: 100%;
background: #ddd;
padding: .7em 1em;
float: left;
text-decoration: none;
color: #444;
text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
}
.breadcrumb a:hover {
background: #efc9ab;
}
.breadcrumb a::before,
.breadcrumb a::after {
content: '';
position: absolute;
top: 0;
bottom: 0;
width: 1em;
background: #ddd;
transform: skew(-10deg);
}
.breadcrumb a::before {
left: -.5em;
border-radius: 5px 0 0 5px;
}
.breadcrumb a:hover::before {
background: #efc9ab;
}
.breadcrumb a::after {
right: -.5em;
border-radius: 0 5px 5px 0;
}
.breadcrumb a:hover::after {
background: #efc9ab;
}
.breadcrumb .current,
.breadcrumb .current:hover {
flex-grow: 1;
font-weight: bold;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-home"></i></a></li>
<li><a href="#">Travel</a></li>
<li class="current"><a href="#">Destination</a></li>
</ol>
我正在尝试在我的 Bootstrap 支持的网站上构建一个简单的面包屑导航系统。
我使用红队设计 CSS3 面包屑作为灵感。
这是我目前得到的:
我想做的是确保最后一个活动面包屑的宽度始终填充父 ol
元素。所以最终产品应该是这样的:
我试过弄乱边距和填充以及其他一些东西,但似乎没有任何效果。
HTML:
<ol class="breadcrumb">
<li><a href="home.html"><i class="fa fa-home"></i><span> </span></a></li>
<li><a><span>Travel </span></a></li>
<li class="current"><a><span>Destination </span></a></li>
</ol>
(注意 - 我决定使用 .current
class 而不是 Bootstrap .active
class)
这是CSS:
ul {
margin:0;
padding:0;
list-style:none;
}
.breadcrumb {
overflow:hidden;
width:100%;
}
.breadcrumb > li + li:before {
content:none;
}
.breadcrumb li {
float:left;
margin:0 .5em 0 1em;
}
.breadcrumb a {
background:#ddd;
padding:.7em 1em;
float:left;
text-decoration:none;
color:#444;
text-shadow:0 1px 0 rgba(255,255,255,.5);
position:relative;
}
.breadcrumb a:hover {
background:#efc9ab;
}
.breadcrumb a::before, .breadcrumb a::after {
content:'';
position:absolute;
top:0;
bottom:0;
width:1em;
background:#ddd;
transform:skew(-10deg);
}
.breadcrumb a::before {
left:-.5em;
border-radius:5px 0 0 5px;
}
.breadcrumb a:hover::before {
background:#efc9ab;
}
.breadcrumb a::after {
right:-.5em;
border-radius:0 5px 5px 0;
}
.breadcrumb a:hover::after {
background:#efc9ab;
}
.breadcrumb .current {
padding-right:500px;
}
.breadcrumb .current, .breadcrumb .current:hover {
font-weight:bold;
}
.breadcrumb .current::after, .breadcrumb .current::before {
content:normal;
}
这可以使用 flex (comprehensive guide) 来解决。我有
- 将
ol
设置为display: flex;
以启用 flexbox 布局; - 从列表项中删除了
float
指令; - 从
.current
项中删除了padding-right
; - 在项目
display: block;
和填充宽度内制作锚点; - 使
.current
项目可以随flex-grow: 1; max-width: 100%;
增长; - 创建了一个小演示,包含在下面。
ol {
margin: 0;
padding: 0;
list-style: none;
}
.breadcrumb {
display: flex;
}
.breadcrumb li {
margin: 0 .5em 0 1em;
max-width: 100%;
}
.breadcrumb a {
position: relative;
display: block;
box-sizing: border-box;
width: 100%;
background: #ddd;
padding: .7em 1em;
float: left;
text-decoration: none;
color: #444;
text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
}
.breadcrumb a:hover {
background: #efc9ab;
}
.breadcrumb a::before,
.breadcrumb a::after {
content: '';
position: absolute;
top: 0;
bottom: 0;
width: 1em;
background: #ddd;
transform: skew(-10deg);
}
.breadcrumb a::before {
left: -.5em;
border-radius: 5px 0 0 5px;
}
.breadcrumb a:hover::before {
background: #efc9ab;
}
.breadcrumb a::after {
right: -.5em;
border-radius: 0 5px 5px 0;
}
.breadcrumb a:hover::after {
background: #efc9ab;
}
.breadcrumb .current,
.breadcrumb .current:hover {
flex-grow: 1;
font-weight: bold;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-home"></i></a></li>
<li><a href="#">Travel</a></li>
<li class="current"><a href="#">Destination</a></li>
</ol>