質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

2回答

289閲覧

テキストボックスのデザインを記事みたいに変更したい

tyosu

総合スコア24

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2022/07/29 09:20

実現したいこと

https://codepen.io/takeradi/pen/mPyYeq
こちらのcodepenのような動きにしたいと考えています

labelの箇所がうまく動いてくれないのが現状です

HTML

1<p class="text-input"> 2 <label class="test" for="input1">Name</label> 3 <input type="text" name="log" placeholder="名前を入力" id="input1" autocomplete="username" value="" size="20" /> 4</p>

css

1.text-input { 2 position: relative; 3 margin-top: 50px; 4} 5#input1 { 6 display: inline-block; 7 width: 500px; 8 height: 40px; 9 box-sizing: border-box; 10 outline: none; 11 border: 1px solid lightgray; 12 border-radius: 3px; 13 padding: 10px 10px 10px 100px; 14 transition: all 0.1s ease-out; 15} 16 17#input1 + .test { 18 position: absolute; 19 top: 0; 20 left: 0; 21 bottom: 0; 22 height: 40px; 23 line-height: 40px; 24 color: white; 25 border-radius: 3px 0 0 3px; 26 padding: 0 20px; 27 background: #E03616; 28 transform: translateZ(0) translateX(0); 29 transition: all 0.3s ease-in; 30 transition-delay: 0.2s; 31} 32 33#input1:focus + .test { 34 transform: translateY(-120%) translateX(0%); 35 border-radius: 3px; 36 transition: all 0.1s ease-out; 37}

やったこと

検証ツールで下記のcssのコードが機能してなさそうなのが原因だと思いました。
しかしどうやっても動かない状況です

codepenのように
.test→labelに変更しても動かないです

css

1#input1 + .test { 2 position: absolute; 3 top: 0; 4 left: 0; 5 bottom: 0; 6 height: 40px; 7 line-height: 40px; 8 color: white; 9 border-radius: 3px 0 0 3px; 10 padding: 0 20px; 11 background: #E03616; 12 transform: translateZ(0) translateX(0); 13 transition: all 0.3s ease-in; 14 transition-delay: 0.2s; 15} 16 17#input1:focus + .test { 18 transform: translateY(-120%) translateX(0%); 19 border-radius: 3px; 20 transition: all 0.1s ease-out; 21}

どなたか教えていただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まず、HTMLで、ラベルをテキストボックスの後ろに移動します。
これは、隣接兄弟結合子(+)を使うために必須です。

隣接兄弟結合子 - CSS: カスケーディングスタイルシート | MDN

html

1<p class="text-input"> 2 <input type="text" name="log" placeholder="名前を入力" id="input1" autocomplete="username" value="" size="20" /> 3 <label class="test" for="input1">Name</label> 4</p>

CSSは参考先と同じにすればOK

css

1.text-input { 2 position: relative; 3 margin-top: 50px; 4} 5#input1 { 6 display: inline-block; 7 width: 500px; 8 height: 40px; 9 box-sizing: border-box; 10 outline: none; 11 border: 1px solid lightgray; 12 border-radius: 3px; 13 padding: 10px 10px 10px 100px; 14 transition: all 0.1s ease-out; 15} 16#input1 + .test { 17 position: absolute; 18 top: 0; 19 left: 0; 20 bottom: 0; 21 height: 40px; 22 line-height: 40px; 23 color: white; 24 border-radius: 3px 0 0 3px; 25 padding: 0 20px; 26 background: #E03616; 27 transform: translateZ(0) translateX(0); 28 transition: all 0.3s ease-in; 29 transition-delay: 0.2s; 30} 31 32#input1:focus + .test { 33 transform: translateY(-120%) translateX(0%); 34 border-radius: 3px; 35 transition: all 0.1s ease-out; 36} 37#input1:focus { 38 padding: 10px; 39 transition: all 0.3s ease-out; 40 transition-delay: 0.2s; 41}

投稿2022/07/29 11:44

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyosu

2022/07/30 07:52

hatena19さん ありがとうございます!! また、助けられました。。 毎回本当に勉強になります。 ご丁寧にありがとうございます。 また何かありましたらよろしくお願いいたします。
guest

0

動かない状況です

#input1 + .test が 次のような意味になりますが、提示のHTMLにこれに該当するものが無いからですね
→ 「id="input1"を持つノード」の直後に居る、親が同じでclass="test"を持つノード

だからinputの後にlabelを置かないとダメだし、その間に別のタグがいてもダメです
ガチガチに条件を絞っているのはその方が事故が起きにくいからです(どこかにコピーした際など、意図しないlabelまで反応しないように)
セレクタは書き方次第で結構自由に対象を指定できるので、リファレンス眺めてるだけでも結構楽しいですよ
CSS セレクター - CSS: カスケーディングスタイルシート | MDN


ちなみに#input1:focus + .testは次のような意味です
→ 「id="input1"を持つフォーカスされているノード」の直後に居る、親が同じでclass="test"を持つノード

inputにフォーカスが当たるとlabelのスタイルが、「#input1:focus + .testの内容に、#input1 + .testが上書きコピーされた状態」になり、フォーカスが外れると元に戻ります。

投稿2022/07/30 04:41

hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyosu

2022/07/30 07:54

hirohiroさん ありがとうございます。 とてもご丁寧に分かりやすくありがとうございます。 とても勉強になりました。。。 また何かありましたら教えていただけますと幸いです。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問