2014-09-02 133 views
3

将图像添加到Bootstrap3的默认导航栏下拉菜单中的最佳方式是什么?我想在下面的图片中重新创建布局,图片填充到下拉菜单中项目的右侧。有什么想法吗?将图像添加到引导程序下拉菜单

编辑:我打算在移动设备上隐藏图像以获得更好的可用性,所以我只想在桌面上使用这种布局。

enter image description here

下面是我在哪里到目前为止

.dropdown-menu { 
padding-right: 150px; /* width of img */ 
position: relative; 
} 

.dropdown-menu:after { 
position: absolute; 
top: 0; 
bottom: 0; 
right: 0; 
width: 150px; /* width of img */ 
background: url(http://placehold.it/150x220) center; 
background-size: cover; 
} 
+0

看到我的编辑答案!现在它的工作! – Suresh 2014-09-05 10:16:04

回答

3

它的工作!看演示小提琴!

Fiddle Demo

dropdownbs


HTML

<nav class="navbar navbar-default" role="navigation"> 
    <!-- Brand and toggle get grouped for better mobile display --> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> 
<span class="icon-bar"></span> 
<span class="icon-bar"></span> 
<span class="icon-bar"></span> 

     </button> <a class="navbar-brand" href="#">Brand</a> 

    </div> 
    <!-- Collect the nav links, forms, and other content for toggling --> 
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
     <ul class="nav navbar-nav"> 
      <li class="active"><a href="#">Link</a> 

      </li> 
      <li><a href="#">Link</a> 

      </li> 
      <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown with Image 1 <span class="caret"></span></a> 

       <ul class="dropdown-menu" role="menu"> 
        <li><a href="#">Menu Item 1</a> 

         <img src="http://placekitten.com/g/200/300" class="navimg"> 
        </li> 
        <li><a href="#">Menu Item 2</a> 
        </li> 
        <li><a href="#">Menu Item 3</a> 
        </li> 
        <li><a href="#">Menu Item 4</a> 
        </li> 
        <li><a href="#">Menu Item 5</a> 
        </li> 
        <li><a href="#">Menu Item 6</a> 
        </li> 
       </ul> 
      </li> 
      <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown with Image 2 <span class="caret"></span></a> 

       <ul class="dropdown-menu" role="menu"> 
        <li><a href="#">Menu Item 1</a> 

         <img src="http://placekitten.com/g/200/300" class="navimg"> 
        </li> 
        <li><a href="#">Menu Item 2</a> 

        </li> 
        <li><a href="#">Menu Item 3</a> 
        </li> 
        <li><a href="#">Menu Item 4</a> 
        </li> 
        <li><a href="#">Menu Item 5</a> 
        </li> 
        <li><a href="#">Menu Item 6</a> 
        </li> 
       </ul> 
     </ul> 
     </li> 
     </ul> 
    </div> 
    <!-- /.navbar-collapse --> 
</nav> 

CSS

.dropdown-menu { 
    padding-right: 150px; 
    /* width of img */ 
    position: relative; 
} 
.dropdown-menu:after { 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    right: 0; 
    width: 150px; 
    /* width of img */ 
    background: url(http://placehold.it/150x220) center; 
    background-size: cover; 
} 
.nav .dropdown-menu ul { 
    position:relative; 
    overflow:auto; 
} 
.navimg { 
    position:absolute; 
    top:0; 
    right:0; 
    height:100%; 
} 
.dropdown-menu { 
    position: absolute; 
} 
+0

差不多!因此,除了整个导航栏扩展以适应下拉菜单之外,这种方法是有效的。有没有解决方法? – Jedda 2014-09-05 10:01:37

+0

是的,它可以解决使用绝对位置来使用集装箱 – Suresh 2014-09-05 10:02:53

+0

请参阅编辑它的工作吧! – Suresh 2014-09-05 10:13:55

0

你会做到这一点a fiddle

.dropdown-menu { 
    padding-right: 100px; /* width of img */ 
    position: relative; 
} 

.dropdown-menu:after { 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    right: 0; 
    width: 100px; /* width of img */ 
    background: url(YOUR URL) center; 
    background-size: cover; 
} 

技巧是很容易的。您在右侧扩展下拉框的填充以为元素留出空间,然后在图像之后创建伪元素。

如果你想让它仅显示在桌面上,只需将它包装在适当@media query.

+0

你的意思是你想每个下拉菜单有不同的BG?您可以使用attr(data-image)作为css prop值并为每个.dropdown菜单div设置它。 – pie6k 2014-09-03 12:11:36

0

试试这个:link to bootply更新

HTML:

<div class="dropdown"> 
    <a id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> 
    Dropdown <span class="caret"></span> 
    </a>  

    <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> 
    <div class="col-md-10"> 
    <li><a href="#">Longer menu item</a></li> 
    <li><a href="#">More longer menu item</a></li> 
    <li><a href="#">More more longer menu item</a></li> 
    <li><a href="#">More more more longer menu item</a></li> 
    <li><a href="#">More more more more longer menu item</a></li> 
    </div> 
    <div class="col-md-2 image .hidden-xs .hidden-sm"> 
     <img src="http://placehold.it/150x220"> 
    </div> 
    </ul>  
</div> 

添加类.hidden-xs和.hidden-sm未在小设备中显示

CSS:

.image { 
    position:relative; 
    right:0px; 
    padding:0 5px; 
    margin:0; 
    } 

.image img {float:right;} 
+0

这对于字符串长度较长的菜单项无效http://www.bootply.com/9eb2ZdCBRo – Dan 2014-09-04 15:28:36

+0

更新我的答案! :) @丹 – nicogaldo 2014-09-04 16:11:13

+0

@nicogaldo这也适用!问题:嵌套在一个UL内的div是否可以接受? – Jedda 2014-09-05 10:06:55

1

您是否尝试过靶向父元素.dropdown菜单:后, 尝试亚当的CSS后加入这样的事情:

.dropdown-menu:after < li:nth-child(1){ background: url(1st) center } 
.dropdown-menu:after < li:nth-child(2){ background: url(2nd) center } 
.dropdown-menu:after < li:nth-child(3){ background: url(3rd) center } 
    //etc 

我还没有尝试过了,但我认为这是一个很好的解决方案。

1

这里有一个防弹例如:

HTML标记:

<div class="dropdown"> <a id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> 
    Dropdown <span class="caret"></span> 
    </a> 

    <ul class="dropdown-menu imaged_menu" role="menu" aria-labelledby="dLabel"> 
     <div class="col-lg-6 col-xs-6 fulllist"> 
      <li><a href="#">Longer menu item</a> 
      </li> 
      <li><a href="#">More longer menu item</a> 
      </li> 
      <li><a href="#">More more longer menu item</a> 
      </li> 
      <li><a href="#">More more more longer menu item</a> 
      </li> 
      <li><a href="#">More more more more longer menu item</a> 
      </li> 
      <li><a href="#">Longer menu item</a> 
      </li> 
      <li><a href="#">More longer menu item</a> 
      </li> 
      <li><a href="#">More more longer menu item</a> 
      </li> 
      <li><a href="#">More more more longer menu item</a> 
      </li> 
      <li><a href="#">More more more more longer menu item</a> 
      </li> 
      <li><a href="#">Longer menu item</a> 
      </li> 
      <li><a href="#">More longer menu item</a> 
      </li> 
      <li><a href="#">More more longer menu item</a> 
      </li> 
      <li><a href="#">More more more longer menu item</a> 
      </li> 
      <li><a href="#">More more more more longer menu item</a> 
      </li> 
     </div> 
     <div class="col-lg-6 col-xs-6 imagebox"> 
      <img src="http://blog.templatemonster.com/wp-content/uploads/2012/10/Bootstraps.jpg" alt="" /> 
     </div> 
    </ul> 
</div> 

然后CSS标记:

/* CSS used here will be applied after bootstrap.css */ 
.imaged_menu { 
    white-space: nowrap; 
} 
.imagebox { 
    padding:0 2%; 
} 
.imagebox img { 
    max-height:100%; 
    max-width:100%; 
} 
/* let's hide image ----------- */ 
@media only screen and (max-width : 768px) { 
    .imagebox { 
     display:none !important 
    } 
} 

如您有其他的答案通知,他们都在某个时候失败,因为他们试图使用Bootstrap而没有其他的东西,因此遭受重创浆纱。通过这种方法,Bootstrap仅用于基本部署,然后我们添加一些次要的HTML标记来准确定位元素,然后使用常规CSS。尝试调整大小,你会看到它是如何表现的确切地说正如你问,没有需要重大的变化。是的,图像会在你想要的时候消失。

这一切都这样说,这是一些基本的脚手架例如,所以你可能需要调整一些尺寸或媒体查询提示点,但你会得到的想法

+0

另一个伟大的解决方案! – Jedda 2014-09-08 11:14:17