
fr是css刚出的一个新的单位,目前经过测试在chrome和firefox是可以支持的
举个案列,拿一个网格布局来说吧
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
.grid {
height: 500px;
width: 500px;
background: #ccc;
margin: 20px auto;
overflow: auto;
display: grid;
grid-template-columns: repeat(4, 25%);
grid-column-gap: 10px;
}
.column {
background: #f66;
}
</style>
</head>
<body>
<div class="grid">
<div class="column">1</div>
<div class="column">2</div>
<div class="column">3</div>
<div class="column">4</div>
</div>
</body>
</html>
看一下效果
这时会发现下面出现了滚动条,如果不是4个网格而是11个网格呢,那计算起来就非常麻烦了,那个网格布局还提供了另一种写法,就是把算数交给计算机来处理,那就改成这样
grid-template-columns: repeat(4, calc(100%/4));
这样还是有滚动条,那就再进一步优化
grid-template-columns: repeat(4, calc((100% - 10px * 3)/ 4));
这样写就可以消除滚动条,这只是对于少量的网格布局适用,对于无数个网格怎么办呢,这时我们的 fr 单位就出场了
我们来看一个复杂的列子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
.grid {
height: 500px;
width: 500px;
background: #ccc;
margin: 20px auto;
overflow: auto;
display: grid;
grid-template-columns: 100px repeat(11, 1fr);
grid-column-gap: 10px;
}
.column {
background: #f66;
}
</style>
</head>
<body>
<div class="grid">
<div class="column">1</div>
<div class="column">2</div>
<div class="column">3</div>
<div class="column">4</div>
<div class="column">5</div>
<div class="column">6</div>
<div class="column">7</div>
<div class="column">8</div>
<div class="column">9</div>
<div class="column">10</div>
<div class="column">11</div>
<div class="column">12</div>
</div>
</body>
</html>
看一下效果
用了fr 这个单位就不用去计算了,浏览器会自动去适配,是不是很人性化