两列布局项目中经常会用到,很多种方法可以做这样的效果

但是最方便的还是要属flex了,给外层父元素设置display:flex;然后子元素,宽度自适应的那个设置
flex-grow:1;,另外一个设置固定宽度就可以做到,一个固定另一个自适应了。
具体代码如下:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>flex 宽度不生效</title>
- </head>
- <body>
- <style>
- /* 重置样式 */
- * {
- margin: 0px;
- padding: 0px;
- }
- /* 设置外层display为flex */
- .box {
- display: flex;
- height: 100px;
- width: 100%;
- }
- /* 左边自适应 */
- .box .left {
- flex-grow: 1;
- background: red;
- }
- /* 右边固定 */
- .box .right {
- width: 200px;
- background: yellow;
- }
- </style>
- <!-- 外层盒子 -->
- <div class="box">
- <!-- 左侧 -->
- <div class="left"></div>
- <!-- 右侧 -->
- <div class="right"></div>
- </div>
- </body>
- </html>
这段代码的运行结果就是上面截图那样,但是这个代码有一个小小的bug,那就是当我们左边(自适应那边)内部如果有内容,并且内容的宽度超过了left的宽度的时候,就会把右边(固定宽度)挤小,你会发现你给的固定宽度(例子中的200px)不生效了,或者出现滚动条。
我们在左边加一点内容,并且让他超出宽度。
- /* 超出的内容 样式 */
- .box .left .content {
- width: 1000px;
- }
- <!-- 左侧 -->
- <div class="left">
- <!-- 超出的内容 -->
- <div class="content"></div>
- </div>
运行结果:

内容超出,并出现了滚动条。这个问题很好解决,只需要在left上面加上溢出隐藏的属性,就可以了。
- /* 左边自适应 */
- .box .left {
- flex-grow: 1;
- background: red;
- overflow: hidden;
- }

但是问题又来了,右边出来了,可是它的宽度变小了,不足200了。
这个问题呢,其实也很容易,给右边的div(right)加上min-width:200px;就完美了。
- /* 右边固定 */
- .box .right {
- width: 200px;
- min-width: 200px;
- background: yellow;
- }

这样不管你,什么屏幕,或者怎么拖放都能完美兼容了。。。
到此这篇关于css3中flex布局宽度不生效的解决的文章就介绍到这了,更多相关flex布局宽度不生效内容请搜索w3xue以前的文章或继续浏览下面的相关文章,希望大家以后多多支持w3xue!