placeholderの文字列を、ユーザ入力中も表示し続けることは可能でしょうか?
解決済
回答 8
投稿
- 評価 -8
- クリップ 1
- VIEW 247
たとえば以下のようなinputタグがあるとします。
<input type="number" name="ball" placeholder="個">
このとき、placeholderで指定した「個」という文字は、ユーザ入力前には薄いグレー色等で表示されていますよね(一般的なブラウザの場合)。
これはユーザが何か入力をすると消えてしまうわけですが、「個」を表示し続ける方法はないでしょうか?
例示したケースの場合、たとえば数字の1を入力しても「1個」と表示されるようにしたいのです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
- メールアドレスの認証
メールアドレスの認証
- 質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+7
placeholderは「個数を入力してください」などの
ヒントを示してユーザーの操作を補助する目的で使用されるため
質問にあるように「個」だけ表示させるのはUI/UXの観点から問題があります。
無理やり実装することはできますがコード量が無駄に多くなってしまうので
<input type="number" name="ball"> 個
のように
シンプルな記述のほうが良いです。
ほとんどのWebサイトではこのようになっていますし
ユーザーは経験上、こちらのほうがわかりやすいです。
投稿
score 1655
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+4
そもそもplaceholderは使えないので、どうしてもそうしなきゃいけないのであればMaterializeのText Inputsのようにフォーカスでラベルを外に逃がすような作りにするとかですね。
どんな事情か知らないですけど、入力に被るのが使いやすいと思う人はなかなかいないと思います。
むしろ「そうしなきゃいけなくなった」レイアウトを見直したほうが利用者には優しい作りになるのではないでしょうか。
そもそも「個」という単位一文字すらスペース確保できないってモバイルUIとして本当に使いやすいの?という疑問はこの質問をみた人の多くが感じるところと思います。
組み方次第でスペースが作り出せるなら組み方を見直してみては。
イレギュラーな対応をしてまで、労力をかけてまで実現して得られる効果がどれほどかは熟考が必要でしょう。
数十日かどうか知らないですが、考える方向性次第では何百時間が無駄になることはよくあります。
自身では多角的に考えたつもりかもしれませんが、そのうえでこの結論だったとすると、「もっと他にあるのでは」と感じるのはある程度経験がある回答者としては自然です。
type=numberの時点で数字しか入力できないわけですし、日付とか電話番号とか入力フォーマットを指定しない単なるラベルなのであれば項目名だけあれば充分のようにも思います。
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+3
タグには JavaScript とありましたが、 CSS だけでも可能です。
placeholder
は input
にフォーカスしたり入力値がある場合は、非表示になります。ですので、フォーカス時と入力値があるときに「個」の表示を右にずらせば希望通りのことができるかと思います。
<span>
<input type="number" name="ball" id="amount" placeholder=" ">
<label for="ball"></label>
</span>
span {
position: relative;
}
label::before {
content: '個';
position: absolute;
opacity: .3;
left: 0;
right: initial;
}
input:focus + label::before {
right: 1.5em;
left: initial;
}
input:not(:placeholder-shown) + label::before {
right: 1.5em;
left: initial;
}
追記: 上記サンプルは、 Internet Explorer と Microsoft Edge では動作しないので、 JavaScript でクラスを付け外ししたほうが実用的だと思います。
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+3
少々トリッキーなやり方として、
- 枠のない
<input>
(こちらが実際に入力フォームとなります)と、その外側に<div>
(見た目上はこちらが枠を表示する)を用意する <input>
の外側、<div>
の内側に「個」を書いておく
このようにすれば、見た目上は枠内に「個」が出ているように見えますし、この「個」がデータとして混ざることはありません。。
投稿
- ユーザーランキング総合1位
- ユーザーランキング月間2位
- Ruby総合1位
- Ruby on Rails総合1位
- React.js総合1位
- TypeScript総合1位
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
inputの後ろにspanでも書いて、ネガティブマージンで上に重ねる。
inputには margin-rightでも設定しておけばいいんでないの?
投稿
score 17806
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
placeholder属性
コントロールが値を持たない場合、placeholder属性は、データ入力を伴うユーザーの支援を意図する短いヒント(単語や短いフレーズ)を表す。ヒントは、サンプル値または期待された形式の簡単な説明かもしれない。指定される場合、属性は、U+000A LINE FEED(LF)またはU+000D CARRIAGE RETURN(CR)文字を含まない値を持たなければならない。
placeholder属性は、labelの代替として使用すべきでない。ヒントや他の助言テキストについては、title属性がより適切である。
Note: このメカニズムは非常に似ているが微妙に異なる:コントロールのlabelによって与えられるヒントは毎回表示され、placeholder属性に与えられた短いヒントはユーザーが値を入力する前にのみ表示され、ユーザーが詳細なヘルプを要求する際にtitle属性におけるヒントは表示される。
WCAG 2.0
Webページのアクセシビリティを満たす基準に、WCAG というものがあり、この基準に適合する場合の実装を書きます。
Web Content Accessibility Guidelines (WCAG) 2.0 は、ウェブコンテンツをよりアクセシブルにするための広範囲に及ぶ推奨事項を網羅している。 このガイドラインに従うことで、全盲又はロービジョン、ろう又は難聴、学習障害、認知障害、運動制限、発話困難、光過敏性発作及びこれらの組合せ等を含んだ、様々な障害のある人に対して、コンテンツをアクセシブルにすることができる。又、このガイドラインに従うと、多くの場合、ほとんどの利用者にとってウェブコンテンツがより使いやすくなる。
3.2.2 入力時: ユーザインタフェース コンポーネント の設定を変更することが、コンテキストの変化を自動的に引き起こさない。ただし、利用者が使用する前にその挙動を知らせてある場合を除く。 (レベル A)
あなたは「テキスト入力時もplaceholderを常時表示する」という非標準機能がある事を、ユーザに事前に知らせなければなりません。
3.2.5 要求による変化: コンテキストの変化は利用者の要求によってだけ生じるか、又は、そのような変化を止めるメカニズムが利用できる。 (レベル AAA)
あなたは「テキスト入力時もplaceholderを常時表示する」という非標準機能を、ユーザが任意で無効化にできるようにしなければなりません。
1.4.6 コントラスト (高度) : テキスト及び文字画像の視覚的提示には、少なくとも 7:1 のコントラスト比がある。ただし、次の場合は除く: (レベル AAA)
あなたは「placeholderテキスト」と「入力テキスト」の両方に 7:1 のコントラスト比を保証しなければなりません。
<input type="text" placeholder="一" value="|">
例えば、上記HTMLでは「placeholder = 一」「入力テキスト = |」であり、重ねてみれば「十」のように見えます。
しかし、あなたは「一」と「|」のそれぞれに 7:1 のコントラスト比を保証し、それぞれ区別して読めるようにしなければなりません。
Re: zico_teratail さん
投稿
score 13741
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
+1
こういう話でしょうか。
サンプル
<input type="number" name="ball" placeholder="個">
<input type="hidden" name="hiddenBall" placeholder="個">
var target = document.querySelector('input[name=ball]');
var hiddenTarget = document.querySelector('input[name=hiddenBall]');
target.addEventListener('blur',function(){
target.placeholder = target.value+'個';
[hiddenTarget.value, target.value] = [target.value, null];
});
投稿
score 9611
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
-2
<input type="text" name="ball" value="個">
これでどうでしょうか?
※注釈
フォームの出力先にも「1個」という文字列を送りたい場合
投稿
score 11
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 90.43%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
mts10806
2019/06/29 13:23
文字が被るのでUX的にどうなんだろう?と疑問にはなりますけど。
単位ならプレースホルダじゃなくラベルで常時表示させたほうが良いと思いますが、どういった経緯でそうしたいのでしょうか
zico_teratail
2019/06/29 13:26
スマホ用画面で他にもinputがいくつかあり、全体のレイアウトやスペースの関係上、ラベルを使うと画面に収まらずはみ出してしまうためです。
mts10806
2019/06/29 13:28
レスポンシブで対応できていれば「はみ出す」ということはないように思います。
ヘルプ文言(入力形式の指定など)をinputの下に表示させるのも良くある話ですし。
zico_teratail
2019/06/29 13:36
bootstrap使ってレスポンシブにしてます。
inputの「見た目の幅」とか、いろいろあるんですよ。
こちらの状況を逐一全部説明できませんが、とにかく出来ないことがあり困って質問してますので。
揚げ足とったりイチャモンつけたりするだけならお互い時間の無駄ですので、この質問を無視して見ないようにしてください。
mts10806
2019/06/29 13:39
「使いにくくならないかな?」という懸念だけなのですが、それを揚げ足ととられてしまうとできるアドバイスはないですね。
技術上可能ではあるけど「使う人の観点から本当にそれでいいのか」を考えてもらいたかっただけです。
mts10806
2019/06/29 13:40
すでにそういう回答もついているようですし、質問者さん側も無視はできませんよ。
zico_teratail
2019/06/29 13:50
「使う人の観点から本当にそれでいいのか」を考えに考えた結果、質問してます。
この質問に至るまでの数十日の思考履歴や背景まで全部書かないと質問しちゃいけないんですか?
もう勘弁してください。
mts10806
2019/06/29 13:54
違う方向にいってしまって残念です。
回答者側から見て「なんでわざわざそんな使いにくくしようとしてるんだろう?」という疑問が出れば背景や経緯は最低限必要と思います。質問するなという意味ではないですが、技術上可能なことと実用に足るかどうかはまた別の話です。
「いいから質問したことに答えればいい」はサポートセンター相手にやってください。
zico_teratail
2019/06/29 14:14
一から十まであなたの価値観に従わないといけないなんて、マジで勘弁してくださいよ。
mts10806
2019/06/29 14:24
なぜそうなるのか全くわかりません。いきなりキレられても困ります。
そもそも他者を頼ることを決めた以上はその他者が疑問に思ったり求める情報を提示するのは当然ではないでしょうか。それを出せないのであれば無料のQAサイトは適切な場所ではないですよということになります。求める情報は出せない、でも答えろって横暴でしかないですよ。
適切な契約を結んで適切な情報を提示して適切な対応をしてもらってください。
もちろん「UI/UX的な観点からどうなの?」というツッコミは必ず入るでしょうけど適切な契約を結んでいる先ならきちんと情報提示してたらやってもらえるでしょうし。
zico_teratail
2019/06/29 16:19
もう勘弁してよホント~。
横暴とか思うのなら関わらなければいいじゃない。
気に入らないならスルーして放っといてくださいよ。
mts10806
2019/06/29 16:22
得たい回答を得られなくてもよろしければ自身の(勝手な)方針を通されたらよろしいかと思います。
既に回答ついてますし私もしていますが代替案以外でませんよ。この内容だと。
zico_teratail
2019/06/29 16:25
ウザ…
mts10806
2019/06/29 16:41 編集
通報しておきますね。暴言が始まりましたし、問題解決に向かう気がないようです。多少なり力になれるかと思ってコメントしてきましたがまさか暴言が出てくるとは。
アドバイス聞く気がない人がなぜ質問をあげるのか疑問ですね。スコアからするとそれなりにやってきた人でしょうに…大変残念です。
質問への低評価も取り消さなくて結構です。あなたのような人の厚意を暴言で返すような人のためにとった時間ではありませんので。
zico_teratail
2019/06/29 16:44
こっちが通報したいくらいですよ。
何度もやめてくれと頼んでるのに繰り返しやってくるのは嫌がらせですよ。
挙句の果てに「暴言」などと言って被害者ぶって言葉狩りですか??? 本当にヤバい思考してますね。
こちらは何度もやめてくれと頼んでるのに、繰り返し嫌がらせで絡んできたのはあなたです。
mts10806
2019/06/29 16:48
質問への追記修正依頼をしていてなぜそうなりますか?理解しかねます。
zico_teratail
2019/06/29 16:52
・「やめてくれ」と言われても同じことを繰り返す
・「それは嫌がらせだ」と指摘されても認めずに居直ってまた行為を続ける
これってまさにストーカーの典型じゃん。
zico_teratail
2019/06/29 16:53
もう一度だけ言いますが、あなたの行為は私にとって嫌がらせに感じますから、もうやめてください。あなたが関わること自体が嫌がらせです。私のことが気に入らないなら無視してください。関わらないでください。
mts10806
2019/06/29 16:55
気に入らないとは思ってもないし書いてもないですよ。
落ち着いてください。冷静さを欠いていては正しい判断ができません。ここは問題解決をする場であって口喧嘩をする場所ではありません。私は端から問題解決にしか興味はありませんので。
zico_teratail
2019/06/29 17:03
とにかく私に関わるのをやめてください。
スルーしてください。
精神的な恐怖を感じています。
私に絡む一切の書き込みをやめてください。
otn
2019/06/29 21:46
>この質問に至るまでの数十日の思考履歴や背景まで全部書かないと質問しちゃいけないんですか?
書かないより書いた方が回答しようと思う人が増えると思います。
経緯を別に書かなくてもいいので、「UX的にこうしない方が良いのは分かっているが、どうしても説明すると長い理由があってこうせざるを得ない」という一文だけでも質問文に書いておけば良かったかと。顧客を説得できずヘンテコな仕様にせざるを得ない状況にある人はめずらしくないと思うので。
質問文だけ見ると「placeholderの意味がわかっていない初心者」に見えますよ。
zico_teratail
2019/06/30 01:50 編集
>otnさん
ええ、それはそうですね。
まあ、どこまで思考や背景を書くのかは難しいというか、ある意味キリがないんで…。
初心者マークをつけてない質問なので、そこで察して欲しい部分はありましたが、ちょっと横着しすぎましたかね。
2019/06/30 08:13
複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。
yasutomi
2019/06/30 10:11
初心者でも初心者マークを付けない人が多いので、それで察しろというのは無理があります。
> 初心者マークをつけてない質問なので、そこで察して欲しい部分はありましたが、ちょっと横着しすぎましたかね。
zico_teratail
2019/06/30 10:18
となると、初心者マークの存在自体が無意味ということになってしまいますね…。私は一応、公式に用意されている機能(?)なので、初心者マークの有り無しによって違う目線で質問を見たり回答をしたりするようにしています。
あと、質問文全体を見れば、なんとな~く、その人が初心者かどうかって、分かるじゃないですか。ま、「だからおめーの質問は初心者に見えるんだよ!」って言われるのがオチでしょうけどもw
yasutomi
2019/06/30 10:20
私から見たらzico_teratailさんは初心者に見えました。
> 質問文全体を見れば、なんとな~く、その人が初心者かどうかって、分かるじゃないですか。
zico_teratail
2019/06/30 10:23 編集
予想通りの反応ありがとうございますw 質問の仕方が悪くてすみません。
まっ、相手がどういうレベルなのかを見極められるかどうかも一つの能力ですから、yasutomiさんもどうぞこれからも頑張ってくださいね~(^^)
yasutomi
2019/06/30 10:46
そういう煽るようなコメントをすると
今後回答をもらえなくなるのでやめたほうが良いかと。
zico_teratailさんは評価 -8 という
最低な評価になったのに反省されていないのですね。
> 予想通りの反応ありがとうございますw 質問の仕方が悪くてすみません。
> まっ、相手がどういうレベルなのかを見極められるかどうかも一つの能力ですから、yasutomiさんもどうぞこれからも頑張ってくださいね~(^^)