设置动态变化的元素的左侧位置(在循环中)

Posted

技术标签:

【中文标题】设置动态变化的元素的左侧位置(在循环中)【英文标题】:Setting left position of an element that changes dynamically(in a loop) 【发布时间】:2016-01-16 00:08:04 【问题描述】:

我有以下 javascript 代码。 ***

var pos = document.getElementById('pos'); pos.style.position = '相对'; pos.style.width = '100%'; pos.style.height = '100%'; pos.style.background = '灰色'; for(i=1;i var div = document.createElement('div'); var node = document.createTextNode("这是新的。"); div.appendChild(节点); 变量 j = i-1; var f = Math.round(250/(i+1)); var d = Math.round(250/i); var col = 'rgb('+f+','+140+','+d+')'; div.style.background = col; div.style.width = '200px'; div.style.height = '300px'; div.style.position = '相对'; div.style.top = '0px'; div.style.border = '实心'; div.style.borderColor = '绿色'; div.style.borderWidth = '2px'; 左 = Math.floor((j*200)+30+30); 左=左+'px'; div.style.left = '30px'; pos.appendChild(div);


html 代码: ***


第一个元素的位置正确,顶部为 0px,左侧为 30px,但第二个和第三个不正确,我尝试将显示用作内联,但仅将它们设置在同一行但未设置左侧定位。结果是 as shown in this picture

But I would like it to appear as:

【问题讨论】:

【参考方案1】:

添加display:inline-block 并将一些margin-right:10px 添加到动态创建的元素中

这里是修改后的代码:

var pos = document.getElementById('pos');
     pos.style.position = 'relative';
     pos.style.width = '100%';
     pos.style.height = '100%';
     pos.style.background = 'gray';
     for(i=1;i<4;i++)
     
     var div = document.createElement('div');
     var node = document.createTextNode("This is new.");
     div.appendChild(node);
     var j = i-1;
     var f = Math.round(250/(i+1));
     var d = Math.round(250/i);
     var col = 'rgb('+f+','+140+','+d+')';
     div.style.background = col;
     div.style.width = '200px';
     div.style.height = '300px';
     div.style.position = 'relative';
     div.style.display="inline-block"; //add this line
     div.style.marginRight="10px";     //add this line
     div.style.top = '0px';
     div.style.border = 'solid';
     div.style.borderColor = 'green';
     div.style.borderWidth = '2px';
     left = Math.floor((j*200)+30+30);
     left = left+'px';
     div.style.left = '30px';
     pos.appendChild(div);
     

查看fiddle

【讨论】:

【参考方案2】:
 var pos = document.getElementById('pos');
     pos.style.position = 'relative';
     pos.style.width = '100%';
     pos.style.height = '100%';
     pos.style.background = 'gray';
     for(i=1;i<4;i++)
     
     var div = document.createElement('div');
     var node = document.createTextNode("This is new.");
     div.appendChild(node);
     var j = i-1;
     var f = Math.round(250/(i+1));
     var d = Math.round(250/i);
     var col = 'rgb('+f+','+140+','+d+')';
     div.style.background = col;
     div.style.width = '200px';
     div.style.height = '300px';
     div.style.position = 'relative';
     div.style.display = 'inline-block';  //added 
     div.style.marginLeft = '1%';       //added
     div.style.top = '0px';
     div.style.border = 'solid';
     div.style.borderColor = 'green';
     div.style.borderWidth = '2px';
     left = Math.floor((j*200)+30+30);
     left = left+'px';
     div.style.left = '30px';
     pos.appendChild(div);
     

将每个 div 显示为 inline-block 并给它们一个边距 Check this

【讨论】:

以上两个答案都按要求返回显示,但我的问题是如何确保在不使用边距的情况下正确设置左侧和顶部,因为我的代码取决于不时变化的数字,我们根据创建的对象数量从中心设置创建的对象,因此每个元素每次都不会相同 为此我们应该以百分比设置宽度

以上是关于设置动态变化的元素的左侧位置(在循环中)的主要内容,如果未能解决你的问题,请参考以下文章

c# winform groupbox上动态生成的控件,如何让控件随着分辨率变化而自动调整位置和大小

angular - 指令中表单元素之间动态变化的验证要求

c# winform groupbox上动态生成的控件,如何让控件随着分辨率变化而自动调整位置和大小

如何制作具有动态变化和循环文本的 UILabel?

selenium 动态元素的定位

Java基础知识点(数组的地址值及元素访问和动态初始化数组默认初始值的变化规律)