Questo viene fatto automaticamente per tutti i browser eccetto Chrome .
Immagino di dover scegliere come target Chrome in modo specifico .
Eventuali soluzioni?
Se non con CSS , allora con jQuery ?
Cordiali saluti.
Questo viene fatto automaticamente per tutti i browser eccetto Chrome .
Immagino di dover scegliere come target Chrome in modo specifico .
Eventuali soluzioni?
Se non con CSS , allora con jQuery ?
Cordiali saluti.
Risposte:
<input
type="text"
placeholder="enter your text"
onfocus="this.placeholder = ''"
onblur="this.placeholder = 'enter your text'" />
Modifica: tutti i browser ora supportano
input:focus::placeholder {
color: transparent;
}
<input type="text" placeholder="Type something here!">
Firefox 15 e IE 10+ ora supportano anche questo. Per espandere la soluzione CSS di Casey Chu :
input:focus::-webkit-input-placeholder { color:transparent; }
input:focus:-moz-placeholder { color:transparent; } /* FF 4-18 */
input:focus::-moz-placeholder { color:transparent; } /* FF 19+ */
input:focus:-ms-input-placeholder { color:transparent; } /* IE 10+ */
Basandosi sulle risposte di @Hexodus e @Casey Chu, ecco una soluzione aggiornata e cross-browser che sfrutta l'opacità CSS e le transizioni per sfumare il testo segnaposto. Funziona per qualsiasi elemento che può utilizzare segnaposto, inclusi textarea
e input
tag.
::-webkit-input-placeholder { opacity: 1; -webkit-transition: opacity .5s; transition: opacity .5s; } /* Chrome <=56, Safari < 10 */
:-moz-placeholder { opacity: 1; -moz-transition: opacity .5s; transition: opacity .5s; } /* FF 4-18 */
::-moz-placeholder { opacity: 1; -moz-transition: opacity .5s; transition: opacity .5s; } /* FF 19-51 */
:-ms-input-placeholder { opacity: 1; -ms-transition: opacity .5s; transition: opacity .5s; } /* IE 10+ */
::placeholder { opacity: 1; transition: opacity .5s; } /* Modern Browsers */
*:focus::-webkit-input-placeholder { opacity: 0; } /* Chrome <=56, Safari < 10 */
*:focus:-moz-placeholder { opacity: 0; } /* FF 4-18 */
*:focus::-moz-placeholder { opacity: 0; } /* FF 19-50 */
*:focus:-ms-input-placeholder { opacity: 0; } /* IE 10+ */
*:focus::placeholder { opacity: 0; } /* Modern Browsers */
<div>
<div><label for="a">Input:</label></div>
<input id="a" type="text" placeholder="CSS native fade out this placeholder text on click/focus" size="60">
</div>
<br>
<div>
<div><label for="b">Textarea:</label></div>
<textarea id="b" placeholder="CSS native fade out this placeholder text on click/focus" rows="3"></textarea>
</div>
hai provato segnaposto attr?
<input id ="myID" type="text" placeholder="enter your text " />
-MODIFICARE-
Capisco, prova questo allora:
$(function () {
$('#myId').data('holder', $('#myId').attr('placeholder'));
$('#myId').focusin(function () {
$(this).attr('placeholder', '');
});
$('#myId').focusout(function () {
$(this).attr('placeholder', $(this).data('holder'));
});
});
Test: http://jsfiddle.net/mPLFf/4/
-MODIFICARE-
In realtà, poiché il segnaposto dovrebbe essere utilizzato per descrivere il valore, non il nome dell'input. Suggerisco la seguente alternativa
html:
<label class="overlabel">
<span>First Name</span>
<input name="first_name" type="text" />
</label>
javascript:
$('.overlabel').each(function () {
var $this = $(this);
var field = $this.find('[type=text], [type=file], [type=email], [type=password], textarea');
var span = $(this).find('> span');
var onBlur = function () {
if ($.trim(field.val()) == '') {
field.val('');
span.fadeIn(100);
} else {
span.fadeTo(100, 0);
}
};
field.focus(function () {
span.fadeOut(100);
}).blur(onBlur);
onBlur();
});
css:
.overlabel {
border: 0.1em solid;
color: #aaa;
position: relative;
display: inline-block;
vertical-align: middle;
min-height: 2.2em;
}
.overlabel span {
position: absolute;
left: 0;
top: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.overlabel span, .overlabel input {
text-align: left;
font-size: 1em;
line-height: 2em;
padding: 0 0.5em;
margin: 0;
background: transparent;
-webkit-appearance: none; /* prevent ios styling */
border-width: 0;
width: 100%;
outline: 0;
}
Test:
Per aumentare la risposta di @ casey-chu e pirata rob, ecco un modo più compatibile con più browser:
/* WebKit browsers */
input:focus::-webkit-input-placeholder { color:transparent; }
/* Mozilla Firefox 4 to 18 */
input:focus:-moz-placeholder { color:transparent; }
/* Mozilla Firefox 19+ */
input:focus::-moz-placeholder { color:transparent; }
/* Internet Explorer 10+ */
input:focus:-ms-input-placeholder { color:transparent; }
opacity:0;
)! L'unica soluzione CSS in questo thread con tutti i possibili supporti per browser!
La risposta di Toni è buona, ma preferirei abbandonare ID
e utilizzare esplicitamente input
, in questo modo tutti gli input placeholder
ottengono il comportamento:
<input type="text" placeholder="your text" />
Nota che $(function(){ });
è l'abbreviazione per $(document).ready(function(){ });
:
$(function(){
$('input').data('holder',$('input').attr('placeholder'));
$('input').focusin(function(){
$(this).attr('placeholder','');
});
$('input').focusout(function(){
$(this).attr('placeholder',$(this).data('holder'));
});
})
Mi piace impacchettarlo nello spazio dei nomi ed eseguire su elementi con l'attributo "segnaposto" ...
$("[placeholder]").togglePlaceholder();
$.fn.togglePlaceholder = function() {
return this.each(function() {
$(this)
.data("holder", $(this).attr("placeholder"))
.focusin(function(){
$(this).attr('placeholder','');
})
.focusout(function(){
$(this).attr('placeholder',$(this).data('holder'));
});
});
};
A volte hai bisogno di SPECIFICITÀ per assicurarti che i tuoi stili vengano applicati con il fattore più forte id
Grazie a @Rob Fletcher per la sua ottima risposta, nella nostra azienda abbiamo
Quindi, considera l'aggiunta di stili con prefisso con l'id del contenitore dell'app
#app input:focus::-webkit-input-placeholder, #app textarea:focus::-webkit-input-placeholder {
color: #FFFFFF;
}
#app input:focus:-moz-placeholder, #app textarea:focus:-moz-placeholder {
color: #FFFFFF;
}
Con Pure CSS ha funzionato per me. Renderlo trasparente quando inserito / Focues in input
input:focus::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: transparent !important;
}
input:focus::-moz-placeholder { /* Firefox 19+ */
color: transparent !important;
}
input:focus:-ms-input-placeholder { /* IE 10+ */
color: transparent !important;
}
input:focus:-moz-placeholder { /* Firefox 18- */
color: transparent !important;
}
Per perfezionare ulteriormente l' esempio di codice di Wallace Sidhrée :
$(function()
{
$('input').focusin(function()
{
input = $(this);
input.data('place-holder-text', input.attr('placeholder'))
input.attr('placeholder', '');
});
$('input').focusout(function()
{
input = $(this);
input.attr('placeholder', input.data('place-holder-text'));
});
})
Ciò garantisce che ogni input memorizzi il testo segnaposto corretto nell'attributo data.
Guarda un esempio funzionante qui in jsFiddle .
Mi piace l'approccio CSS condito con le transizioni. Su Focus il segnaposto si dissolve;) Funziona anche per le aree di testo.
Grazie @Casey Chu per l'ottima idea.
textarea::-webkit-input-placeholder, input::-webkit-input-placeholder {
color: #fff;
opacity: 0.4;
transition: opacity 0.5s;
-webkit-transition: opacity 0.5s;
}
textarea:focus::-webkit-input-placeholder, input:focus::-webkit-input-placeholder {
opacity: 0;
}
Utilizzando SCSS insieme a http://bourbon.io/ , questa soluzione è semplice, elegante e funziona su tutti i browser web:
input:focus {
@include placeholder() {
color: transparent;
}
}
Usa Bourbon! È buono per te !
Questo pezzo di CSS ha funzionato per me:
input:focus::-webkit-input-placeholder {
color:transparent;
}
Per una soluzione basata su CSS puro:
input:focus::-webkit-input-placeholder {color:transparent;}
input:focus::-moz-placeholder {color:transparent;}
input:-moz-placeholder {color:transparent;}
Nota: non ancora supportato da tutti i fornitori di browser.
Riferimento: Nascondi il testo segnaposto in primo piano con CSS di Ilia Raiskin.
2018> SOLUZIONE JQUERY v.3.3: Funziona a livello globale per tutti gli input, area di testo con segnaposto.
$(function(){
$('input, textarea').on('focus', function(){
if($(this).attr('placeholder')){
window.oldph = $(this).attr('placeholder');
$(this).attr('placeholder', ' ');
};
});
$('input, textarea').on('blur', function(){
if($(this).attr('placeholder')){
$(this).attr('placeholder', window.oldph);
};
});
});
La demo è qui: jsfiddle
Prova questo :
//auto-hide-placeholder-text-upon-focus
if(!$.browser.webkit){
$("input").each(
function(){
$(this).data('holder',$(this).attr('placeholder'));
$(this).focusin(function(){
$(this).attr('placeholder','');
});
$(this).focusout(function(){
$(this).attr('placeholder',$(this).data('holder'));
});
});
}
Oltre a tutto quanto sopra, ho due idee.
Puoi aggiungere un elemento che imita il detentore del posto, quindi usando javascript controlla l'elemento che mostra e nasconde.
Ma è così complesso, l'altro sta usando il selettore di css del fratello. Proprio così:
.placeholder { position: absolute; font-size: 14px; left: 40px; top: 11px; line-height: 1; pointer-events: none; }
.send-message input:focus + .placeholder { display: none; }
23333, ho un inglese scarso. Spero di risolvere il tuo problema.
prova questa funzione:
+ Nasconde il segnaposto in primo piano e lo restituisce in caso di sfocatura
+ Questa funzione dipende dal selettore segnaposto, prima seleziona gli elementi con l'attributo segnaposto, attiva una funzione sulla messa a fuoco e un'altra sulla sfocatura.
in primo piano: aggiunge un attributo "data-text" all'elemento che ottiene il suo valore dall'attributo segnaposto, quindi rimuove il valore dell'attributo segnaposto.
on blur: restituisce il valore del segnaposto e lo rimuove dall'attributo data-text
<input type="text" placeholder="Username" />
$('[placeholder]').focus(function() {
$(this).attr('data-text', $(this).attr('placeholder'));
$(this).attr('placeholder', '');
}).blur(function() {
$(this).attr('placeholder', $(this).attr('data-text'));
$(this).attr('data-text', '');
});
});
puoi seguirmi molto bene se guardi cosa sta succedendo dietro le quinte ispezionando l'elemento di input
La stessa cosa che ho applicato nell'angolo 5.
ho creato una nuova stringa per memorizzare il segnaposto
newPlaceholder:string;
quindi ho usato le funzioni di messa a fuoco e sfocatura sulla casella di input (sto usando il completamento automatico di prime ng).
Il segnaposto sopra viene impostato dal dattiloscritto
Sto usando due funzioni:
/* Event fired on focus to textbox*/
Focus(data) {
this.newPlaceholder = data.target.placeholder;
this.placeholder = '';
}
/* Event fired on mouse out*/
Blur(data) {
this.placeholder = this.newPlaceholder;
}
Non è necessario utilizzare CSS o JQuery. Puoi farlo direttamente dal tag di input HTML.
Ad esempio , nella casella di posta elettronica sottostante, il testo segnaposto scomparirà dopo aver fatto clic all'interno e il testo verrà visualizzato di nuovo se si fa clic all'esterno.
<input type="email" placeholder="Type your email here..." onfocus="this.placeholder=''" onblur="this.placeholder='Type your email here...'">
/* Webkit */
[placeholder]:focus::-webkit-input-placeholder { opacity: 0; }
/* Firefox < 19 */
[placeholder]:focus:-moz-placeholder { opacity: 0; }
/* Firefox > 19 */
[placeholder]:focus::-moz-placeholder { opacity: 0; }
/* Internet Explorer 10 */
[placeholder]:focus:-ms-input-placeholder { opacity: 0; }