<!DOCTYPE html> <html lang="en"> <head> <style> .container { display: flex; width: 1000px; overflow: hidden; } .item { width: 100px; height: 300px; background-color: orange; } .item2 { width: 900px; background-color: blue; } </style> </head> <body> <div class="container"> <div class="item">1</div> <div class="item2">2</div> <div class="item">3</div> </div> </body> </html>1、上面的布局,3 个 item 已经超过了最大的 1000px,所以会被自动压缩,压缩比例为 1:9:1。
3、如果 item2 设置 flex-shrink :0 表示不允许缩放,那么左右两边的 item 会被缩放为 50px。
<div class="container"> <div class="left"></div> <div class="right"></div> </div> <style> * { padding: 0; margin: 0; } .container { width: 600px; height: 300px; display: flex; } .left { flex: 1 2 500px; background: red; } .right { flex: 2 1 400px; background: blue; } </style>公式
子项的收缩比例 = (子项的 flex-shrink * 子项的宽度) / (所有子项的flex-shrink * 子项的宽度和) // left 的收缩比例:500 * 2 / (500 * 2 + 400 * 1) = 0.7142857142857143 // right 的收缩比例:400 * 1 / (500 * 2 + 400 * 1) = 0.2857142857142857 子项的收缩宽度 = 子项的收缩比例 * 溢出的宽度 // 溢出宽度:500 + 400 - 600 = 300 // left 的收缩宽度:300 * 0.7142857142857143 = 214.28571428571428 // right 的收缩宽度:300 * 0.2857142857142857 = 85.71428571428571 最终宽度 = 子项的原始宽度 - 子项的收缩宽度 // left 的最终宽度:500 - 214.28571428571428 = 285.7142857142857 // right 的最终宽度:400 - 85.71428571428571 = 314.2857142857143。如果计算出来有负数,则不显示。