[英]A CSS (or JavaScript) way of making an elements position relative to the screen resolution
[英]javascript: change CSS position by relative amount
基本上,我想做的是每次执行JavaScript(通过单击)时, <div>
的CSS left
值都会减少20%。 因此,例如, left
开始于40%。 第一次单击时,它应该变成20%,然后是0%,然后是-20%,依此类推。 我在下面更新了我的代码:
FilmstripLeft = parseInt(document.defaultView.getComputedStyle(ul).left, 10) / 4;
ul.style.left = (FilmstripLeft - 20) + "%";
ul
是我使用document.getElementById()
获得的<div>
。 该代码现在可以使用,但是我不确定第一行末尾的除以4。 我测试的结果是,即使起始值为40%,在最后添加/ 4
之前,该行仍返回160。 我不确定这是否是因为它返回的是以像素为单位的值而不是百分比,在这种情况下,除以4仅在left
为160px
吗?
getComputedStyle()
不能很好地用于您的目的,因为根据定义,它会返回以像素为单位的样式的计算值,而不是原始值的相对百分比。 为了计算使用计算样式的“ 20%”,您必须手动找到父元素的宽度,然后取其20%作为宽度:
function onClick(){ var myElement = document.getElementById("inner"); var leftValue = parseFloat(window.getComputedStyle(myElement).left); var parentElement = myElement.parentElement; var parentWidth = parseFloat(window.getComputedStyle(parentElement).width); var twentyPercent = parentWidth * 0.20; var newLeftValue = (leftValue - twentyPercent) + "px"; myElement.style.left = newLeftValue; updateStatus(); } function updateStatus(){ document.getElementById("status").innerHTML = window.getComputedStyle(document.getElementById("inner")).left; } updateStatus(); document.getElementById("btn").addEventListener("click", onClick);
#outer { width: 400px; height: 20px; background: #888; } #inner { width: 20px; height: 20px; position: relative; left: 80%; background: red; }
<div id="outer"> <div id="inner"></div> </div> <button id="btn">click me</button> <div id="status"></div>
此方法的缺点是它会将left
固定为像素值,而不是父级的真实百分比,因此,如果窗口/父级宽度发生变化,则left
值将无法正确匹配。
如果left
值是嵌入式HTML样式而不是CSS样式,则会更容易,因为您可以直接使用element.style
(直接读取HTML样式值)获取它。 然后,您可以分配一个新的left
值作为真实百分比,如果窗口/父级宽度发生更改,该值将更新。
function onClick(){ var myElement = document.getElementById("inner"); // Note how #inner's left value is now inline instead of CSS var leftValue = parseFloat(myElement.style.left); var newLeftValue = (leftValue - 20) + "%"; myElement.style.left = newLeftValue; updateStatus(); } function updateStatus(){ document.getElementById("status").innerHTML = document.getElementById("inner").style.left; } updateStatus(); document.getElementById("btn").addEventListener("click", onClick);
#outer { width: 400px; height: 20px; background: #888; } #inner { width: 20px; height: 20px; position: relative; background: red; }
<div id="outer"> <div id="inner" style="left: 80%"></div> </div> <button id="btn">click me</button> <div id="status"></div>
因此,如果可能的话,将样式内联而不是放入CSS,因为它们更易于访问。 从技术上讲,可以使用JavaScript访问CSS样式表规则,但是它非常复杂,如果您不熟悉Web开发,我不建议您这样做。
我的div的“左”值减少了20%
不。根据您的解释,您希望将其降低20 个百分点 ,而不是20%。
getComputedStyle(ul).left
请注意,百分比是相对单位。 计算时,它们将转换为绝对长度。
您只能以内联样式访问原始百分比
var target = document.getElementById("target"); document.querySelector('input').addEventListener('click', function() { target.style.left = parseFloat(target.style.left) - 20 + '%'; });
#target { position: relative; width: 30px; height: 30px; background: blue; }
<div id="target" style="left: 80%"></div> <input type="button" value="Click" />
但是您不需要原始百分比即可减去20个百分点。 您可以使用calc
:
var target = document.getElementById("target"); document.querySelector('input').addEventListener('click', function() { var current = getComputedStyle(target).left; target.style.left = 'calc(' + current + ' - 20%)'; });
#target { position: relative; left: 80%; width: 30px; height: 30px; background: blue; }
<div id="target"></div> <input type="button" value="Click" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.