実現したいこと
テーブルレイアウトを用いて設問を作り、表頭・表側から重なり合ったセルを選ぶレイアウトとして
以下の構成をCSSのみでの実現ができないか考えています。
A0 | A1 | A2 | A3 | |
---|---|---|---|---|
B0 | 表頭1 | 表頭2 | 表頭3 | |
B1 | 表側1 | ● | ○ | ○ |
B2 | 表側2 | ○ | ○ | ○ |
B3 | 表側3 | ○ | ○ | ○ |
B4 | 表側4 | ○ | ○ | ○ |
- 表頭(A1)、表側(B1)をポイントした時、A1列、B1行に背景色が付き、ポイント箇所が分かり、且つ、そのセル(図中●含むセル)をホバーした時、セルの背景色が変わる。
- テーブル全体に背景色がついても1.の効果は優先される。
- 表頭に背景色を指定しても1.の効果は優先される。
- 表側に背景色を指定しても1.の効果は優先される。
発生している問題・分からないこと
- 3と4の結果が得られない
表頭と表側に背景色を指定してしまうとポイントしたときの背景色が表頭と表側の背景色で打ち消されてしまう。
該当のソースコード
HTML
1<table id="hage" class="matrix"> 2 <tbody> 3 <tr> 4 <td></td> 5 <td class="fm-x"> 6 <span>Aああああああああああああああ</span> 7 </td> 8 <td class="fm-x"> 9 <span>Bあいいいいいいいいいいいい</span> 10 </td> 11 <td class="fm-x"> 12 <span>Cううううううううううううう</span> 13 </td> 14 <td class="fm-x"> 15 <span>いいいいいいいいいいい</span> 16 </td> 17 <td class="fm-x"> 18 <span>っっっっっっっっっっg</span> 19 </td> 20 </tr> 21 <tr> 22 <td class="fm-y"> 23 <span>1あああああああああああ</span> 24 </td> 25 <td class="fm-cell"> 26 <label> 27 <input name="hoge" id="hoge_1_1" type="radio" value="0"> 28 <span></span> 29 </label> 30 </td> 31 <td class="fm-cell"> 32 <label> 33 <input name="hoge" id="hoge_1_2" type="radio" value="4"> 34 <span></span> 35 </label> 36 </td> 37 <td class="fm-cell"> 38 <label> 39 <input name="hoge" id="hoge_1_3" type="radio" value="8"> 40 <span></span> 41 </label> 42 </td> 43 <td class="fm-cell"> 44 <label> 45 <input name="hoge" id="hoge_1_4" type="radio" value="12"> 46 <span></span> 47 </label> 48 </td> 49 <td class="fm-cell"> 50 <label> 51 <input name="hoge" id="hoge_1_5" type="radio" value="16"> 52 <span></span> 53 </label> 54 </td> 55 </tr> 56 <tr> 57 <td class="fm-y"> 58 <span>2いいいいいいいいいいいいいい</span> 59 </td> 60 <td class="fm-cell"> 61 <label> 62 <input name="hoge" id="hoge_1_1" type="radio" value="0"> 63 <span></span> 64 </label> 65 </td> 66 <td class="fm-cell"> 67 <label> 68 <input name="hoge" id="hoge_1_2" type="radio" value="4"> 69 <span></span> 70 </label> 71 </td> 72 <td class="fm-cell"> 73 <label> 74 <input name="hoge" id="hoge_1_3" type="radio" value="8"> 75 <span></span> 76 </label> 77 </td> 78 <td class="fm-cell"> 79 <label> 80 <input name="hoge" id="hoge_1_4" type="radio" value="12"> 81 <span></span> 82 </label> 83 </td> 84 <td class="fm-cell"> 85 <label> 86 <input name="hoge" id="hoge_1_5" type="radio" value="16"> 87 <span></span> 88 </label> 89 </td> 90 </tr> 91 <tr> 92 <td class="fm-y"> 93 <span>3うううううううううううううううううう</span> 94 </td> 95 <td class="fm-cell"> 96 <label> 97 <input name="hoge" id="hoge_1_1" type="radio" value="0"> 98 <span></span> 99 </label> 100 </td> 101 <td class="fm-cell"> 102 <label> 103 <input name="hoge" id="hoge_1_2" type="radio" value="4"> 104 <span></span> 105 </label> 106 </td> 107 <td class="fm-cell"> 108 <label> 109 <input name="hoge" id="hoge_1_3" type="radio" value="8"> 110 <span></span> 111 </label> 112 </td> 113 <td class="fm-cell"> 114 <label> 115 <input name="hoge" id="hoge_1_4" type="radio" value="12"> 116 <span></span> 117 </label> 118 </td> 119 <td class="fm-cell"> 120 <label> 121 <input name="hoge" id="hoge_1_5" type="radio" value="16"> 122 <span></span> 123 </label> 124 </td> 125 </tr> 126 <tr> 127 <td class="fm-y"> 128 <span>4ええええええええええええええええええええ</span> 129 </td> 130 <td class="fm-cell"> 131 <label> 132 <input name="hoge" id="hoge_1_1" type="radio" value="0"> 133 <span></span> 134 </label> 135 </td> 136 <td class="fm-cell"> 137 <label> 138 <input name="hoge" id="hoge_1_2" type="radio" value="4"> 139 <span></span> 140 </label> 141 </td> 142 <td class="fm-cell"> 143 <label> 144 <input name="hoge" id="hoge_1_3" type="radio" value="8"> 145 <span></span> 146 </label> 147 </td> 148 <td class="fm-cell"> 149 <label> 150 <input name="hoge" id="hoge_1_4" type="radio" value="12"> 151 <span></span> 152 </label> 153 </td> 154 <td class="fm-cell"> 155 <label> 156 <input name="hoge" id="hoge_1_5" type="radio" value="16"> 157 <span></span> 158 </label> 159 </td> 160 </tr> 161 </tbody> 162</table>
CSS
1.fm-matrix{ 2 border-collapse: collapse !important; 3} 4 5.fm-matrix td.fm-x span{ 6 -webkit-white-space: nowrap; 7 white-space: nowrap; 8 -ms-writing-mode: tb-lr; 9 writing-mode: vertical-lr; 10 word-wrap: break-word; 11 overflow-wrap: break-word; 12} 13 14.fm-matrix td.fm-x{ 15 vertical-align: top; 16 border-top: none !important; 17 border-bottom: none !important; 18 border-right: none !important; 19 z-index: 100; 20 position: relative; 21} 22 23.fm-matrix td.fm-y{ 24 padding:8px 15px 10px 0; 25 word-wrap: break-word; 26 border-bottom: none !important; 27 border-left: none !important; 28 border-right: none !important; 29 margin-top: -1px; 30} 31 32.fm-matrix tr:not(:first-child):hover { 33 background-color: #f3f8ff; 34 z-index: 0; 35 position: relative; 36} 37 38.fm-matrix td.fm-cell{ 39 border-bottom: none !important; 40 border-right: none !important; 41 position: relative; 42} 43 44 45.fm-matrix td.fm-cell:hover{ 46 background-color: #c2daff; 47} 48 49.fm-matrix td.fm-cell:hover::after { 50 background-color: #f3f8ff; 51} 52 53.fm-matrix td.fm-cell:hover::after{ 54 content: ""; 55 position: absolute; 56 top: -100vh; 57 left: 0; 58 width: 100%; 59 height: 200vh; 60 z-index: -1; 61}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
表頭と表側に背景色を指定してしまうとポイントしたときの背景色が表頭と表側の背景色で打ち消されてしまう。
補足
【一旦の想定形】
下図のようにユーザーがどの設問のラジオボタンを選択するか
視覚的にわかりやすいようにすることを想定しています。
- どのラジオボタンを選択しようとしているかhoverで背景色が付く(青)
CSS
1.fm-matrix td.fm-cell:hover{ 2 background-color: #c2daff; 3}
2.そのラジオボタンがどの表頭と表側にあたるものなのかを示すために背景色が付く
CSS
1.fm-matrix td.fm-x{ 2 vertical-align: top; 3 border-top: none !important; 4 border-bottom: none !important; 5 border-right: none !important; 6 z-index: 100;/*表頭の文字を視認するための指定。z-indexで最上位にしておかないと文字が見えなくなる*/ 7 position: relative; 8} 9 10.fm-matrix tr:not(:first-child):hover { 11 background-color: #f3f8ff; 12 z-index: 0; 13 position: relative; 14} 15 16.fm-matrix td.fm-cell{ 17 border-bottom: none !important; 18 border-right: none !important; 19 position: relative;/*::afterのabsoluteを指定するため*/ 20} 21 22.fm-matrix td.fm-cell:hover::after { 23 background-color: #f3f8ff; 24} 25 26.fm-matrix td.fm-cell:hover::after{ 27 content: ""; 28 position: absolute; 29 top: -100vh;/*fm-cellからの位置調整*/ 30 left: 0; 31 width: 100%; 32 height: 200vh;/*高さ(表頭からの長さ)*/ 33 z-index: -1;/*この指定をつけることで「背景」として表示される*/ 34}
【現在の問題】
表頭と表側に背景色を指定してしまうと「どの表頭と表側にあたるものなのかを示すための背景色」が表示されなくなってしまう。
回答1件
あなたの回答
tips
プレビュー