批改状态:合格
老师批语:写出框架是第一步
flex项目的增长,使用
flex-grow来实现。
使用前提:当flex项目总宽度或总高度小于父弹性盒子时使用
.item{/*1为增长因子,可以为小数*/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>设置项目在主轴空间上的增长因子</title><style>.container {width: 300px;display: flex;}.container > .item {width: 60px;/*增长因子为0不放大*/flex-grow: 0;/*flex简写,=flex-grow:1,增长因子为1,根据剩余空间计算后放大1份*/flex: 1;/*auto自动,即默认为1*/flex: auto;}.container > .item:first-of-type {/* 第一个项目放大2份*/flex-grow: 2;}</style></head><body><div class="container"><div class="item">1</div><div class="item">2</div><div class="item">3</div></div></body></html>
计算方法:
width: 300px;、第13行width: 60px;,我们得出剩余空间大小为:300-60*3=120px。flex-grow的值计算出每个项目在原始尺寸的基础上再增长多少,如第23行代码flex-grow: 2;,即可以算出,第一个项目(.container > .item:first-of-type)的结果尺寸为:60px+(30px*2)=120px。运行效果图:
flex项目的增长,使用
flex-shrink来实现。
使用前提:当flex项目总宽度或总高度大于父弹性盒子时使用
.item{/*1为缩小因子,可以为小数*/flex-shrink:1;}
具体算法:
参考代码:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>设置项目在主轴空间上的收缩因子</title><style>.container {width: 300px;display: flex;}.container > .item {/* 收缩因子有效的前提是, 所有项目宽度之和必须大于主轴上的当前空间大小 */width: 160px;/* 不收缩 */flex-shrink: 0;/* 收缩, 默认是1,允许收缩填充主轴全部空间 *//* 收缩因子之和: 1 + 1 +1 = 3 *//* 180 / 3 = 60,每个项目需要消化掉60 */flex-shrink: 1;}.container > .item:first-of-type {/* 收缩因子之和: 0.5 + 1 + 1 = 2.5 *//* 180px / 2.5 = 72px *//* 第一个项目: 160 - (72*0.5) = 124px *//* 第二个项目, 第三个项目: 160 -72 = 88px */flex-shrink: 0.5;}</style></head><body><div class="container"><div class="item">1</div><div class="item">2</div><div class="item">3</div></div></body></html>
运行效果图:
计算方法与增长因子类似,只是基础值是因子的总宽度或总高度减去父元素宽度或高度值,份数计算方法一致。
flex项目的基础尺寸,使用
flex-base来实现。
具体代码:
flex-basis: 80px;
实现重新设置项目的尺寸,优先级高于项目的原始尺寸。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>PC通用布局</title><style>/* 初始化 */* {margin: 0;padding: 0;box-sizing: border-box;}a {color: #666;text-decoration: none;}/* 将body转为flex */body {min-width: 680px;display: flex;/* 主轴垂直方向,不换行 */flex-flow: column nowrap;}header,footer {height: 50px;border: 1px solid #000;}/* 将页眉转为flex */header {display: flex;/* 所有项目在交叉轴方向上居中显示 */align-items: center;}header > a {flex: 0 1 100px;text-align: center;}/* Logo */header > a:first-of-type {margin-right: 50px;}header > a:last-of-type {margin-left: auto;}/* 鼠标悬停时忽略logo */header > a:hover:not(:first-of-type) {color: coral;}.container {min-height: 400px;margin: 10px auto;display: flex;justify-content: center;}.container > aside,.container > main {border: 1px solid #000;padding: 10px;}.container > aside {flex: 0 0 200px;}.container > main {flex: 0 0 600px;margin: 0 10px;}footer {display: flex;flex-flow: column nowrap;text-align: center;}</style></head><body><!-- 页眉 --><header><a href="">LOGO</a><a href="">首页</a><a href="">栏目1</a><a href="">栏目2</a><a href="">栏目3</a><a href="">登录</a></header><!-- 主体 --><div class="container"><!-- 左边栏 --><aside>左边栏</aside><!-- 主体内容区 --><main>主体内容区</main><!-- 右边栏 --><aside>右边栏</aside></div><!-- 页脚 --><footer><p>php中文网 ©版权所有 (2018-2022) | 备案号:<a href="">皖ICP-1*********</a></p><p>中国.合肥市***** | 电话: 0551-888888**</p></footer></body></html>
运行效果:
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号