【问题标题】:Is it possible multiple text color in a single placeholder?单个占位符中是否可以有多种文本颜色?
【发布时间】:2016-09-19 16:59:30
【问题描述】:

我想要一个有多种颜色文字的占位符。可以吗 请帮帮我。

我有一个输入文本,其中占位符显示我是个好孩子。 我想要颜色不同的好词。

【问题讨论】:

  • 为此使用span标签
  • 使用占位符无法实现这一点。您不能在输入元素的占位符属性中添加跨度元素。
  • 就像@Bhadra 所说,使用占位符属性你无法实现这一点。但是使用占位符技术是的。如果您伪造占位符(例如在单击时隐藏的输入上放置一个重叠的跨度),您可以做任何您想做的事情。
  • 也许您可以调整这个问题中的小提琴以使用占位符:stackoverflow.com/questions/5994408/…
  • @Rvervuur​​t 这也很好。但我找到了简单的解决方案 Mr_Green 方式。

标签: javascript jquery html css


【解决方案1】:

,无法为默认占位符着色,但您可以创建类似于占位符的元素。因此,您可以为字母着色。这是默认占位符的解决方法。

注意我用的是opacity: 0.5,你可以根据需要更改。


HTML

.input-field {
    position: relative;
    display: inline-block;
}
.input-field > label {
    position: absolute;
    left: 0.5em;
    top: 50%;
    margin-top: -0.5em;
    opacity: 0.5;
}
.input-field > input[type=text]:focus + label {
    display: none;
}
.input-field > label > span {
    letter-spacing: -2px;
}
.first-letter {
    color: red;
}
.second-letter {
    color: blue;
}
.third-letter {
    color: orange;
}
.fourth-letter {
    color: green;
}
.fifth-letter {
    color: yellow;
}
    <div class="input-field">
        <input id="input-text-field" type="text"></input>
        <label for="input-text-field"> 
            <span class="first-letter">H</span>  
            <span class="second-letter">E</span>
            <span class="third-letter">L</span>
            <span class="fourth-letter">L</span>
            <span class="fifth-letter">O</span>
        </label>
    </div>

Working Fiddle


更新:

仅 CSS(:placeholder-shown

上面的小提琴有一个错误,即当您在文本框中输入内容并单击外部时,占位符在输入的文本上方再次可见。

所以,为了让它更完美,我们可以使用:placeholder-shown,它除了chrome和firefox之外还没有太多支持。

代码如下:

.input-field {
  position: relative;
  display: inline-block;
}

.input-field > label {
  position: absolute;
  left: 0.5em;
  top: 50%;
  margin-top: -0.5em;
  opacity: 0.5;
  display: none;
}

.input-field > input[type=text]:placeholder-shown + label {
  display: block;
}

.input-field > label > span {
  letter-spacing: -2px;
}

.first-letter {
  color: red;
}

.second-letter {
  color: blue;
}

.third-letter {
  color: orange;
}

.fourth-letter {
  color: green;
}

.fifth-letter {
  color: yellow;
}
<div class="input-field">
  <input id="input-text-field" type="text" placeholder=" "></input>
  <label for="input-text-field">
    <span class="first-letter">H</span>
    <span class="second-letter">E</span>
    <span class="third-letter">L</span>
    <span class="fourth-letter">L</span>
    <span class="fifth-letter">O</span>
  </label>
</div>

Working Fiddle

使用 JS(没有:placeholder-shown):

addListenerMulti(document.getElementById('input-text-field'), 'focus keyup', blurme);

function blurme(e) {
  var element = e.currentTarget;
  element.classList[(element.value.length !== 0) ? "add" : "remove"]('hide-placeholder');
}

function addListenerMulti(el, s, fn) {
  s.split(" ").forEach(function(e) {
    return el.addEventListener(e, fn, false)
  });
}
.input-field {
  position: relative;
  display: inline-block;
}
.input-field > label {
  position: absolute;
  left: 0.5em;
  top: 50%;
  margin-top: -0.5em;
  opacity: 0.5;
}
.hide-placeholder + label {
  display: none;
}
.input-field > label > span {
  letter-spacing: -2px;
}
.first-letter {
  color: red;
}
.second-letter {
  color: blue;
}
.third-letter {
  color: orange;
}
.fourth-letter {
  color: green;
}
.fifth-letter {
  color: yellow;
}
<div class="input-field">
  <input id="input-text-field" type="text"></input>
  <label for="input-text-field">
    <span class="first-letter">H</span>
    <span class="second-letter">E</span>
    <span class="third-letter">L</span>
    <span class="fourth-letter">L</span>
    <span class="fifth-letter">O</span>
  </label>
</div>

Working Fiddle

【讨论】:

  • 这不会为占位符着色。它基于根本不使用 HTML 占位符,而是构建具有相似外观的东西。通过在输入字段后放置字母也会产生可访问性问题。
  • @JukkaK.Korpela 更新了我的帖子。
【解决方案2】:

CSS 可以帮助你(还不是 IE)。 mix-blend-mode + gradientbackground 在 2 个容器中分派。

我使用required(属性)和:invalid(CSS)仅在显示placeholder时触发效果。

有关信息,请查看:

示例(用于处理mix-blend-mode 的浏览器)

input {
  font-family:monospace;
  vertical-align:middle;  
  font-size:2em;
}
input:invalid {
  mix-blend-mode:screen;
  text-shadow:0 0 1px black,0 0 1px black,0 0 1px black,0 0 1px black,0 0 1px black; /* increase visibility */
}
label {
  background:repeating-linear-gradient(to right, 
    pink 10%,
    blue 10%,
    blue 20%,
    purple 20%,
    purple 30%,
    red 30%,
    red 40%,
    green 40%,
    green 50%,
    turquoise 50%,
    turquoise 60%)
  left  ;
  background-size: 10em 400px;
}
<form>
<label><input type="text" required placeholder="show me colors"/></label>
</form>
另一个仍在使用图像背景和渐变的示例:http://codepen.io/gc-nomade/pen/WwgzVv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2020-11-11
    • 2018-01-24
    • 1970-01-01
    相关资源
    最近更新 更多