如何在Twitter Bootstrap 3中取消响应式特性?

85
自Bootstrap 3以来,没有单独的响应式和标准样式表文件。那么我该如何轻松地去除响应式功能?

1
这篇博客文章提供了一些关于如何做到这一点的信息,并在末尾提供了一个链接,指向Github上的已完成版本。 - bbill
1
@STLDeveloper在2012年12月3日16:11提问。Bootstrap 3刚出不到两天。 - kanarifugl
1
@STLDeveloper,他说在Bootstrap 3中响应式文件不再是分开的。博客文章和Bootstrap的Github账户解释了这些变化。 - bbill
Bootstrap文档描述了如何禁用响应式:http://getbootstrap.com/getting-started/#disable-responsive - Nicolas Janel
@NicolasJanel,你的链接已经失效了。 - Dmytro
这是禁用响应式的官方文档的新链接:https://getbootstrap.com/docs/3.3/getting-started/#disable-responsive - Nicolas Janel
8个回答

104
为了停用非桌面式样,您只需更改variables.less文件中的4行代码。在variables.less文件中将屏幕宽度断点设置为以下内容:
//媒体查询断点 //--------------------------------------------------
//超小屏幕/电话 //注意:自v3.0.1起弃用@screen-xs和@screen-phone @screen-xs: 1px; @screen-xs-min: @screen-xs; @screen-phone: @screen-xs-min;
//小屏幕/平板电脑 //注意:自v3.0.1起弃用@screen-sm和@screen-tablet @screen-sm: 2px; @screen-sm-min: @screen-sm; @screen-tablet: @screen-sm-min;
//中等屏幕/桌面 //注意:自v3.0.1起弃用@screen-md和@screen-desktop @screen-md: 3px; @screen-md-min: @screen-md; @screen-desktop: @screen-md-min;
//大屏幕/宽屏桌面 //注意:自v3.0.1起弃用@screen-lg和@screen-lg-desktop @screen-lg: 9999px; @screen-lg-min: @screen-lg; @screen-lg-desktop: @screen-lg-min;
这将使桌面样式媒体查询的min-width更低,以便适用于所有屏幕宽度。感谢2calledchaos的改进!某些基础样式在移动样式中定义,因此我们需要确保将它们包括在内。
编辑:Chris指出,您可以在Bootstrap网站上的在线less编译器中设置这些变量。

7
你可以通过将@grid-float-breakpoint变量更改为1px来防止导航栏堆叠。 - Chris
8
哇,这在引导程序自定义下载站的在线编译器中也可以运行! - chris
1
我不确定上述代码是否有效。如果有人定义了@media (min-width: @screen-sm-min)(意思是将此样式应用于sm断点和所有更高的断点;也就是说,sm、md、lg),那么上述覆盖将会破坏这个假设,因为该定义将不再适用于md?我将@screen-xs设置为1px,@screen-sm也设置为1px(除了@screen-md为1px);这样,所有xs、sm和md样式都会被应用,并使用源顺序优先级进行覆盖。 - Martin Suchanek
1
最好使用1px作为xs,2px作为sm,3px作为md和9999px作为lg。这样你就不会在“移动模式”下拥有导航栏和模态框了。 - 2called-chaos
1
工作正常,但浏览器水平滚动条仍然缺失。 - Cichy
显示剩余2条评论

45
这在 Bootstrap 3 官方发布文档 中有解释:

取消响应式视图的步骤

要禁用响应式功能,请按照以下步骤操作。 在下面的修改模板中查看它实际运行情况。

  1. 删除(或仅不添加)CSS文档中提到的viewport
  2. 对于具有max-width:none!important;的所有网格层,删除.container上的max-width,并设置常规宽度,例如 width:970px;。 确保这在默认的Bootstrap CSS之后。 您可以使用媒体查询或一些选择器技巧可选地避免!important。
  3. 如果使用导航栏,请撤消所有导航栏折叠和展开行为(这太多了,所以请参阅示例)。
  4. 对于网格布局,请除了medium/large的类之外还使用.col-xs-*类。 不用担心,extra-small设备网格会缩放到所有分辨率,因此您可以进行设置。

您仍需要Respond.js适用于IE8(因为我们的媒体查询仍然存在并需要被捕获)。 这只是禁用了Bootstrap的“移动站点”。

请参见 GetBootstrap.com/examples/non-responsive/上的示例。


5
这对我没有起作用。一些元素会受到视口宽度的影响。 - Ziyan Junaideen
@ZiyanJunaideen,你可能漏掉了什么。你能提供一个jsfiddle吗? - Adriano
1
这对我有用。我认为它应该被标记为正确答案。 - Dave Stewart

20

最近我刚刚发现,让Bootstrap v3.1.1不具有响应式的功能非常容易。这包括导航栏不折叠。我不知道是否每个人都知道这个,但我想分享一下。

将Bootstrap v3.1.1变为非响应式只需要两步:

第一步,创建一个名为non-responsive.css的css文件。确保将它附加到你的主题或在Bootstrap css文件之后链接。

第二步,将以下代码粘贴到non-responsive.css中:

/* Template-specific stuff
 *
 * Customizations just for the template; these are not necessary for anything
 * with disabling the responsiveness.
 */

/* Account for fixed navbar */
body {
  min-width: 970px;
  padding-top: 70px;
  padding-bottom: 30px;
}

/* Finesse the page header spacing */
.page-header {
  margin-bottom: 30px;
}
.page-header .lead {
  margin-bottom: 10px;
}


/* Non-responsive overrides
 *
 * Utilitze the following CSS to disable the responsive-ness of the container,
 * grid system, and navbar.
 */

/* Reset the container */
.container {
  width: 970px;
  max-width: none !important;
}

/* Demonstrate the grids */
.col-xs-4 {
  padding-top: 15px;
  padding-bottom: 15px;
  background-color: #eee;
  background-color: rgba(86,61,124,.15);
  border: 1px solid #ddd;
  border: 1px solid rgba(86,61,124,.2);
}

.container .navbar-header,
.container .navbar-collapse {
  margin-right: 0;
  margin-left: 0;
}

/* Always float the navbar header */
.navbar-header {
  float: left;
}

/* Undo the collapsing navbar */
.navbar-collapse {
  display: block !important;
  height: auto !important;
  padding-bottom: 0;
  overflow: visible !important;
}

.navbar-toggle {
  display: none;
}
.navbar-collapse {
  border-top: 0;
}

.navbar-brand {
  margin-left: -15px;
}

/* Always apply the floated nav */
.navbar-nav {
  float: left;
  margin: 0;
}
.navbar-nav > li {
  float: left;
}
.navbar-nav > li > a {
  padding: 15px;
}

/* Redeclare since we override the float above */
.navbar-nav.navbar-right {
  float: right;
}

/* Undo custom dropdowns */
.navbar .navbar-nav .open .dropdown-menu {
  position: absolute;
  float: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, .15);
  border-width: 0 1px 1px;
  border-radius: 0 0 4px 4px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
}
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
  color: #333;
}
.navbar .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar .navbar-nav .open .dropdown-menu > li > a:focus,
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
  color: #fff !important;
  background-color: #428bca !important;
}
.navbar .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {
  color: #999 !important;
  background-color: transparent !important;
}

就这些,享受吧..^^

来源:非响应式CSS文件来自getbootstrap.com示例


2
哇,非常好!谢谢 :) - Ronald Araújo
2
当您在此处复制/粘贴代码时,请链接到其来源。 - ba0708

11

来源: http://getbootstrap.com/getting-started/#disable-responsive

  1. 在CSS文档中提到的<meta>视口不予考虑。
  2. 对于每个网格层级,使用一个单一的宽度覆盖.container上的width,例如width: 970px !important;。确保这是在默认的Bootstrap CSS之后。您可以选择使用媒体查询或某些选择器技巧来避免使用!important
  3. 如果使用导航栏,请删除所有导航栏的折叠和展开行为。
  4. 对于网格布局,请在中等/大型布局的基础上使用.col-xs-*类或替换它们。 不用担心,超小设备网格可以适应所有分辨率。

11

我需要完全移除Bootstrap响应特性,最终通过以下片段覆盖了其行为:

.container {
    width: 960px !important;
}

@media (min-width: 1px) {
  .container {
    max-width: 940px;
  }
  .col-lg-1,
  .col-lg-2,
[...]

完整代码片段:https://gist.github.com/ivanminutillo/8557293


5

1
很好,但遗憾的是它是完整的Bootstrap CSS。有一个只禁用响应式功能的CSS将是不错的选择。我们称之为“nonresponsive.css”。这样,如果我们包含了“nonresponsive.css”,则响应式功能将被禁用。如果移除该CSS,则响应式功能将恢复。 - user1995781
1
你可以通过在头部添加原始的bootstrap.css和上面链接中发布的非响应式bootstrap.css来实现你所建议的内容。显然,你可以根据自己的需要进行重命名。注释掉该行代码,然后它将按预期工作。 - ɐsɹǝʌ ǝɔıʌ
1
是的,但那会覆盖掉我所有自定义的Bootstrap主题。例如,如果我使用来自http://bootswatch.com/的主题,它将被那个CSS覆盖。 - user1995781
1
当然。如果您在Bootstrap上使用自定义主题,则会失去所有自定义内容,但如果您使用原始的Bootstrap CSS,则不会丢失。 - ɐsɹǝʌ ǝɔıʌ

0
如果您想要一个固定大小的网站,这应该相当简单:

// Override container sizes
@container-sm: 700px;
@container-md: 700px;
@container-lg: 700px;

// Fixate media queries to tablet view only (lower viewports set to 0px, desired one to 1px, and the higher to ~9999px)

@screen-xs-min: 0px;
@screen-sm-min: 1px;
@screen-md-min: 9999px;
@screen-lg-min: 9999px;

// Disable responsive features such as navbar-collapse
@grid-float-breakpoint: 9999px;

除非您正在使用 .container-fluid,否则还需添加:

.container-fluid {
    width: 700px;
}
body {
    width: 700px + @general-min-width;
}

-2

看看www.goo.gl/2SIOJj,它还在不断改进中,但可能会对你有所帮助。

我使用cookie来定义我想要桌面版还是响应式版本。在页面的页脚,你可以找到两个span,在general.js中是处理点击的脚本。

        <div class="col-xs-6" style="text-align:center;"><span class="make_desktop">Desktop</span></div>
        <div class="col-xs-6" style="text-align:center;"><span class="make_responsive">Mobile</span></div>

function setMobDeskCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays === null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value + "; path=/";
    window.location.reload();
}

$(function() {
    $(".make_desktop").click(function() {
        setMobDeskCookie('deskmob', 1, 3650);
    });
    $(".make_responsive").click(function() {
        setMobDeskCookie('deskmob', 0, 3650);
    });
});`enter code here`

我最终将所有自定义的CSS拆分成了两个文件。我不使用Bootstrap导航,而是使用自己的导航,因此这是我大部分自定义样式的来源,所以它可能无法解决你的整个问题,但对我来说有效。

我还创建了一个名为non-responsive.css的文件,它强制网格保持大屏幕版本。

如果您选择移动设备,则会加载/回显。

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">  
<!-- Bootstrap core CSS and JS -->
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
        <link href="/themes/responsive_lime/bootstrap-3_1_1/css/bootstrap.css" rel="stylesheet">
        <script src="/themes/responsive_lime/bootstrap-3_1_1/js/bootstrap.min.js"></script>

and load these stylesheets
<link rel="stylesheet" type="text/css" media="screen,print" href="/themes/responsive_lime/css/style.css?modified=14-06-2014-12-27-40" />
<link rel="stylesheet" type="text/css" media="screen,print" href="/themes/responsive_lime/css/style-responsive.css?modified=1402758346" />

如果您选择桌面,我会加载/echo

<meta name="viewport" content="width=1024">    


        <!-- Bootstrap core CSS and JS -->
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
        <link href="/themes/responsive_lime/bootstrap-3_1_1/css/bootstrap.css" rel="stylesheet">
        <script src="/themes/responsive_lime/bootstrap-3_1_1/js/bootstrap.min.js"></script>

        <!-- Main CSS -->
        <link rel="stylesheet" type="text/css" media="screen,print" href="/themes/responsive_lime/css/style.css?modified=14-06-2014-12-27-40" />
<link rel="stylesheet" type="text/css" media="screen,print" href="/themes/responsive_lime/css/non-responsive.css?modified=1402758635" />

non-responsive.css 是一个覆盖 Bootstrap 的样式表,我主要关注的是布局,所以里面没有太多内容。由于我以自己的方式处理导航,因此它和其他部分的 CSS 都在我的其他 CSS 文件中。

请注意,我的设置即使在桌面浏览器上也会像桌面一样运行,不像我见过的其他解决方案只会忽略视口,这似乎只对移动设备有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接