Supprimer 3 pixels dans iOS / WebKit textarea

j'essaie de créer un textarea qui ressemble exactement à un div .

cependant, sur iOS il y a 3 pixels venant de quelque part que je ne peux pas enlever.

Voici mon code:

<!doctype html>
<title>Textarea test</title>
<style>
textarea, div
{
  background: yellow;
  font: 13px arial;
  border: 0;
  padding: 0;
  border-radius: 0;
  margin: 0;

  -webkit-appearance: none;
}
</style>
<div>test</div>
<hr>
<textarea>test</textarea>

c'est rendu ainsi (j'ai zoomé):

3 extra pixels

comme le montre la capture d'écran, il y a 3 pixels avant le texte dont je veux me débarrasser. Autant comme je le vois, ce n'est pas la marge, le rembourrage ou la bordure.

cela se produit sur mon iPhone et iPad, les deux fonctionnant iOS 4.3. Et pour être clair, ces 3 pixels supplémentaires n'apparaissent pas sur Safari/Firefox/Chrome sur mon bureau. Ou de mon frère, Windows Phone, pour que la matière.

EDIT 2011-08-10:

Je viens de le tester sur un <input type=text> et la même chose de" rembourrage " apparaît, sauf que c'est 1 pixel au lieu de 3.

21
demandé sur Tom Lokhorst 2011-07-31 18:53:24

6 réponses

OK... Désolé... Ici nous allons... La réponse officielle officieuse est...

vous ne pouvez pas vous en débarrasser.

apparemment c'est un" bug " avec safari mobile sur les entrées. Voir:

vous pouvez, toutefois, en connaissant le tiret faire ceci

textarea {
  text-indent:-3px;
}

ce n'est pas une jolie solution, mais elle fait ce dont vous avez besoin.

Modifier J'ai oublié de le mentionner, testé avec le simulateur iOS. Vous pouvez essayer sur votre téléphone lui-même.

un autre point: cela suppose également que vous servez css uniquement pour le safari mobile, spécifiquement pour l'iPhone. Une façon plus ancienne de faire ceci est:

/* Main CSS here */

/* iPhone CSS */
@media screen and (max-device-width: 480px){
  /* iPhone only CSS here */
  textarea {
    text-indent: -3px;
  }
}

Éditer À Nouveau Je suis beaucoup trop amuser avec cela... Vous pouvez également utiliser des feuilles de style séparées avec ces déclarations:

<link rel="stylesheet" media="all and (max-device-width: 480px)" href="iphone.css"> 
<link rel="stylesheet" media="all and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:portrait)" href="ipad-portrait.css"> 
<link rel="stylesheet" media="all and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:landscape)" href="ipad-landscape.css"> 
<link rel="stylesheet" media="all and (min-device-width: 1025px)" href="ipad-landscape.css"> 

Modifier Car, apparemment, quelqu'un a acheté un Android ;)

<script type="text/javascript">
if (navigator.userAgent.indexOf('iPhone') != -1) {
  document.write('<link rel="stylesheet" href="iphone.css" type="text/css" />');
} else if (navigator.userAgent.indexOf('Android') != -1) {
  document.write('<link rel="stylesheet" href="android.css" type="text/css" />');
} else {
  document.write('<link rel="stylesheet" href="desktop.css" type="text/css" />');
}
</script>

personnellement, je n'ai pas vraiment de problème avec les entrées de texte ayant une certaine indentation interne. Il l'efface du bord de la zone et le rend plus lisible. Toutefois, je crois qu'un le navigateur devrait prendre en charge la spécification. Donc voici une mise à jour pour différencier entre android et iPhone. Amusez-vous!

12
répondu stslavik 2017-05-23 12:26:15

Voici une solution JavaScript rapide (basée sur l'approche de stslavik) qui sauve quelques lignes de code et des tests pour iPad et iPod ainsi.

si vous utilisez jQuery:

if(/iPhone|iPad|iPod/i.test(navigator.userAgent)){
  $('textarea').css('text-indent', '-3px');
}

si vous voulez utiliser la norme JS:

if(/iPhone|iPad|iPod/i.test(navigator.userAgent)){
  textareas = document.getElementsByTagName('textarea');
  for(i = 0; i < textareas.length; i++){
    textareas[i].style['text-indent'] = '-3px';
  }
}
4
répondu saschoar 2014-03-18 15:47:25

Un travail est d'utiliser un div que vous définissez comme modifiable.

HTML

<div class="editable" contenteditable="true">
    Editable text...
</div>

Javascript:

<div onClick="this.contentEditable='true';">
    This is a test
</div>

jQuery

 $(this).prop('contentEditable',true);
1
répondu Brian Wilkinson 2015-09-16 02:12:11

text-intend ne fonctionne pas quand il y a plusieurs lignes, (comme Jonathan l'a mentionné dans un commentaire à la réponse acceptée).

donc, cela a fonctionné pour moi sur iPhone 6:

textarea {
    margin-left: -3px;
    &::placeholder {
        padding-left: 3px;
    }
}
0
répondu Betty St 2017-05-05 10:59:46

ne peut pas le tester maintenant, mais essayez

float: left;

et / ou

border-width: 0;

et / ou

padding: -3px;

MODIFIER - un autre essai:

-webkit-padding-start: 0px;
-webkit-margin-start: 0px;
text-indent: 0px;
border-spacing: 0px;
-webkit-border-horizontal-spacing: 0px;
outline-offset: 0px;

Pour une référence, y compris les informations de compatibilité de voir http://developer.apple.com/library/safari/#documentation/appleapplications/reference/SafariCSSRef/Introduction.html#//apple_ref/doc/uid/TP30001267-SW1

-1
répondu Yahia 2011-08-11 14:08:24

, d'un pur css solution qui s'appuie sur ceux déjà mentionnés. Cependant, le text-indent ne fait que trop pour moi, car le placeholder n'est pas affecté. Si vous ajoutez une ligne supplémentaire, cela aide à réinitialiser le tiret supplémentaire pour les périphériques iOS. Devra probablement faire une autre magie pour permettre d'autres dispositifs tactiles de largeurs au-dessus de 480px cependant.

@media only screen and (max-device-width: 480px) {
   textarea {text-indent: -3px;}
   textarea::-webkit-input-placeholder { text-indent: 0px; }
}
-1
répondu Isaac Minogue 2015-07-24 02:43:48