Javascript 我怎样才能在输入中得到一个0%和100%的div?
如何使@符号正好位于输入的100%和0%范围内 HTML:Javascript 我怎样才能在输入中得到一个0%和100%的div?,javascript,css,Javascript,Css,如何使@符号正好位于输入的100%和0%范围内 HTML: 您可以尝试以下代码: <div id="testContainer"> <input type="text" name="email" id="test01" value="@"> </div> 使用负边距怎么样 #test2{ position: absolute; left: 100%; z-index:1; width: 0px; margin-left: -15px; }
您可以尝试以下代码:
<div id="testContainer">
<input type="text" name="email" id="test01" value="@">
</div>
使用负边距怎么样
#test2{
position: absolute;
left: 100%;
z-index:1;
width: 0px;
margin-left: -15px;
}
我假设您想要某种加载条效果,您只需将CSS设置为JavaScript计算的百分比。如果是,请考虑以下内容:
element.style.left = 'calc(' + percentage + '% - ' percentage/5 + 'px)'
因此,如果您的百分比
变量为80%,上述结果将导致计算(80%-16px)
。如果您不熟悉,calc只需将元素设置为计算值
如果加载条效果确实是您所需要的,那么此解决方案非常有效。由于在0%时,它将显示calc(0%-0)
和100%calc(100%-20px)
。当然,要减去的像素的实际数量取决于移动元素的大小,但原理是一样的
无法真正想出一个纯CSS解决方案。假设您知道“@”字符的宽度,可以使用
calc()
和translateX
来完成此操作
假设“@”字符的宽度为15px:
1) 将其设置为容器的100%宽度减去其自身的宽度(15px)width:calc(100%-15px)代码>
2) 现在,translateX
将按照我们希望的方式对其进行操作,其中,translateX(0%)
处的“@”位于输入的开头,而translateX(100%)
处的“@”位于输入的结尾
3) 确保在容器上设置overflow:hidden
在下面的演示中-将鼠标悬停在输入上方:
#测试容器{
显示:内联块;
位置:相对位置;
溢出:隐藏;
}
#testContainer:悬停:之后{
转化:translateX(100%);
}
#testContainer:之后{
内容:“@”;
位置:绝对位置;
左:0;
排名:0;
宽度:钙(100%-15px);
转化:translateX(0%);
z指数:1;
转变:转变;
}
#测试3{
宽度:500px;
}
您可以像这样使用before和after元素:
HTML
<div class="atBoxContainer">
<input class="atBox" />
</div>
这里有一支笔供你看:
[编辑]刚刚清理了CSS一点,所以您希望@符号正好位于输入框的两端?我不相信您可以,不能跨浏览器。唯一可能的方法是在@
符号之间有一堆空格(
)。@Alex Waters你能详细说明你的问题吗?你想要的是什么(悬停在输入上)-转换介于translateX(0%)
到translateX(100%)
是,@zacbrady写的东西。覆盖很重要,这样我就可以用javascript移动div,使其实际匹配输入中的%位置。(它是一个滑块)如果我将其设置为0%,则它位于输入之外。我需要它来映射0-100%的输入。我想他知道他可以设置left
或right
属性,但是他想使用单个百分比值在输入范围内移动元素。@GMchris我根据这个问题编辑了这篇文章,我认为他现在需要的内容。我永远也想不到这就是OP的要求。虽然我喜欢,但很酷。这真的很好。非常感谢。
#test2{
position: absolute;
left: 100%;
z-index:1;
width: 0px;
margin-left: -15px;
}
element.style.left = 'calc(' + percentage + '% - ' percentage/5 + 'px)'
<div class="atBoxContainer">
<input class="atBox" />
</div>
.atBox {
width: 500px;
}
.atBoxContainer:before, .atBoxContainer:after {
content: '@';
width: 0px;
height: 0px;
position: relative;
display: inline-block;
}
.atBoxContainer:before {
left: 10px;
}
.atBoxContainer:after {
right: 22px;
}