`
天梯梦
  • 浏览: 13732700 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

Bootstrap 3: 使用注意box-sizing细节及解决方法

 
阅读更多

一、bootstrap样式

在Bootstrap v3.3.4中有下面一条重置样式:

* {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

 

将所有的元素的默认盒模型box-sizing都设置成了border-box,而现代浏览器的标准默认box model是 content-box。很多第三方其他的UI库,第三方js库用的也是标准的content-box。

了解这点在写某些功能时很重要,尤其是合并使用其他第三方库和bootstrap时更要注意。

//lxy补充:今天看openstack的kilo版本horizon发现也是全部重置border-box。可能这是个趋势吧

 

二、例子

举例:做一个展开收缩的div。

代码如下:

<!DOCTYPE html>
<meta charset="utf-8" />
<!-- <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" /> -->
<style type="text/css">
    #tabslide{
        position: absolute;
        width: 200px;
        height: 400px;
        background-color: green;
        border:4px solid blue;
        margin: 50px auto 0;
        right: 0;
    }
    #fold{
        position: absolute;
        margin: -50px 0 0 0;
    }

</style>
<script src="js/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
function changeSize(){
        if($("#tabslide").width() == 200){
                $("#tabslide").css("width", "300px");
                $("#fold").html("-unexpand");
        }else{
                $("#tabslide").css("width", "200px");
                $("#fold").html("+expand");
        }
}
</script>
<div id="tabslide">
    <button id="fold" onclick="changeSize()" >+expand</button>
</div>

 

效果:点"+expand"按钮div宽度增大,点"-unexpand"div宽度缩小。

Bootstrap 3: 使用注意box-sizing细节

取消注释,引入bootstrap.min.css,就失效了,原因就是上面说的

* {
    box-sizing: border-box;
}

 

使得div的width:300px设置的是border+padding+contentwidth的总宽度,jquery获取的还是contentwidth,所以就失效了。
Bootstrap 3: 使用注意box-sizing细节

如果要使用bootstrap框架,上述问题解决方案有三种:

 

1、方法一

在js代码里将if($("#tabslide").width() == 200)中的200改为192。

这样后期维护会不方便,因为你设置的宽度width为200,判断时却要判断200减去边框,减去padding得到的值。当border或padding修改时又会失效,又要重新计算。

 

2、方法二

在css中显示设置box-sizing:content-box

#tabslide{
    ...
    box-sizing:content-box;
}

 

 

比第一种方法好一点,但是万一用到bootstrap的某些样式和box-sizing:border-box相关,又要做改动。

 

3、方法三

在js中显示设置box-sizing:content-box。

这种方法是我推荐使用的,没有什么后顾之忧。

 

完整代码:

<!DOCTYPE html>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" />
<style type="text/css">
    #tabslide{
        position: absolute;
        width: 200px;
        height: 400px;
        background-color: green;
        border:4px solid blue;
        margin: 50px auto 0;
        right: 0;
/*    方法二    box-sizing:content-box;*/
    }
    #fold{
        position: absolute;
        margin: -50px 0 0 0;
    }

</style>
<script src="js/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
function changeSize(){
        $("#tabslide").css("box-sizing", "content-box");//方法三
        // if($("#tabslide").width() == 192){ //方法一
        if($("#tabslide").width() == 200){
                $("#tabslide").css("width", "300px");
                $("#fold").html("-unexpand");
        }else{
                $("#tabslide").css("width", "200px");
                $("#fold").html("+expand");
        }
}
</script>
<div id="tabslide">
    <button id="fold" onclick="changeSize()" >+expand</button>
</div>

 

 

三、题外话

上面代码中expand拼写写错了,写成了expend。本来准备修改,结果还有别的问题就在此一吐为快。

expand:意思”展开“。

expand:意思“消费”。

还有一点是“unexpand”根本没有这个单词。这也是我写这段废话的原因。

我专门查了一下expand的反义词应该是shrink:意思"收缩"。

【经评论中小伙伴告知,一般情况用的是"展开(expand)"和"折叠(collapse)",哎,这英文捉急啊~】

ps:确实应该是expand和collapse,比如XenCenter中虚拟机属性部分就是Expand all和Collapse all。【2015/8/24】

Bootstrap 3: 使用注意box-sizing细节

因为改的是别人写的代码,我很无奈,只是提醒大家一点,以后写代码尽量写英文,不懂就多查查有道也好。这样别人看你代码不会至少可以多学个单词,而不是误导别人,比如这里"unexpand"。

出处:http://www.cnblogs.com/starof/p/4626904.html

 

本文转自:Bootstrap 3: 使用注意box-sizing细节及解决方法

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案

    Bootstrap 3默认将所有元素的`box-sizing`设置为`border-box`,这意味着元素的总宽度和高度只包括边框和内边距,不包括内容区域的大小。这种设定对于保持一致的布局和响应式设计非常有用,但它也可能带来一些问题,...

    浅谈CSS3 box-sizing 属性 有趣的盒模型

    CSS3的`box-sizing`属性是一个非常重要的样式规则,它改变了元素盒模型的行为,使得开发者可以更精确地控制元素的尺寸。盒模型是CSS布局的基础,由内容(content)、内填充(padding)、边框(border)和外边距(margin)四...

    Boostrap入门准备之border box

    之前在学习Bootstrap的过程中,遇到各种奇葩的坑,如果在学习bootstrap之前,准备工作先做好,就可以或多或少的避开一些坑。下面小编开始给大家介绍border-box这个属性的知识。 在Boostrap自带的css文件:boostrap....

    响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例2-5 CSS3盒子模型

    通过本教程的例2-5,你将学习如何使用CSS3控制盒子模型,以及如何在Bootstrap框架下实现响应式布局。通过实践,你可以更好地掌握这些概念,并应用于自己的项目中,创造出适应各种设备的高质量网页。

    css 盒子模型理解1

    解决方法包括添加边框、内边距、`overflow:hidden`,或者使用伪元素如`:before`生成内容来占据空间,避免越界。 - **浏览器兼容性**:不同浏览器可能有不同的盒模型实现,比如Firefox的`ul`默认有内边距,而IE则对...

    bootstrap和jQuery.Gantt的css冲突 如何解决

    解决该问题的方法是,首先定义一个新的CSS规则覆盖掉Bootstrap中通配符样式"*"的-box-sizing属性,将所有元素的盒模型设置为border-box,然后定义特定的甘特图div的盒模型为content-box,以恢复其应有的表现。...

    bootstrap-4.0.0-beta.2.zip

    例如box-sizing: border-box、margin tweaks等都存放在一个单独的 Sass 文件中。 新的自定义选项:不再像上个版本一样,将渐变、淡入淡出、阴影等效果分放在单独的样式表中。而是将所有选项都移到一个Sass变量中。想...

    css样式初始化.zip

    5. **盒模型调整**:通过设置`box-sizing`属性为`border-box`,使得元素的总宽度和高度包括边框和内填充,简化布局计算。 ```css * { box-sizing: border-box; } ``` 压缩包中的"css"文件可能是包含以上初始化...

    bootstrap-ie8_ie9.rar

    3. ** CSS polyfills **:可能包含了针对IE8和IE9的特定CSS修复,如对`box-sizing`、`border-radius`、`rgba()`和`linear-gradient`等CSS3属性的兼容性补丁。 4. ** Custom JavaScript **:可能有一些定制的...

    bootstrap-ie练习

    使用`box-sizing:border-box`可以帮助统一盒模型,但需谨慎,因为它可能影响其他现代浏览器的布局。 2. **PNG透明度支持**:IE6不支持PNG24的透明度,可能需要使用AlphaImageLoader滤镜或其他解决方案。 3. **渐进...

    2016年bootstrap精美模板大全

    3. 盒模型改进:引入了`box-sizing`属性,允许开发者控制元素的盒模型。 4. 多列布局:`column-count`和`column-gap`等属性使得多列布局更加容易实现。 5. 阴影和渐变:`box-shadow`和`text-shadow`增加了立体感,而...

    CSS学习示例

    - `box-sizing`属性:理解盒模型是关键,`box-sizing: border-box`确保元素的总宽度和高度包含边框和内填充。 - `grid`布局:CSS Grid提供了二维布局系统,用于定义行和列,实现更复杂的页面结构。 - `flexbox`与...

    Web前端开发中级实操考试评分细则_V1.03

    - `transform: translate(-50%, -50%)`:使用CSS变换将元素定位到其父元素的中心。 - `box-shadow`:为元素添加阴影效果。 - `display: flex`:开启弹性布局,允许子元素在主轴方向上灵活布局。 - `justify-...

    Bootstrap.css与layDate日期选择样式起冲突的解决办法

    问题如图: 给大家看下正常的...* {box-sizing:border-box;}重置了浏览器的盒子模型。 在网上搜索了一会,发现很多博客的解决办法是这样的: 是加上以下样式: .laydate_box, .laydate_box * { box-sizing:c

    Bootstrap-datetimepicker先天bug修复,兼容IE6+

    可以通过设置`*{box-sizing:border-box}`来统一盒模型。 6. **PNG透明度**:IE6不支持PNG24的透明效果,可以使用AlphaImageLoader滤镜来解决。 7. **DOCTYPE声明**:确保文档使用正确的DOCTYPE,这会影响IE的渲染...

    div 2列和3列显示

    标题中的“div 2列和3列显示”指的是在网页设计中使用HTML和CSS来创建两列或三列布局的方法。这种布局模式是网站设计的基础,常见于博客、新闻页面和电商网站,用于展示不同内容区域。下面我们将深入探讨这个话题。 ...

    解决CSS在IE与火狐下的兼容问题

    为解决此问题,可以使用`box-sizing`属性设置为`border-box`。 2. **CSS Hack策略** - **条件注释**:IE支持特定的条件注释,如`&lt;!--[if IE]&gt;...&lt;![endif]--&gt;`,允许我们针对IE编写特定的CSS代码。 - **特性前缀*...

    js下拉菜单生成器dropMenu使用方法详解.docx

    本文将详细介绍dropMenu的使用方法,包括基本结构、样式配置以及交互功能。 1. **HTML结构** 在使用dropMenu之前,需要在HTML中设置基本的结构。通常,下拉菜单与输入框关联,当用户点击输入框时,下拉菜单出现。...

Global site tag (gtag.js) - Google Analytics