Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一个字符一个字符消失的占位符_Javascript_Html_Css - Fatal编程技术网

Javascript 一个字符一个字符消失的占位符

Javascript 一个字符一个字符消失的占位符,javascript,html,css,Javascript,Html,Css,我的目标是有一个输入元素,在输入中键入字符时,占位符会一个字符一个字符地消失。最好使用带有占位符MM/DD/YYYY的生日输入来解释这一点。如果在输入中键入06,占位符/DD/YYYY仍应保留 尽管这个问题在以下章节中得到了回答: ,我还有一个限制:输入必须是contenteditable=true div。此处接受的答案不适用于contenteditable div 纯HTML、CSS和JavaScript的纯解决方案是最好的。请不要用jQuery。这是我的窍门: 占位符位于contented

我的目标是有一个输入元素,在输入中键入字符时,占位符会一个字符一个字符地消失。最好使用带有占位符MM/DD/YYYY的生日输入来解释这一点。如果在输入中键入06,占位符/DD/YYYY仍应保留

尽管这个问题在以下章节中得到了回答: ,我还有一个限制:输入必须是contenteditable=true div。此处接受的答案不适用于contenteditable div

纯HTML、CSS和JavaScript的纯解决方案是最好的。请不要用jQuery。

这是我的窍门:

占位符位于contenteditable后面 contenteditable需要根据内容大小增长。这是通过在contenteditable上设置display:inline块来完成的。 父元素和contenteditable都应具有相同的背景色。 onclick函数被添加到父元素中,以允许在宽度为0%时关注可编辑内容 单空格字体用于确保字体中的每个字符具有相同的宽度,从而使您编写的每个字符都只隐藏一个字符 当contenteditable的宽度为0时,将添加一个伪插入符号,以指示焦点实际上位于占位符内。这是使用闪烁动画完成的,带有一般同级combinator~、空选择器和:焦点选择器 占位符也可以通过after或before伪元素实现,但是由于我们不能将伪元素放在contenteditable中,因此使用实际的dom元素作为占位符允许使用通用同级组合符来处理contenteditable空状态 例如,当宽度为0时,某些浏览器会显示原始插入符号。为了解决双插入符号问题,我们将输入插入符号隐藏在空状态 CSS变量用于同步主容器中嵌套的所有元素的颜色。我添加了两个版本:灰色背景和白色背景。此外,这是这里使用的唯一一个CSS功能,它还没有被所有现代浏览器完全支持。因此,如果您希望获得完全的浏览器支持,您可以放弃这一点,因为这对结果并不重要:-

IE&Edge仍在空状态下显示原始插入符号。 我在javascript中添加了一个函数来删除这些浏览器上的假插入符号

//获取IE或Edge浏览器版本 var isIEOrEdge=检测; 如果是红色的{ 让editables=document.querySelectorAll.kb editable'; 对于let i=0;i0{ //IE 10或更早版本=>返回版本号 返回parseIntua.substringmsie+5,ua.indexOf',msie,10; } var trident=ua.indexOf'trident/'; 如果三叉戟>0{ //IE 11=>返回版本号 var rv=ua.indexOf'rv:'; 返回parseIntua.substringrv+3,ua.indexOf'',rv,10; } var edge=ua.indexOf'edge/'; 如果边>0{ //Edge IE 12+=>返回版本号 返回parseIntua.substringedge+5,ua.indexOf'',edge,10; } //其他浏览器 返回false; } .kb可编辑{ -背景颜色:D3; -占位符颜色:灰色; -文字颜色:黑色; -边框颜色:透明; -填充物:5px; 宽度:200px; 高度:200px; 背景:var-bg颜色; 位置:相对位置; 对齐项目:开始; 字体系列:“Anonymous Pro”,monospace; 字体大小:14px; 溢出y:自动; 显示:内联块; 光标:文本; 边框:1px纯色边框颜色; 填充:var填充; } .kb可编辑[内容可编辑=真]{ 位置:相对位置; z指数:2; 背景:var-bg颜色; 颜色:var文本颜色; 大纲:无; 最大宽度:100%; 最大高度:100%; 显示:内联块; /*处理长单词,将它们分成多行*/ 单词包装:打断单词; } .kb可编辑.kb占位符{ 位置:绝对位置; 顶部:var填充; 底部:var填充; 左:var填充; 右:var填充; 颜色:var占位符颜色; } /*用于非chrome在空状态下隐藏原始插入符号*/ [contenteditable=true]:焦点:空{ 颜色: 透明的 文本阴影:0黑色; } .kb可编辑:非.kb-edge[内容可编辑=true]:焦点:空~.kb占位符:之前{ 内容:|; 颜色:var文本颜色; 位置:绝对位置; 排名:0; 左:0; 动画:1s闪烁步结束无限; 插入符号颜色:透明; } @关键帧闪烁{ 从…起 到{ 颜色:透明; } 50% { 颜色:黑色; } } 我是占位符 我是白人版! 这是我的窍门:

占位符位于contenteditable后面 contenteditable需要根据内容大小增长。这是通过在contenteditable上设置display:inline块来完成的。 父元素和contenteditable都应具有相同的背景色。 onclick函数被添加到父元素中,以允许在宽度为0%时关注可编辑内容 单空格字体用于确保字体中的每个字符具有相同的宽度,从而使您编写的每个字符都只隐藏一个字符 当contenteditable的宽度为0时,将添加一个伪插入符号,以指示焦点实际上位于占位符内。这是使用闪烁动画完成的,带有一般同级combinator~、空选择器和:焦点选择器 占位符也可以通过after或before伪元素实现,但是由于我们不能将伪元素放在contenteditable中,因此使用实际的dom元素作为占位符允许使用通用同级组合符来处理contenteditable空状态 例如,当宽度为0时,某些浏览器会显示原始插入符号。为了解决双插入符号问题,我们将输入插入符号隐藏在空状态 CSS变量用于同步主容器中嵌套的所有元素的颜色。我添加了两个版本:灰色背景和白色背景。此外,这是这里使用的唯一一个CSS功能,它还没有被所有现代浏览器完全支持。因此,如果您希望获得完全的浏览器支持,您可以放弃这一点,因为这对结果并不重要:-

IE&Edge仍在空状态下显示原始插入符号。 我在javascript中添加了一个函数来删除这些浏览器上的假插入符号

//获取IE或Edge浏览器版本 var isIEOrEdge=检测; 如果是红色的{ 让editables=document.querySelectorAll.kb editable'; 对于let i=0;i0{ //IE 10或更早版本=>返回版本号 返回parseIntua.substringmsie+5,ua.indexOf',msie,10; } var trident=ua.indexOf'trident/'; 如果三叉戟>0{ //IE 11=>返回版本号 var rv=ua.indexOf'rv:'; 返回parseIntua.substringrv+3,ua.indexOf'',rv,10; } var edge=ua.indexOf'edge/'; 如果边>0{ //Edge IE 12+=>返回版本号 返回parseIntua.substringedge+5,ua.indexOf'',edge,10; } //其他浏览器 返回false; } .kb可编辑{ -背景颜色:D3; -占位符颜色:灰色; -文字颜色:黑色; -边框颜色:透明; -填充物:5px; 宽度:200px; 高度:200px; 背景:var-bg颜色; 位置:相对位置; 对齐项目:开始; 字体系列:“Anonymous Pro”,monospace; 字体大小:14px; 溢出y:自动; 显示:内联块; 光标:文本; 边框:1px纯色边框颜色; 填充:var填充; } .kb可编辑[内容可编辑=真]{ 位置:相对位置; z指数:2; 背景:var-bg颜色; 颜色:var文本颜色; 大纲:无; 最大宽度:100%; 最大高度:100%; 显示:内联块; /*处理长单词,将它们分成多行*/ 单词包装:打断单词; } .kb可编辑.kb占位符{ 位置:绝对位置; 顶部:var填充; 底部:var填充; 左:var填充; 右:var填充; 颜色:var占位符颜色; } /*用于非chrome在空状态下隐藏原始插入符号*/ [contenteditable=true]:焦点:空{ 颜色:透明; 文本阴影:0黑色; } .kb可编辑:非.kb-edge[内容可编辑=true]:焦点:空~.kb占位符:之前{ 内容:|; 颜色:var文本颜色; 位置:绝对位置; 排名:0; 左:0; 动画:1s闪烁步结束无限; 插入符号颜色:透明; } @关键帧闪烁{ 从…起 到{ 颜色:透明; } 50% { 颜色:黑色; } } 我是占位符 我是白人版!
是的,但是需要从头开始编写和测试一些复杂的代码。为什么它必须在contenteditable中?1更简单,2如果我想切换到输入字段,我不能在链接线程中使用解决方案,因为它使用jQuery,我个人讨厌jQuery。还有其他屏蔽脚本around@charlietfl我同意解决方案需要一些技巧才能完成,但我认为这是一个有趣的案例。我希望我的回答能涵盖大部分内容。它包括一些不同寻常的CSS选择器,但除了关注elementRight之外,几乎不包含任何javascript代码,但需要从头开始编写和测试一些复杂的代码。为什么它必须在contenteditable中?1更简单,2如果我想切换到输入字段,我不能在链接线程中使用解决方案,因为它使用jQuery,我个人讨厌jQuery。还有其他屏蔽脚本around@charlietfl我同意解决方案需要一些技巧才能完成,但我认为这是一个有趣的案例。我希望我的回答能涵盖大部分内容。它包括一些不同寻常的CSS选择器,但除了关注元素外,几乎不包含任何javascript代码