¿Es posible elipse de marcadores de posición/marcas de agua en HTML5?

5 minutos de lectura

avatar de usuario de unj2
unj2

Agregué estos css. Pero no puedo hacer que los marcadores de posición/marcas de agua tengan puntos suspensivos. Sin embargo, tienen la fuente roja.

input::-webkit-input-placeholder {
    color:    red !important;
    max-width:  95% !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
    overflow: hidden !important;
}

input:-moz-placeholder {
    color:    red !important;
    max-width:  95% !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
    overflow: hidden !important;
}

Como estoy trabajando para dispositivos móviles, quiero que funcione en Safari.

  • Tu CSS me funciona en Chrome/Firefox (Windows). No funciona en Safari. jsfiddle.net/thirtydot/Gx5nX

    – treinta puntos

    11 mayo 2012 a las 18:17


  • Depende de la versión de Safari, lamentablemente… creo que placeholder el estilo no es totalmente compatible por ahora…

    – ChristopheCVB

    11 mayo 2012 a las 23:57

  • Como dijo @ChristopheCVB, depende de la versión. Debido a esto, puede tener texto y clase predeterminados, y usar JS para eliminar el texto y la clase cuando el usuario ingresa algo.

    – hombre de los alces

    28 de diciembre de 2012 a las 20:36

  • ¿Por qué no logras esto en JavaScript? Sí, más desordenado pero definitivamente para navegadores cruzados.

    usuario752723

    29 de diciembre de 2012 a las 6:33

Avatar de usuario de Manjunath Hadimani
Manjunath Hadimani

Utilizando el :placeholder-shown selector funciona bien y garantizará que ninguna entrada de texto se oculte. La compatibilidad también es bastante sólida..

input:placeholder-shown {
  text-overflow: ellipsis;
}
<input placeholder="A Long Placeholder to demonstrate"></input>

  • Bienvenido a Stack Overflow. Los fragmentos deben usarse cuando su ejecución demuestra algo, esto no tiene ningún código HTML de ejemplo para trabajar. Las respuestas de solo código casi siempre se pueden mejorar agregando una explicación. Las respuestas a preguntas anteriores con respuestas existentes deben explicar qué nuevo aspecto de la pregunta abordan.

    -Jason Aller

    12 mayo 2020 a las 23:44

  • @JasonAller Si lee detenidamente, en realidad es una nueva sugerencia y la única que realmente funciona para mi caso de uso.

    –Kevin Beal

    20 de agosto de 2020 a las 21:46

  • Esta es la única respuesta que encontré que funciona en Chrome 91. La respuesta superior actual no establece puntos suspensivos de desbordamiento para ninguno de los ejemplos de código.

    – explosión

    6 de junio de 2021 a las 16:54

Avatar de usuario de DreamTeK
DreamTeK


Método 1

Todavía es compatible con todos los navegadores.

Los puntos suspensivos de desbordamiento de un marcador de posición se pueden lograr usando el selector de atributo:

[placeholder]{
    text-overflow:ellipsis;
}

Esto también habrá agregado el efecto secundario de agregar puntos suspensivos al valor de entrada en algunos navegadores. Esto puede o no ser deseado.

[placeholder]{
    text-overflow:ellipsis;
}

input{width:150px;}
<input placeholder="A long placeholder to demonstrate"></input>
<input value="A long value to demonstrate"></input>

Método 2

Ya no es compatible.

A partir de Chrome y Edge V100+, el ::placeholder selector de pseudo elementos no soporta la propiedad de desbordamiento de texto.

::placeholder{
    text-overflow:ellipsis;
}
::placeholder{
    text-overflow:ellipsis;
}

input{width:150px;}
<input placeholder="A long placeholder to demonstrate"></input>

¿POR QUÉ?

Parece un ajuste de la conformación a la especificación:

Solo el subconjunto de propiedades CSS que se aplican al ::first-line el pseudo-elemento se puede usar en una regla usando ::placeholder en su selector.

  • Todas las propiedades relacionadas con la fuente: font, font-kerning, font-style, font-variant, font-variant-numeric, font-variant-position, font-variant-east-asian, font-variant-caps, font-variant-alternates, font-variant-ligatures, font-synthesis, font-feature-settings, font-language-override, font-weight, font-size, font-size-adjust, font-stretchy font-family.
  • Todas las propiedades relacionadas con el fondo: background-color, background-clip, background-image, background-origin, background-position, background-repeat, background-size, background-attachmenty background-blend-mode.
  • El color propiedad
  • word-spacing, letter-spacing, text-decoration, text-transformy line-height.
  • text-shadow, text-decoration, text-decoration-color, text-decoration-line, text-decoration-styley vertical-align.

NAVEGADORES ANTIGUOS

  • ¿Necesita soporte para navegadores más antiguos?
  • ¿Es decir, no está jugando bien?

Creé un pequeño truco CSS para simular un marcador de posición. Utilice este código para simular el marcador de posición de sus entradas. Está un poco sucio pero puede ofrecer soporte desde IE6.

.ellipsis{
  box-sizing:border-box;
  position:relative;
  padding:0 5px;
  background:#fff;
  color:rgba(0,0,0,0.5);
  width:100%;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.ellipsis input{
  box-sizing:border-box;
  position:absolute;
  top:0;
  left:0;
  height:100%;
  width:100%;
  display:block;
  background:none;
  border:1px solid #ddd;
  color:#000;
  padding:0 5px;
}
.ellipsis input:focus{
  background:#fff;
}
<div class="ellipsis">
  A Long Placeholder to demonstrate A Long Placeholder to demonstrate A Long Placeholder to demonstrate
  <input></input>
</div>

El soporte fuera de este rango requeriría javascript.

  • Esto no funciona en IE. ¿Hay otros estilos que configurar para que esto funcione en IE para mostrar puntos suspensivos para el marcador de posición?

    -Ashok Gurram

    6 de marzo de 2017 a las 6:53

  • @AshokGurram ¿Has probado los prefijos adicionales agregados a mi respuesta?

    – DreamTeK

    6 de marzo de 2017 a las 8:49

  • Lo he probado sobre todo con los prefijos. Ninguno de ellos trabajó en ie.

    -Ashok Gurram

    6 de marzo de 2017 a las 9:28

  • @AshokGurram Disculpas por eso. Los puntos suspensivos no son compatibles con entradas en versiones anteriores de IE. Necesitará un pequeño truco o javascript para que funcione. Odio dejar que IE me gane, así que hice el código que agregué a mi respuesta. Espero que ayude.

    – DreamTeK

    6 de marzo de 2017 a las 13:03

  • Cuidado con [placeholder] está formateando la entrada en sí, no el marcador de posición. ¡Corrige tu respuesta! jsfiddle.net/uW2cU/98

    – HandTriX

    31 de enero de 2018 a las 13:33


Para cubrir tantos navegadores como sea posible, pruebe estos:

[placeholder]{
    text-overflow:ellipsis;
}
::-webkit-input-placeholder { /* Chrome/Opera/Safari */
    text-overflow:ellipsis;
}
::-moz-placeholder { /* Firefox 19+ */
    text-overflow:ellipsis;
}
:-ms-input-placeholder { /* IE 10+ */
    text-overflow:ellipsis;
}
:-moz-placeholder { /* Firefox 18- */
    text-overflow:ellipsis;
}

  • ¡Agregue! Importante en Chrome porque, de forma predeterminada, el marcador de posición tiene texto desbordado: clip;

    Introducir texto…

    – Srdjan Dejanovic

    7 de junio de 2018 a las 11:42

De acuerdo con la especificación, text-overflow se aplica solo a contenedores de bloque como división y pag etiquetas Y dado que las entradas no son contenedores, no puede aplicar esta regla CSS.

Justo input { text-overflow: ellipsis; } sin ningún marcador de posición, los pseudos hicieron el truco.

  • Esta debería ser la respuesta correcta en 2022.

    –Marcio Duarte

    26 de abril de 2022 a las 23:14

  • esto nunca funcionará para el desbordamiento de marcador de posición.

    – desarrollador frustrado

    18 de julio de 2022 a las 3:59

  • Esta debería ser la respuesta correcta en 2022.

    –Marcio Duarte

    26 de abril de 2022 a las 23:14

  • esto nunca funcionará para el desbordamiento de marcador de posición.

    – desarrollador frustrado

    18 de julio de 2022 a las 3:59

¿Ha sido útil esta solución?