前言

页面当中常规布局我想大家都会的,但有些布局是常规布局中实现不了的,比如变宽和固宽结合的,需要实现(300px)+(100%-300px)的两列布局。以下样式代码前提均为盒模型为border-sizing 的前提下。

html部分

  1. <div class="main">
  2. <section class="left">
  3. 左边内容
  4. </section>
  5. <section class="right">
  6. <div class="rightCont">
  7. 右边内容
  8. </div>
  9. </section>
  10. </div>

方案一:巧用浮动,比较麻烦,不建议

  1. .main{
  2. width:100%;
  3. overflow: hidden;
  4. height: 300px;}
  5. .main .left{
  6. width:300px;
  7. float:left;
  8. height:300px;
  9. border:1px solid red;}
  10. .main .right{
  11. width:100%;
  12. padding-right:299px;
  13. margin-right:-300px;
  14. margin-left:-1px;
  15. float:left;
  16. height:300px;
  17. }
  18. .main .right .rightCont {
  19. border: 1px solid green;
  20. height: 100%;
  21. }

方案二:巧用浮动,比较简单,建议

  1. //父元素要清楚浮动
  2. .main{
  3. width:100%;
  4. overflow: hidden;
  5. height: 300px;
  6. }
  7. .main .left{
  8. width:300px;
  9. float:left;
  10. height:300px;
  11. border:1px solid red;
  12. }
  13. .main .right{
  14. margin-left: 300px;
  15. height:300px;
  16. border:1px solid green;
  17. }

方案三:巧用定位,建议(整体布局实现)

  1. .main{
  2. width:100%;
  3. height: 300px;
  4. position: relative;
  5. }
  6. .main .left{
  7. position:absolute;
  8. top:0;
  9. left:0;
  10. width:300px;
  11. height:300px;
  12. border:1px solid red;
  13. }
  14. .main .right{
  15. position:absolute;
  16. top:0;
  17. left:299px;//同时设置左和右,得到的宽度即为100%-left-right
  18. right:0;
  19. height:300px;
  20. border:1px solid green;
  21. }

方案四:巧用定位,padding,建议 (同一个整体盒模型中建议使用)

  1. .main{
  2. width:100%;
  3. height: 300px;
  4. position: relative;
  5. padding-left:300px;}
  6. .main .left{
  7. position:absolute;
  8. top:0;
  9. left:0;
  10. width:300px;
  11. height:300px;
  12. border:1px solid red;}
  13. .main .right{
  14. margin-left:0px;
  15. height:100%;
  16. border:1px solid green;
  17. }

方案五:使用flex布局

  1. .main{
  2. height: 300px;
  3. display: flex;
  4. flex-direction: row;
  5. align-items: center;
  6. }
  7. .main .left{
  8. border:1px solid green;
  9. flex-basis300px;
  10. -webkit-flex-basis: 300px;
  11. height:100%;
  12. }
  13. .main .right{
  14. flex-grow: 1;
  15. height:100%;
  16. border:1px solid green;
  17. }