javascript - 使占位符插入符在 contentEditable 元素中居中

标签 javascript html css contenteditable

我有以下内容:http://jsfiddle.net/mb76koj3/ .

[contentEditable=true]:empty::before{
  content:attr(data-ph);
  color: #CCC;
  text-align: center;
}

h1 {
  text-align: center;
}
<h1 contenteditable="true" data-ph="Name"></h1>

问题是 <h1>居中,但占位符插入符未居中(直到您开始键入)。插入符号在左侧,我该如何更改它?

最佳答案

这不是一个理想的解决方案,但我们可以通过应用 padding-left 来伪造效果的 50%:empty元素使光标出现在中间。

然后使用绝对定位和负值 translateX 将占位符(伪元素)居中对齐变换函数。

* {
  margin: 0;
  padding: 0;
}

@-moz-document url-prefix() { /* CSS Hack to fix the position of cursor on FF */
  [contentEditable=true]:empty {
    padding-top: 1em;
    padding-bottom: .25em;
    -moz-box-sizing: content-box;
  }
}

[contentEditable=true]:empty {
  padding-left: 50%;
  text-align: left; /* Fix the issue on IE */
}

[contentEditable=true]:empty::before{
  content:attr(data-ph);
  color: #CCC;
  position: absolute;
  top: 0;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -moz-transform:  translateX(-50%);
  -ms-transform:  translateX(-50%);
  -o-transform:  translateX(-50%);
  transform:  translateX(-50%);
}

h1 {
  text-align: center;
  position: relative;
}
<h1 contenteditable="true" data-ph="Name"></h1>

唯一剩下的问题——正如在 OP 提供的代码中所见——是在 Firefox 上,一个空的 <br>元素附加到 contentEditable导致 :empty 的元素伪类不再匹配元素。因此占位符不会被恢复。

然而,由于问题是关于光标的位置,我认为这种行为对 OP 来说很好。

关于javascript - 使占位符插入符在 contentEditable 元素中居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29288975/

相关文章:

html - 如何使用CSS在一段中添加多种字体?

html - 如何为 link/div 背景添加 css 过渡颜色更改

javascript - 有时刷新页面时,jQuery 隐藏的内容会出现几秒钟

javascript - 当全局变量改变时更新 react 组件状态

javascript - D-pad 导航 - 数据结构和编程?

javascript - 为什么 Controller 中的数组赋值会破坏 Angular 代码?

html - 当我尝试使用 CSS 时我的页面出现错误

javascript - 如何通过添加子项使 div 溢出时可滚动

javascript - 如何在 google.script 之间导航

javascript - 如何使用 javascript 根据条件为 html 标记 (<span>) 添加类