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

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

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

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

1138閲覧

ホバー時に左から右にスライドするように色が変わる角丸ボタンを作成したい

murua

総合スコア7

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2022/09/29 10:36

前提・実現したいこと

角丸のボタンで、ホバー時に左から右に色が変わるボタンを作成したいです。
動作はしている感じなのですが、
●色が変わらない
●なにか、めくれるように見えるので、スライドするように色を変えたい
(角丸でなく、四角ならスライドするようには見えます)
この2つの問題を解決したいです。

該当のソースコード・試したこと

★HTML

<div><div class="link"><a href="#">もっとくわしく</a></div></div>

★CSS
/* リンクボタン */
div.link{
border-radius: 35px;

}
div.link a,
div.link a{
color: #fff;
font-size: 16px;
font-weight: bold;
padding: 18px 25px;
border-radius: 35px;
position: relative;
text-decoration: none;
z-index: 1;
transition: .3s;
background: #0087cd;
}
div.link a:hover{
color:#ffffff;

}

div.link a::before {
content: "";
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: -1;
background: #10b5c4;
transform-origin: 0% 50%;
transform: scaleX(0);
transition: transform ease-in-out .3s;
border-radius: 35px;

}

div.link a:hover::before{
transform-origin: 0% 50%;
transform: scaleX(1);
background: #10b5c4;

}

補足情報(FW/ツールのバージョンなど)

諸事情により、HTMLの記述はこの形をキープしたいです。

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

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

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

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

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

guest

回答3

0

下記の修正でどうでしょう。

  • 背景色は親要素(div.link)につける。
  • 親要素にoverflow: hidden;を設定してはみ出した部分は非表示にする。
  • border-radiusは親要素だけにする。overflow: hidden;を設定しているので子要素には不要。
  • スライドする背景色は親要素(div.link)の疑似要素につける。

css

1/* リンクボタン */ 2div.link { 3 border-radius: 35px; 4 display: inline-block; 5 position: relative; 6 background: #0087cd; 7 overflow: hidden; 8} 9div.link a { 10 color: #fff; 11 font-size: 16px; 12 font-weight: bold; 13 padding: 18px 25px; 14 text-decoration: none; 15 position: relative; 16 display: block; 17} 18div.link::before { 19 content: ""; 20 width: 100%; 21 height: 100%; 22 position: absolute; 23 background: #10b5c4; 24 transform-origin: 0% 50%; 25 transform: scaleX(0); 26 transition: transform ease-in-out 0.3s; 27} 28div.link:hover::before { 29 transform: scaleX(1); 30}

CodePenサンプル

投稿2022/09/29 11:35

hatena19

総合スコア33699

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

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

murua

2022/09/30 01:51

前回に引き続き、早速の回答をありがとうございます! PCでは問題ないようですが、 iphoneとipadで確認すると、 ①ホバーを解除しても、ホバー色のまま(両方のソース) ②ホバー時に一瞬四角になる という現象が起こります。 ②に関しては div.link::before にも border-radius: 35px; を足したら解決しましたが ①は力不足で解決できず・・・ ここまで解決できているので、なんとかしたいと切に思っています。 昨夜iphoneとipadで確認して、「あれ??」って思ったのですが PCで確認してから・ちょっと自分でもがんばってみようと思ってしまい、お返事が遅くなってしまいました・・・。 すみません。 動作の動画をアップしました! https://www.youtube.com/shorts/QuzAYWaOc_k
murua

2022/10/01 03:20

ありがとうございます。 じっくり読んでみます!
guest

0

ベストアンサー

CSSに以下の記述を追加でいけました!

css

1/* リンクボタン */ 2div.link { 3 display: inline-block; /* 追加 */ 4 border-radius: 35px; 5 overflow: hidden; /* 追加:はみ出た子要素は非表示 */ 6} 7 8div.link a, 9div.link a { 10 display: block; /* 追加 */ 11 color: #fff; 12 font-size: 16px; 13 font-weight: bold; 14 padding: 18px 25px; 15 border-radius: 35px; 16 position: relative; 17 text-decoration: none; 18 z-index: 1; 19 transition: .3s; 20 background: #0087cd; 21}

投稿2022/09/29 10:48

編集2022/09/29 10:57
Cocode

総合スコア2314

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

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

murua

2022/09/30 01:44

回答、ありがとうございます。 PCでは問題ないようですが、 iphoneとipadで確認すると、 ホバーを解除しても、ホバー色のまま(両方のソース) という現象が起こります。 これはなんでしょう・・・・?? いろいろ探ってもみましたが、そもそも作れないので、やっぱり解決できません・・・。 https://youtube.com/shorts/xgA71JDl7UM 現象をこちらにアップしてみました! 昨夜iphoneとipadで確認して、「あれ??」って思ったのですが PCで確認してから・ちょっと自分でもがんばってみようと思ってしまい、お返事が遅くなってしまいました・・・。 すみません。
Cocode

2022/09/30 07:04

hoverはカーソル操作のデバイスのみです!カーソルなどが上に乗ったときに起こる現象ですよね? タッチデバイスはhoverはありませんー! その対策、回答編集しておくりますね
Cocode

2022/09/30 07:58 編集

とおもったら、hatena19さんが紹介してくれていたので、その記事の通りでいいと思います。 多分一番簡単なのは外部JSに document.querySelector('body').setAttribute('ontouchstart', ''); をかいて、そのJSファイルを全部のCSSで読み込むことだと思います。
murua

2022/10/01 03:13

そうなんですね。タッチデバイスにはホバーの概念がないのですね。(素人・・・・)
Cocode

2022/10/01 03:47 編集

ないのですよー。なのでcssだけで対応させようとするとメディアクエリを使って、タッチデバイスでは:active、マウス操作デバイスでは:hoverでスタイルがつくように書き分けるんですけど、なかなか面倒ですー。 ピュアCSSで書くなら、同じ記述2回書かないといけないですし😂
guest

0

スマートフォンやタブレットでは、ホバーという概念がないことを知らずに質問してしまい、申し訳ございませんでした。javaScriptはどうしても入れたくない、hoverでなくactiveの記述を加えることがNGという条件下ですので、結局スマートフォンのほうでのボタンアニメーションはあきらめました。
で、いろいろ調べていて、スマートフォンの動作をあきらめると、最初提示したCSSよりも、もう少しシンプルなCSSの記述でできることがわかったので、CSSも書き換えました。
PCでは色が変わり、スマートフォンでは、特に動きがないので、これが妥協案として適当なのかなあと思っています。
ただ、お二人の案や参考サイトがなければ、ここまでたどり着けなかったので、感謝しています!ありがとうございました。
ベストアンサーは、本当はお二人に付けたかったのですが、1人だけなので、今回初めてレスをくださったCocodeさんにいたしました。hatena19さんも前回に引き続きありがとうございました。

ちなみに、最終的なソースは以下の通りです。

<style> /* リンクボタン */ .link{ border-radius: 35px; position: relative; background: #0087cd; overflow: hidden; } .link a{ color: #fff; font-size: 16px; font-weight: bold; padding: 18px 25px; text-decoration: none; position: relative; display: block; z-index:10; border-radius: 35px; } .link ::before { content: ""; width: 100%; height: 100%; position: absolute; top:0; left:0; background: #10b5c4; transform-origin: 0% 80%; transform: scaleX(0); transition: transform ease-in-out 0.3s; border-radius: 35px; z-index:-10; } .link :hover::before, .link:active::before{ transform: scaleX(1); border-radius: 35px; z-index:-10; } </style> <div class="link"><a href="#">くわしくはこちら</a></div>

投稿2022/10/02 08:43

murua

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問