網頁基本結構:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="renderer" content="webkit"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>左側固定,右側自適應布局</title> <style type="text/css"> </style> </head> <body> <div class="wrapper"> <div class="left">左側左側左側左側左側左側左側左側左側左側左側左側左側左側</div> <div class="right">右側右側右側右側右側右側右側右側右側右側右側右側右側右側</div> </div> </body> </html>
1、float+bfc,缺點:父元素需要清除浮動,否則高度計算不會包括浮動元素。
/* 清除浮動 */ .wrapper::before, .wrapper::after { display: table; content: ''; clear: both; } /* 左側浮動 */ .left { width: 100px; float: left; } /* 右側觸發bfc */ .right { overflow: hidden; }
2、float + margin-left,缺點也是父元素需要清除浮動,否則高度計算不會包括浮動元素。
/* 清除浮動 */ .wrapper::before, .wrapper::after { display: table; content: ''; clear: both; } /* 左側浮動 */ .left { width: 100px; float: left; } /* 右側使用margin-left撐開位置 */ .right { margin-left: 100px; }
3、inline-block+calc,缺點:父元素需要設置font-size: 0;來清除默認間距,子元素要設置vertical-align: top;來使頂部對齊。
/* 清除默認間距 */ .wrapper { font-size: 0; } .left, .right { display: inline-block; vertical-align: top; /* 頂部對齊 */ font-size: 16px; } /* 左側固定寬度 */ .left { width: 100px; } /* 右側計算寬度 */ .right { width: calc(100% - 100px); }
4、table-cell
/* 父元素設置為table */ .wrapper { display: table; } /* 子元素設置為table-cell */ .left, .right { display: table-cell; } /* 左側固定寬度 */ .left { width: 100px; }
5、flex,缺點:低版本IE不支持
/* 父元素設置為flex */ .wrapper { display: flex; } /* 左側固定寬度 */ .left { width: 100px; } /* 右側設置flex: 1; */ .right { flex: 1; }
6、grid,缺點:可能有兼容性問題。
.wrapper { display: grid; grid-template-columns: 100px 1fr }