13

HTML と CSS のみを使用して、かなりクールなプレースホルダー UIを再作成しようとしていますが、ほとんどできています ( demo )。ただし、入力フィールドに何かを入力してタブで次のフィールドにフォーカスすると、値を入力したフィールドが Safari (6.0.5) と MobileSafari (iOS 6.1) で少しオフセットされます。Chrome(30)で正常に動作します。

再現するには:

  1. 「価格」入力フィールドに注目してください
  2. 値を入力してください
  3. 次の入力フィールドにフォーカスするタブ
  4. フォームが自分自身を食べる間、見て驚かせてください

問題は、何が原因で、どうすれば修正できるのかということです。

注: 私はこれを 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%;
}
4

3 に答える 3

3

Twitter で返信しましたが、ここにもリンクを投稿します。これは、input + placeholder ではなく、input + label で実行できます。http://codepen.io/jordanoaragao/pen/teqFw

ここに実装されています: http://womensenterprisecenter.com/

于 2013-10-11T19:58:32.013 に答える
3

これを input および textarea 要素に追加すると、問題が解決します。

float: left;

Safari バージョン 6.0.5 (8536.30.1) および Mobile Safari でテスト済み

于 2013-10-11T20:32:17.993 に答える
0

placeholder-attribute をアニメーション化できないようです。だから私は小さな偽のプレースホルダーを作り、これをアニメーション化しました. 残念ながら、CSS のみを使用すると、入力を残すとアニメーションがオフになります。そこで、アニメーションをトリガーするために、JS マジックを少し追加しました。

于 2013-10-12T13:54:53.820 に答える