HTML と CSS のみを使用して、かなりクールなプレースホルダー UIを再作成しようとしていますが、ほとんどできています ( demo )。ただし、入力フィールドに何かを入力してタブで次のフィールドにフォーカスすると、値を入力したフィールドが Safari (6.0.5) と MobileSafari (iOS 6.1) で少しオフセットされます。Chrome(30)で正常に動作します。
再現するには:
- 「価格」入力フィールドに注目してください
- 値を入力してください
- 次の入力フィールドにフォーカスするタブ
- フォームが自分自身を食べる間、見て驚かせてください
問題は、何が原因で、どうすれば修正できるのかということです。
注: 私はこれを MobileSafari で動作させることだけに関心があります。それ以上のものはおまけです。
HTML
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<input name="title" type="text" placeholder="Title">
<input name="price" type="text" placeholder="Price">
<input name="location" type="text" placeholder="Specific location (optional)">
<textarea name="desc" rows='4' placeholder="Description"></textarea>
</body>
</html>
CSS
* {
box-sizing: border-box;
}
body {
padding: 0;
margin: 0;
font-size: 0;
}
input, textarea {
position: relative;
display: inline-block;
margin: 0;
outline: none;
border: 0;
border-radius: 0;
padding: 2pt 4pt;
padding-top: 8pt;
font-family: "Helvetica Neue";
font-size: 14pt;
font-weight: lighter;
}
::-webkit-input-placeholder {
color: lightgrey;
position: relative;
top: 0;
left: 0;
-webkit-transition-property: top, color;
-webkit-transition-duration: .1s;
transition-property: top, color;
transition-duration: .1s;
}
::-webkit-input-placeholder[style*=hidden] {
color: rgb(16,124,246);
font-size: 8pt;
font-weight: normal;
top: -8pt;
opacity: 1;
visibility: visible !important;
}
[name=title] {
width: 100%;
border-bottom: 1px solid lightgrey;
margin-bottom: 1px;
}
[name=price] {
width: 30%;
margin-bottom: 1px;
border-bottom: 1px solid lightgrey;
border-right: 1px solid lightgrey;
}
[name=location] {
width: 70%;
border-bottom: 1px solid lightgrey;
}
[name=desc] {
width: 100%;
}