javascript - 如何将 CSS 网格轨道从像素转换为 fr 单位?

标签 javascript css css-grid

我想知道是否可以将 CSS 网格模板轨道从像素转换为 fr。 例如,我有一个宽度为 1894px、高度为 200px 的 DIV 元素,其类为 .grid

.grid {
    display: grid;
    width: 1894px;
    min-height: 200px;
    grid-template-columns: 1196px 100px repeat(2, 1fr);
    grid-template-rows: 1fr repeat(3, 0.5fr) 1fr;
    margin: 10px;
    gap: 0px;
}

所以我想知道如何将grid-template-columns第一轨的值1196px转换为fr。

另外,如果间隙大于 0 会发生什么?

在 Chrome DevTools 中,手动搜​​索预期值时,将跟踪值更改为 4fr 时,我得到 1196px,然后检查“计算”选项卡中的值,但是,我如何才能在 Javascript 中获取这个值?

最佳答案

您想要grid-template-columns: xfr 100px Repeat(2, 1fr);,因此公式为:

width_container = 100px + 3*gap + (x + 2)*F With  x*F = 1196px

根据您的情况,您将拥有

1894px = 100px + (x + 2)*F
1794px = (x + 2)*F

我们进行除法,我们得到:

1.5 = (x + 2)/x
1.5 = 1 + 2/x
x = 4

您的情况的通用公式可以写为:

(width_container - 100px - 3*gap)/1196 = 1 + 2/x
x = 2/(A/1196px - 1) where A = (width_container - 100px - 3*gap)

下面是计算说明。请注意 alt 行与前面的行有何相似之处。由于我们需要从 repeat accept only integer 开始进行舍入,因此在某些情况下不完全相同

$('.grid:not(.alt)').each(function() {
   var w = $(this).width();
   var g = parseInt($(this).css('gap'));
   var A = w - 100 - 3*g;
   
   var x = Math.round(2/(A/1196 - 1));
   $(this).next('.alt').css("grid-template-columns",x+"fr 100px repeat(2, 1fr)");
   console.log(2/(A/1196 - 1) +"("+x+")");
})
.grid {
  display: grid;
  width: 1894px;
  outline: 1px solid;
  grid-template-columns: 1196px 100px repeat(2, 1fr);
  margin: 10px;
  gap: 0px;
}

i {
  display:block;
  height:20px;
  background:red;
}
i:first-child {
  background:blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="grid"><i></i><i></i><i></i><i></i></div>
<div class="grid alt" style=""><i></i><i></i><i></i><i></i></div>

<div class="grid" style="gap:100px;"><i></i><i></i><i></i><i></i></div>
<div class="grid alt" style="gap:100px;"><i></i><i></i><i></i><i></i></div>


<div class="grid" style="gap:50px;"><i></i><i></i><i></i><i></i></div>
<div class="grid alt" style="gap:50px;"><i></i><i></i><i></i><i></i></div>

<div class="grid" style="width:1900px;"><i></i><i></i><i></i><i></i></div>
<div class="grid alt" style="width:1900px;"><i></i><i></i><i></i><i></i></div>

关于javascript - 如何将 CSS 网格轨道从像素转换为 fr 单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62622898/

相关文章:

html - 有没有办法消除我的 CSS3 网格中的间隙,并使网格居中?

css - CSS 网格中彼此围绕的流动元素

javascript - 如何从复杂的数组对象结构中获取数据?

html - 是否有可能创建一个保持流动的响应式图像轮播

css - 在 CSS Grid 中为网格间隙设置不同的长度

html - CSS动画影响页面宽度

javascript - 在弹出图像上显示上一个和下一个图标

javascript - 无法让 unicode 字符正确显示 - Javascript 和 HTML

javascript - ES6 代理的主要用例

javascript - 在上下文创建阶段提升如何工作