如何在小屏幕上禁用引导对齐选项卡的堆叠

Posted

技术标签:

【中文标题】如何在小屏幕上禁用引导对齐选项卡的堆叠【英文标题】:How to disable stacking of bootstrap justified tabs on small screens 【发布时间】:2014-03-28 17:38:21 【问题描述】:

我见过this post,但作为新用户,我无法发表评论要求澄清。

我在 Bootstrap 中使用合理的导航选项卡,并且不希望它们堆叠在小屏幕上,因为我只有 2 个选项卡。我希望它们并排保持,只是缩小以适应屏幕。这就是我所拥有的:

    <!-- Nav tabs -->
<ul class="nav nav-tabs nav-justified" id="myTab">
  <li class="active"><a href="#ratings" data-toggle="tab">Ratings</a></li>
  <li><a href="#reviews" data-toggle="tab">Reviews</a></li>
</ul>

<!-- Tab panes -->
<div class="tab-content">
  <div class="tab-pane active" id="ratings">This is a rating section</div>
  <div class="tab-pane" id="reviews">This is for reviews. There should be some styling here.</div>
</div>

正如相关帖子建议使用媒体查询,我似乎无法做到这一点。我曾尝试将以下内容设置为仅针对小屏幕:

    @media (max-width: 768px) 
  .nav-justified > li display: table-cell;

我不确定我做错了什么,因此非常感谢任何帮助。

【问题讨论】:

对我来说似乎是正确的并且在这里工作(注意我添加了更多样式以使标签看起来正确)jsbin.com/wakuf/1/edit。你确定你的 CSS 被调用了吗? 谢谢,成功了!唯一的区别是我最初没有应用 1% 的宽度,这似乎使它起作用了。 这并不总是适用于两个以上的选项卡。我尝试了 3 个导航药丸,但它们之间留下了太多空间,将第三个踢到下一行。不过,接受的答案确实有效(使用 col-xs-4)。 【参考方案1】:

其他简单的解决方案是将flex 类添加到&lt;ul&gt; 元素而不是nav-justified

.just 
  display: flex;
  flex-flow: row nowrap;


.just > li 
  flex: 1 auto;
  text-align: center;
  white-space: nowrap;

jsFiddle 请注意,如果有许多选项卡,其中一些可能会隐藏在您的屏幕后面。为防止这种情况,您可以将wrap 而不是nowrap 添加到flex flow。这样它们确实会被堆叠,但只有在事情通常在屏幕后面的情况下才会被堆叠,这意味着warp 堆叠的断点小于nav-justified 的情况。继续在我的 Fiddle 上使用 row wrap 并调整屏幕大小,看看我在说什么。

【讨论】:

在几个相关的解决方案中,这是唯一一个对我有用的。谢谢!【参考方案2】:

并编辑 pjb 的答案,甚至保留引导程序对齐导航栏的默认样式。

@media (max-width: 768px)
    .nav-justified > li 
        display: table-cell;
        width: 1%;
  
    .nav-justified > li > a  
        border-bottom: 1px solid #ddd !important;
        border-radius: 4px 4px 0 0 !important;
        margin-bottom: 0 !important;
  
    .nav-justified > li.active > a  
        border-bottom: 1px solid transparent !important;
  


【讨论】:

【参考方案3】:

LESS - 引导

这是@pjb 转换为LESS 的答案。我目前正在使用 bootstrap.less 所以下面是我实现的风格。

@media (max-width: @screen-xs-max) 

  .nav-justified 

    > li 
      display: table-cell;
      width: 1%;

      > a 
        border-bottom: 1px solid @nav-tabs-justified-link-border-color !important;
        border-radius: @border-radius-base @border-radius-base 0 0 !important;
        margin-bottom: 0 !important;
      
    
  

【讨论】:

【参考方案4】:

很大程度上取决于您是否要保持默认引导程序完好无损,只需在顶部添加您的自定义主题。很多时候这很有意义,因为如果标签列表增长到 3 或 4 等,您可能希望稍后在轨道上堆叠移动标签。我要做的是向 ul 添加一个新类“custom-未堆叠”,然后将此 css 添加到您的样式表中:

.nav-justified.custom-not-stacked>li 
display: table-cell;
width: 1%;

.nav-justified.custom-not-stacked>.active>a, 
.nav-justified.custom-not-stacked>.active>a:focus, 
.nav-justified.custom-not-stacked>.active>a:hover 
border-bottom-color: #fff;

.nav-justified.custom-not-stacked>li>a 
border-bottom: 1px solid #ddd;
border-radius: 4px 4px 0 0;
margin-bottom: 0;

【讨论】:

【参考方案5】:

如果您不想将最大宽度限制为 768px,除了 james 回答之外,您还可以这样做:

@media (min-width: 0px) 

  .nav-justified > li 
    display: table-cell;
    width: 1%;
  


Should I avoid using !important in CSS?

如果您不想在 CSS 中使用 !important,请在引导程序包含后粘贴代码。

【讨论】:

与其他解决方案相比,这非常好;其他一些解决方案会破坏标签的样式。【参考方案6】:

我已尝试编辑@pjb 答案,因为它不完整。但是我的编辑被拒绝了两次,因为显然它是“不正确的”。虽然 plunker 会倾向于不同意...

这是显示活动选项卡底部边框在压缩时显示的原件

http://plnkr.co/edit/p62KlHnqPjAsK7XR3mLa?p=preview

而这个版本,显然没有显示出来

http://plnkr.co/edit/BBDW7nIxGh0J6a9vsuZx?p=preview

@media (max-width: 768px) 
  .nav-justified > li 
    display: table-cell;
    width: 1%;
  
  .nav-justified > li > a  
    border-bottom: 1px solid #ddd !important;
    border-radius: 4px 4px 0 0 !important;
    margin-bottom: 0 !important;
  
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:focus 
    border-bottom-color: #fff !important;
  

【讨论】:

我没有影响所有选项卡控件,而是使用了一个名为no-stack 的类,并将它应用到我的html 中的nav-justified 类之外。我将 @james 的 css 选择器更改为 .nav-justified.no-stack【参考方案7】:

其他一些解决方案的问题是标签会失去它们的边框和其他设计元素。以下媒体查询更充分地确保标签在压缩和更宽的显示中匹配:

@media (max-width: 768px) 
  .nav-justified > li 
    display: table-cell;
    width: 1%;
  
  .nav-justified > li > a  
    border-bottom: 1px solid #ddd !important;
    border-radius: 4px 4px 0 0 !important;
    margin-bottom: 0 !important;
  

【讨论】:

似乎对我有用的唯一解决方案。迄今为止最好的答案!谢谢 这似乎是一个不错的解决方案,但有一个缺点:如果你有很多 项目,你会失去响应能力,并且在一定宽度以下得到丑陋的水平滚动条。有谁知道如何解决这个问题? 我改进了它,在媒体查询的末尾添加了这条规则: .nav-justified > li.active > a border-bottom-width: 0px !important; 更好的解决方案。我希望群众可以投票作为接受的答案。【参考方案8】:

有一个非常简单的方法可以防止堆叠:

CSS:

.nav li 
    display:table-cell !important;

我搜索了这个并且对涉及自定义构建引导程序(我使用 CDN)和 LESS(我不使用)的答案感到恼火

这对我很有用...

【讨论】:

没关系,但在移动视图中它不会在 div 中间居中...【参考方案9】:

尝试在链接前添加col-xs-6

    <!-- Nav tabs -->
<ul class="nav nav-tabs nav-justified" id="myTab">
  <div class="col-xs-6">
      <li class="active"><a href="#ratings" data-toggle="tab">Ratings</a></li>
  </div>    
  <div class="col-xs-6">    
      <li><a href="#reviews" data-toggle="tab">Reviews</a></li>
  </div>
</ul>

<!-- Tab panes -->
<div class="tab-content">
  <div class="tab-pane active" id="ratings">This is a rating section</div>
  <div class="tab-pane" id="reviews">This is for reviews. There should be some styling here.</div>
</div>

你可以在这里查看Bootply

【讨论】:

谢谢!这似乎也有效。为什么一种解决方案会比另一种更好? 根据引导文档,这是正确的解决方案。如果您不指定布局,则默认为 col-xs-12(所有十二个网格)。这对我来说是一个更好的解决方案,因为您不必添加额外的 css 行。这个问题已经存在一个 css 类。不要重复自己(D.R.Y)。请将此问题标记为已回答。谢谢! 我不同意这是正确的答案,因为样式丢失了 将 div 作为 ul 的直接子级是无效的 html 不应将无效的 html 代码视为答案

以上是关于如何在小屏幕上禁用引导对齐选项卡的堆叠的主要内容,如果未能解决你的问题,请参考以下文章

带有活动选项卡的动态引导导航

Jinja2 和 Flask:引导选项卡仅显示第一个选项卡的内容,而不显示其余选项卡的内容

阻止引导选项卡的显示事件

如何从登录屏幕导航到包含底部选项卡的主屏幕

引导导航选项卡的字体颜色在活动状态下没有变化

使用带有引导选项卡的固定列的数据表问题