In bootstrap 2 the dropdown menu had an upwards arrow as it can be seen here (i am not talking about the carret). Now using bootstrap 3 or latest git this arrow doesn't exist in my simple example bellow nor in the examples on the bootstrap homepage.
在bootstrap 2中,下拉菜单中有一个向上的箭头,因为它可以在这里看到(我不是在谈论carret)。现在使用bootstrap 3或最新的git,这个箭头不存在于我的简单示例中,也不存在于bootstrap主页的示例中。
How can I add this arrow again using bootstrap 3?
如何使用bootstrap 3再次添加此箭头?
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
Menu
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="#">a</a></li>
<li><a href="#">b</a></li>
<li><a href="#">c</a></li>
</ul>
</li>
PS:To be precise the picture can be seen in another * article.
PS:准确地说,图片可以在另一个*文章中看到。
4 个解决方案
#1
150
You need to add :after and :before css rules to your dropdown-menu
. These rules are taken from Bootstrap 2, and are what draw the triangle above the dropdown.
您需要在下拉菜单中添加:after和:之前的css规则。这些规则取自Bootstrap 2,并且是在下拉列表上方绘制三角形的内容。
JSFiddle DEMO
.dropdown-menu:before {
position: absolute;
top: -7px;
left: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-left: 7px solid transparent;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.dropdown-menu:after {
position: absolute;
top: -6px;
left: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
border-left: 6px solid transparent;
content: '';
}
Confused how? See here for an animation that explains css triangles
困惑如何?请参阅此处获取解释css三角形的动画
#2
18
Just to follow up on this - if you want the arrow to position itself correctly (like when using it on a navbar element that is right-aligned, you need the following additional CSS to ensure the arrow is right-aligned:
只是为了跟进这个 - 如果你想让箭头正确定位(就像在右对齐的导航栏元素上使用它一样,你需要以下额外的CSS来确保箭头是右对齐的:
.navbar .navbar-right > li > .dropdown-menu:before,
.navbar .nav > li > .dropdown-menu.navbar-right:before {
right: 12px; left: auto;
}
.navbar .navbar-right > li > .dropdown-menu:after,
.navbar .nav > li > .dropdown-menu.navbar-right:after {
right: 13px; left: auto;
}
Note the "navbar-right" - that was introduced in BS3 instead of pull-right for navbars.
注意“navbar-right” - 在BS3中引入而不是用于导航栏的右拉。
#3
3
The CSS that Alexander Mistakidis provided is correct. Which is to say, it creates the arrow atop the dropdown menu in Bootstrap. In order to position it correctly in a responsive view (@user2993108), you can change the left
attribute for each of the class selectors (.dropdown-menu:before
,.dropdown-menu:after
) at different media queries or breakpoints.
Alexander Mistakidis提供的CSS是正确的。也就是说,它会在Bootstrap的下拉菜单中创建箭头。为了在响应式视图中正确定位(@ user2993108),您可以在不同的媒体查询或断点处更改每个类选择器(.dropdown-menu:before,.dropdown-menu:after)的左侧属性。
For example...
例如...
@media (max-width: 400px) {
.dropdown-menu:before {
position: absolute;
top: -7px;
left: 30px; /* change for positioning */
...
}
.dropdown-menu:after {
position: absolute;
top: -6px;
left: 31px; /* change for positioning */
...
}
}
@media (max-width: 767px) and (min-width: 401px) {
.dropdown-menu:before {
position: absolute;
top: -7px;
left: 38px; /* change for positioning */
...
}
.dropdown-menu:after {
position: absolute;
top: -6px;
left: 39px; /* change for positioning */
...
}
}
and so on...
等等...
#4
2
This builds on the work by Alexander Mistakidis and Joyrex to support optional arrows and dropup menus. In my case I did not want to have an arrow on all of the dropdown menus, only some.
这是基于Alexander Mistakidis和Joyrex的工作,以支持可选的箭头和下拉菜单。在我的情况下,我不想在所有下拉菜单上都有箭头,只有一些。
With this, you add the arrow
class to the dropdown-menu
element to get the arrow. If Bootstrap is positioning the dropdown/dropup to the left, also add arrow-right
to shift the arrow to the other side.
这样,您可以将箭头类添加到下拉菜单元素以获取箭头。如果Bootstrap将下拉/下拉定位到左侧,也可以向右添加箭头以将箭头移动到另一侧。
// add an arrow to the dropdown menus
.dropdown-menu.arrow:before {
position: absolute;
left: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-left: 7px solid transparent;
content: '';
}
.dropdown-menu.arrow:after {
position: absolute;
left: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-left: 6px solid transparent;
content: '';
}
// postion at the top for a 'down' menu
.dropdown .dropdown-menu.arrow:before {
top: -7px;
border-bottom: 7px solid #ccc;
border-bottom-color: rgba(0, 0, 0, 0.2);
}
.dropdown .dropdown-menu.arrow:after {
top: -6px;
border-bottom: 6px solid #ffffff;
}
// postion at the bottom for an 'up' menu
.dropup .dropdown-menu.arrow:before {
bottom: -7px;
border-top: 7px solid #ccc;
border-top-color: rgba(0, 0, 0, 0.2);
}
.dropup .dropdown-menu.arrow:after {
bottom: -6px;
border-top: 6px solid #ffffff;
}
// support to move the arrow to the right-hand-side
.dropdown-menu.arrow.arrow-right:before,
.dropup .dropdown-menu.arrow.arrow-right:before {
right: 15px;
left: auto;
}
.dropdown-menu.arrow.arrow-right:after,
.dropup .dropdown-menu.arrow.arrow-right:after {
right: 16px;
left: auto;
}
#1
150
You need to add :after and :before css rules to your dropdown-menu
. These rules are taken from Bootstrap 2, and are what draw the triangle above the dropdown.
您需要在下拉菜单中添加:after和:之前的css规则。这些规则取自Bootstrap 2,并且是在下拉列表上方绘制三角形的内容。
JSFiddle DEMO
.dropdown-menu:before {
position: absolute;
top: -7px;
left: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-left: 7px solid transparent;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.dropdown-menu:after {
position: absolute;
top: -6px;
left: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
border-left: 6px solid transparent;
content: '';
}
Confused how? See here for an animation that explains css triangles
困惑如何?请参阅此处获取解释css三角形的动画
#2
18
Just to follow up on this - if you want the arrow to position itself correctly (like when using it on a navbar element that is right-aligned, you need the following additional CSS to ensure the arrow is right-aligned:
只是为了跟进这个 - 如果你想让箭头正确定位(就像在右对齐的导航栏元素上使用它一样,你需要以下额外的CSS来确保箭头是右对齐的:
.navbar .navbar-right > li > .dropdown-menu:before,
.navbar .nav > li > .dropdown-menu.navbar-right:before {
right: 12px; left: auto;
}
.navbar .navbar-right > li > .dropdown-menu:after,
.navbar .nav > li > .dropdown-menu.navbar-right:after {
right: 13px; left: auto;
}
Note the "navbar-right" - that was introduced in BS3 instead of pull-right for navbars.
注意“navbar-right” - 在BS3中引入而不是用于导航栏的右拉。
#3
3
The CSS that Alexander Mistakidis provided is correct. Which is to say, it creates the arrow atop the dropdown menu in Bootstrap. In order to position it correctly in a responsive view (@user2993108), you can change the left
attribute for each of the class selectors (.dropdown-menu:before
,.dropdown-menu:after
) at different media queries or breakpoints.
Alexander Mistakidis提供的CSS是正确的。也就是说,它会在Bootstrap的下拉菜单中创建箭头。为了在响应式视图中正确定位(@ user2993108),您可以在不同的媒体查询或断点处更改每个类选择器(.dropdown-menu:before,.dropdown-menu:after)的左侧属性。
For example...
例如...
@media (max-width: 400px) {
.dropdown-menu:before {
position: absolute;
top: -7px;
left: 30px; /* change for positioning */
...
}
.dropdown-menu:after {
position: absolute;
top: -6px;
left: 31px; /* change for positioning */
...
}
}
@media (max-width: 767px) and (min-width: 401px) {
.dropdown-menu:before {
position: absolute;
top: -7px;
left: 38px; /* change for positioning */
...
}
.dropdown-menu:after {
position: absolute;
top: -6px;
left: 39px; /* change for positioning */
...
}
}
and so on...
等等...
#4
2
This builds on the work by Alexander Mistakidis and Joyrex to support optional arrows and dropup menus. In my case I did not want to have an arrow on all of the dropdown menus, only some.
这是基于Alexander Mistakidis和Joyrex的工作,以支持可选的箭头和下拉菜单。在我的情况下,我不想在所有下拉菜单上都有箭头,只有一些。
With this, you add the arrow
class to the dropdown-menu
element to get the arrow. If Bootstrap is positioning the dropdown/dropup to the left, also add arrow-right
to shift the arrow to the other side.
这样,您可以将箭头类添加到下拉菜单元素以获取箭头。如果Bootstrap将下拉/下拉定位到左侧,也可以向右添加箭头以将箭头移动到另一侧。
// add an arrow to the dropdown menus
.dropdown-menu.arrow:before {
position: absolute;
left: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-left: 7px solid transparent;
content: '';
}
.dropdown-menu.arrow:after {
position: absolute;
left: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-left: 6px solid transparent;
content: '';
}
// postion at the top for a 'down' menu
.dropdown .dropdown-menu.arrow:before {
top: -7px;
border-bottom: 7px solid #ccc;
border-bottom-color: rgba(0, 0, 0, 0.2);
}
.dropdown .dropdown-menu.arrow:after {
top: -6px;
border-bottom: 6px solid #ffffff;
}
// postion at the bottom for an 'up' menu
.dropup .dropdown-menu.arrow:before {
bottom: -7px;
border-top: 7px solid #ccc;
border-top-color: rgba(0, 0, 0, 0.2);
}
.dropup .dropdown-menu.arrow:after {
bottom: -6px;
border-top: 6px solid #ffffff;
}
// support to move the arrow to the right-hand-side
.dropdown-menu.arrow.arrow-right:before,
.dropup .dropdown-menu.arrow.arrow-right:before {
right: 15px;
left: auto;
}
.dropdown-menu.arrow.arrow-right:after,
.dropup .dropdown-menu.arrow.arrow-right:after {
right: 16px;
left: auto;
}