【问题标题】:Is there any way to change one word color of placeholder有没有办法改变占位符的一个单词颜色
【发布时间】:2016-10-08 13:21:43
【问题描述】:

假设我有这个文本字段

<input type="text" placeholder="I am placeholder">

我知道使用 css 我们可以像这样改变占位符的颜色,但是有没有办法只改变一个单词的颜色。

::-webkit-input-placeholder { /* Chrome/Opera/Safari */
  color: pink;
}
::-moz-placeholder { /* Firefox 19+ */
  color: pink;
}
:-ms-input-placeholder { /* IE 10+ */
  color: pink;
}
:-moz-placeholder { /* Firefox 18- */
  color: pink;
}

此代码将更改完整的占位符颜色,但我只想更改单词 placeholder 的颜色,而不是完整的 I am placeholder

【问题讨论】:

标签: html css placeholder


【解决方案1】:

你可以看看mix-blend-mode

编辑:目前,查看并使用下面的更新(3rd sn-p) background-clip。强>

label {
  display: inline-block;
  background: linear-gradient(to right, red 2.2em, blue 2.2em);
  border: inset;
  /* border here instead input */
  font-family: monospace;
  /* less surprise about length of text at screen */
}
input {
  box-shadow: inset 0 0 0 2em white;
  /* covers the background, needed for the blending */
}
input:invalid {
  /* color part of text only when placeholder is shown */
  mix-blend-mode: screen;
}
/* snippet disclaimer */

.disclaim {
  mix-blend-mode: screen;
}
body {
  background: white;
}
<label>
  <input placeholder="I am placeholder" required />
</label>
<p class="disclaim">not avalaible yet for <span>'your browser',</span> please be patient.</p>

否则您需要使用 HTML 和文本:

label {
  display: inline-block;
}
label>span {
  position: absolute;
  padding-left: 3px;
}
label>span span {
  color: blue
}
input {
  position: relative;
  background: white;
}
input:invalid {
  background: none;
}
<label>
  <span>I am <span>placeholder</span></span>
  <input type="text" required />
</label>

编辑 2020

background-clip 现在得到了很好的支持,可以用 mix-blend-mode 代替

mix-blend-mod 技巧是 Firefoxe 的一种解决方法。 Firefoxe 理解 color:transparent 但不理解 background-clip-text;... 文本消失了。

label {
  display: inline-block;
  font-family: monospace;
  /* less surprise about length of text at screen */
}
input:invalid {
  background: linear-gradient(to right, red 2.2em, blue 2.2em);
  background-clip:text;
  color:transparent;
}
<label>
  <input placeholder="I am placeholder" required />
</label>

【讨论】:

  • 你能解释一下mix-blend-mode
  • @GauravAggarwal mix-blend-mode 允许不同的堆叠元素通过不同的过滤器将它们的颜色混合在一起 developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode 。它允许在这里混合黑暗以与白色没有的下面的渐变颜色混合。每个值都有不同的效果。
  • 我们也可以调整颜色区域的大小吗?
  • @GauravAggarwal 是的,我在第一个 2.2em (i am) 上设置了红色,然后其余部分为蓝色(红色/蓝色可以是透明的或任何颜色)
【解决方案2】:

您不可能使用标准的占位符来做到这一点。而是创建一个div 并将您的输入元素和另外一个子元素(例如span/p 元素)放入此div 并将span/p 放置在您的输入元素中,并在焦点上隐藏span/p 元素。

类似这样的东西:link

【讨论】:

    【解决方案3】:

    您好朋友,您应该使用属性为 contenteditable="true" 的 div 标签而不是 input 标签,然后使用 javascript 查找其子元素并更改其大小颜色等。我认为这是您问题的唯一答案。如果你只想改变第一个字母或单词的颜色,你应该使用伪选择器。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2015-02-16
    相关资源
    最近更新 更多