当前位置: 首页 > 知识库问答 >
问题:

算法:如何划分网格列宽(如google-chrome)

储志业
2023-03-14

我正在使用JavaScript构建一个流体(html)网格。我喜欢使用bin-packing算法来排序网格项。网格应将列除以百分比或网格中给定的列数。

宽度:100px-3列(33.3333333333%)
33px34px33px

宽度:100px-8列(12.5%)
13px12px13px12px13px12px12px12px

宽度:99px-4列(25%)
25px25px24px25px

<div class="grid">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div> 
</div>

var x = 3; //divisor (3 columns)
var y = 100; //number (100 px)
var rem = y % x; //remainder (modulo (or bitwise))

console.log(rem); //output: 1

共有1个答案

岳谦
2023-03-14

JSFiddle演示宽度:100px-3列(33.33333333333%)
JSFiddle演示宽度:99px-4列(25%)

一种方法是使用一个列数组和一个父网格,然后遍历每一列和每一列中的每一项,根据父网格的宽度和在那里拟合的每一列的剩余值来改变宽度。

function fluid(grid,columns){
 var colCount = columns.length;
 var gridWidth = grid.clientWidth;
 var colWidth = gridWidth / colCount;
 if( parseInt(colWidth,10) === colWidth ){
  for(var i = 0; i < colCount; i++){
   var col = columns[i];
   for(var n = 0; n < col.length; n++){
    col[n].style.width = colWidth + "px";     
   }      
  }
 }else{
  var remainder = gridWidth - parseInt(colWidth,10) * colCount;
  var added = 0;
  for(var i = 0; i < colCount; i++){
   var calcWidth; 
   if( i > 0 && added < remainder ){
    added++;
    calcWidth = parseInt(colWidth,10)+1 + "px";
   }else{
    calcWidth = parseInt(colWidth,10) + "px";
   }
   var col = columns[i];
   for(var n = 0; n < col.length; n++){
    col[n].style.width = calcWidth;     
   }
  }
 }
}
 类似资料:
  • 我想使用FXML在JavaFX中创建一个包含3列的GridPane。中柱上有一个大标签。中间列采用标签的宽度。左栏和右栏各占表单剩余宽度的一半(50%)。我尝试将百分之五十的宽度设置为左栏和右栏。但是,宽度设置为整个形状的50%,而不是剩余宽度。例如,表单的宽度为1000px。中柱可能需要400px,而左柱和右柱各自需要300px。即使窗体在运行时调整大小,此公式也应保持不变。

  • 问题内容: 我想用包含不同长度字符串的列创建一个PdfPTable。我了解到,每一列的每个单元格/列的宽度都相同(默认值),或者可以设置每一列应占用的空间比例。 但是,我希望列的宽度可以根据需要而定,但不要任何宽度都取决于插入的数据。假设表格很容易放在页面上(不间断!)。当然,我可以手动浏览所有数据并计算每列的最大字符串长度,并相应地设置表的属性,但是我想知道itext本身是否已经提供了这样一个通

  • 问题内容: 我知道也有类似的问题,但这是专门问如何使用CSS Grid Layout做到这一点。 因此,我们有以下基本网格设置: HTML(带有侧边栏): CSS: 要创建看起来像这样的布局: 如果页面没有侧边栏,即。html看起来像这样,但是具有相同的CSS: HTML(无边栏): 页面布局看起来像这样(破折号代表空白) 我知道为什么这样做,网格列仍在规则中定义。 我只是想知道如何告诉网格,如果

  • 我使用作为回收器视图的布局管理器。 但我想平分两列的宽度。我怎么能那样做?

  • 划分问题(或number partitioning1)是一个任务,它决定一个给定的正整数多集S是否可以划分为两个子集S1和S2,使得S1中的数之和等于S2中的数之和。 这个问题有一个贪婪的算法: 解决这个问题的一种方法是贪婪算法,它模仿孩子们为游戏选择队伍的方式,将数字按降序进行迭代,将每个数字分配到和较小的子集中。这种方法的运行时间为O(n log n)。当集合中的数字大小与其基数大小差不多或更

  • 问题内容: 例如 : 如何使用mysql计数此表的列? 问题答案: