在采用bootstrap最新版本V3开发系统框架时,参考了一个基于2.xx版本的框架结构。

上方一个header,设定高度定值,宽度100%;

左侧div采用浮动,float:left,设置宽度200px,右侧不设置浮动,宽度自适应,则会制作出一个左侧固定,右侧占据剩余100%的div。

形成上、左、右的结构。效果图如下:


融合了bootstrap3强大的响应式布局理念后,在继续缩小宽度,左侧会自动取消浮动,占据宽度100%,变成竖着打开的菜单,效果就是这样了,具体细节不是这次讨论的主题。

所遇到的问题就出现了,当点击左侧的下拉菜单时,会导致右侧的第一栏车辆基本信息内的高度增加,很诡异的跟着左侧下拉菜单的动画效果,也增长了!效果图:


换了火狐、谷歌、IE10,效果都是这样,不同的是有的浏览器会高一些。

既然出现了问题,开始分析:

1、先尝试在开发工具中对左侧的nav菜单设置高度,果然,设置高度后,右侧也增高了。所以问题暂时定位在左侧高度处理上,尝试了height、max-height后,发现并非如此,但max-height设置大了后,右侧所跟随变大的也会变大。

结论是:右侧增高的高度,与左侧的高度相同。

左侧代码:


<nav id="sidebar" class="collapse navbar-collapse">
    <ul>
        <li class="active"><a href="index.html"><i class="glyphicon glyphicon-home"></i> <span>系统首页</span></a> </li>
        <li> <a href="#"><i class="glyphicon glyphicon-list"></i> <span>车辆查询</span></a> </li>
        <li> <a href="#"><i class="glyphicon glyphicon-edit"></i> <span>新维护单</span></a> </li>
        <li class="submenu"> <a href="#"><i class="glyphicon glyphicon-cog"></i> <span>系统管理</span> <i class="glyphicon glyphicon-chevron-down"></i></a>
            <ul>
                <li><a href="#">基本配置</a></li>
            </ul>
        </li>
        <li class="submenu"> <a href="#"><i class="glyphicon glyphicon-cog"></i> <span>系统管理</span> <i class="glyphicon glyphicon-chevron-down"></i></a>
            <ul>
                <li><a href="#">基本配置</a></li>
                <li><a href="#">用户管理</a></li>
            </ul>
        </li>
        <li class="submenu"> <a href="#"><i class="glyphicon glyphicon-cog"></i> <span>系统管理</span> <i class="glyphicon glyphicon-chevron-down"></i></a>
            <ul>
                <li><a href="#">基本配置</a></li>
                <li><a href="#">用户管理</a></li>
                <li><a href="#">角色管理</a></li>
            </ul>
        </li>
        <li class="submenu"> <a href="#"><i class="glyphicon glyphicon-cog"></i> <span>系统管理</span> <i class="glyphicon glyphicon-chevron-down"></i></a>
            <ul>
                <li><a href="#">基本配置</a></li>
                <li><a href="#">用户管理</a></li>
                <li><a href="#">角色管理</a></li>
                <li><a href="#">基本配置</a></li>
                <li><a href="#">用户管理</a></li>
                <li><a href="#">角色管理</a></li>
                <li><a href="#">基本配置</a></li>
                <li><a href="#">用户管理</a></li>
                <li><a href="#">角色管理</a></li>
                <li><a href="#">基本配置</a></li>
                <li><a href="#">用户管理</a></li>
                <li><a href="#">角色管理</a></li>
            </ul>
        </li>
    </ul>
</nav>



#sidebar { position:absolute;width: 200px; z-index: 16; margin-left:-15px;}



2、是不是右侧的菜单出现了什么特殊的属性导致?


<div class="panel-heading">
                    <h3 class="panel-title">车辆基本信息</h3>
                </div>
                <div class="panel-body spicel">
                    <div class="row">
                        <div class="col-md-4 col-sm-6 form-group"><label for="cph">车牌号:</label><input type="text" name="cph" placeholder="例如:黑A 88888号" class="form-control"  /></div>
                        <div class="col-md-4 col-sm-6 form-group"><label for="jsy">驾驶员:</label><input type="text" name="jsy" placeholder="例如:张三" class="form-control"  /></div>
                        <div class="col-md-4 col-sm-6 form-group"><label for="lxfs">联系方式:</label><input type="text" name="lxfs" placeholder="例如:13904512345" class="form-control"  /></div>
                    </div>
                </div>   


实际效果中css代码:


box-sizing: border-box;
color: rgb(51, 51, 51);
display: block;
font-family: 'Microsoft YaHei', 宋体, Tahoma, Helvetica, Arial, 宋体, sans-serif;
font-size: 12px;
height: 172px;
line-height: 17px;
padding-bottom: 15px;
padding-left: 15px;
padding-right: 15px;
padding-top: 15px;
width: 566px;


分别注销属性进行测试,当注销到:


.panel-body:after {
clear: both;
}
终于产生效果了,高度正常了。


原来是在这里对浮动进行了清除,而清除浮动不管位置如何,都重新计算了原浮动元素的高度,并且有种卡在清除浮动代码的这个位置。

结论:clearboth;不管位置在那,都会清除浮动,并且重新计算高度。


由于尽量不破坏bootstrap的代码包,而对定义好的.panel-body:after进行重写,是不妥当的,影响了页面下方的布局。

所以针对这个原因的尝试解决办法是:

1、笨方法,在开头放没有此类清除浮动属性的标签,把这个距离顶出去,这样浮动的bug就算发生,也没有表现了。对付对付可以,但实际使用中这是不现实的。。。

2、左侧结尾处增加清除浮动标签,清除了会占据100%宽度,导致右侧主体内容换行。PASS


最后的解决办法是将左侧的浮动转换为绝对定位,将float:left改写为position:absolute,问题解决了。遗憾的是这个解决方案对于此项目好用,但不一定通用。

描写这么详细,也是希望有遇到、解决同样问题的朋友能够分享一下心得与解决方案。



  哈尔滨品用软件有限公司致力于为哈尔滨的中小企业制作大气、美观的优秀网站,并且能够搭建符合百度排名规范的网站基底,使您的网站无需额外费用,即可稳步提升排名至首页。欢迎体验最佳的哈尔滨网站建设