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

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

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

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

CSS

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

Q&A

解決済

2回答

1079閲覧

ひし形にしたdivをホバー時に背景を変えたい

winter_pc

総合スコア14

HTML5

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

CSS

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

0グッド

1クリップ

投稿2020/11/10 09:30

斜めの線で区切られた横並びのメニューを作ろうとしているのですが、ホバー時の動きをうまく作ることが出来ません。

html

1 <div class="pc_menu_con"> 2 <div class="pc_menu_box"> 3 <a href="#"><div class="pc_menu_cel">TOP</div></a> 4 <a href="#"><div class="pc_menu_cel">メニュー</div></a> 5 <a href="#"><div class="pc_menu_cel">メニュー</div></a> 6 <a href="#"><div class="pc_menu_cel">メニュー</div></a> 7 <a href="#"><div class="pc_menu_cel">メニュー</div></a> 8 <a href="#"><div class="pc_menu_cel">メニュー</div></a> 9 <a href="#"><div class="pc_menu_cel">メニュー</div></a> 10 </div> 11 </div> 12

各メニューの間は斜めの線で区切ろうとしています。
また、ホバー時には背景画像を表示しようとしています。

css

1.pc_menu_con { 2 width: 100%; 3 min-width: 1000px; 4 background: url(lib/images/menu_bg00_1.png) repeat-x center center; 5 margin: 0 auto; 6} 7.pc_menu_box { 8 width: 1000px; 9 display: -webkit-flex; 10 display: -moz-flex; 11 display: -ms-flex; 12 display: -o-flex; 13 display: flex; 14 flex-wrap: wrap; 15 margin: 0 auto; 16} 17.pc_menu_box a { 18 color: #FFF; 19 text-decoration: none; 20 font-weight: 700; 21} 22.pc_menu_cel { 23 width: 142px; 24 height: 50px; 25 box-sizing: border-box; 26 display: -webkit-flex; 27 display: flex; 28 -webkit-align-items: center; 29 align-items: center; 30 -webkit-justify-content: center; 31 justify-content: center; 32 position: relative; 33} 34.pc_menu_cel::before { 35 content : ""; 36 top : 0; 37 left : 0; 38 position : absolute; 39 width: 142px; 40 height: 50px; 41 box-sizing: border-box; 42 transform : skewX(-8deg); 43 border-right: 2px solid #FFF; 44} 45.pc_menu_cel:hover::before{ 46 background: url(lib/images/menu_bg00_1_on.png) repeat-x; 47 content : ""; 48 top : 0; 49 left : 0; 50 position : absolute; 51 width: 142px; 52 height: 50px; 53 box-sizing: border-box; 54 transform : skewX(-8deg); 55 border-right: 2px solid #FFF; 56}

こうすると、ホバー時にひし形の背景は出るのですが、テキストが消えてしまいます。
また、左側のボーダーも消えてしまいます。

また、最後のメニューには右側のボーダーは不要なので消したいのですが

css

1.pc_menu_cel::before:last-child{ 2 border-right:0px; 3}

としてもボーダーは消えず

css

1.pc_menu_cel:last-child::before{ 2 border-right:0px; 3}

こうすると全部のボーダーが消えます。

どのように修正したら良いでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下でどうでしょうか。

css

1/* 前略 */ 2 3.pc_menu_cel { 4 width: 142px; 5 height: 50px; 6 box-sizing: border-box; 7 display: -webkit-flex; 8 display: flex; 9 -webkit-align-items: center; 10 align-items: center; 11 -webkit-justify-content: center; 12 justify-content: center; 13 position: relative; 14 z-index: 1; /* 追加 */ 15} 16.pc_menu_cel::before { 17 content : ""; 18 top : 0; 19 left : 0; 20 position : absolute; 21 width: 142px; 22 height: 50px; 23 box-sizing: border-box; 24 transform : skewX(-8deg); 25 border-right: 2px solid #FFF; 26 z-index: -1; /* 追加 */ 27} 28.pc_menu_cel:hover::before{ 29 background: url(lib/images/menu_bg00_1_on.png) repeat-x; 30 31 /* この部分の重複設定削除 */ 32 33} 34a:last-child .pc_menu_cel::before{ 35 border-right: none; 36}

別案

疑似要素 before を使わずに、a要素を直接 transform で傾ける。
中のテキストも傾いてしまうので、逆に傾けて打ち消す。

css

1.pc_menu_box a { 2 transform: skewX(-8deg); 3 border-right: 2px solid #FFF; 4} 5.pc_menu_cel { 6 transform: skewX(8deg); 7} 8.pc_menu_box a:hover{ 9 background: url(lib/images/menu_bg00_1_on.png) repeat-x; 10} 11.pc_menu_box a:last-child { 12 border-right: none; 13}

投稿2020/11/10 11:30

編集2020/11/10 11:49
hatena19

総合スコア34075

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

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

winter_pc

2020/11/11 00:35

ありがとうございます! 別案のシンプルな方でやってみて希望通りになりました。
guest

0

よく見ると、.pc_menu_celは一人っ子です。
メニューとして並んでいるのはaの方なので、下記のように最後に並んでいるaを選択してから、孫の線を消すことができます。

CSS

1a:last-child .pc_menu_cel::before{ 2 border-right:0px; 3}

追記
擬似要素で矩形を作り上から被せているので、テキストが消えているように見えます。テキストを矩形の上にくるようにレイヤーを調整しないといけません。

案として、.pc_menu_celの擬似要素で矩形を作らず、aタグで作成。矩形とテキストにz-indexで調整するのはどうでしょうか?

css

1.pc_menu_box a { 2 position: relative; // 追加 3} 4 5// .pc_menu_cel::before 変更 6.pc_menu_box a::before { 7 z-index: 1; // 追加 8} 9 10// .pc_menu_cel:hover::before 変更 11.pc_menu_box a:hover::before { } 12 13// 追加(最後の線を消す) 14.pc_menu_box a:last-child::before { 15 border: 0; 16} 17 18.pc_menu_cel { 19 z-index: 3; //追加 20}

投稿2020/11/10 09:53

編集2020/11/10 11:07
Create_NAYU

総合スコア101

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

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

winter_pc

2020/11/10 10:34

ありがとうございます! 無事最後のボーダーは消えました。 残りの、テキストが消えてしまう件もよければお願いします。
Create_NAYU

2020/11/10 11:07

追記しました。ご参考ください。
winter_pc

2020/11/11 00:35

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問