HTMLで数点詰まってしまった所がございましたので、ご教示いただける方がいらっしゃいましたら、よろしくお願いします。
【やりたいこと】
1. 「ここは1行目です。」というテキストと画像にリンクが貼ってあります。
そのどちらかにマウスを重ねた際、下記の3つを同時に変更したいのですが可能でしょうか?
1-1. 画像を変更する。
1-2. 「ここは1行目です。」の文字色を変更する。
1-3. 「ここは1行目です。」のtdの背景色を変更する。
今の所、1-1, 1-2はそれぞれの上にマウスを重ねると動作します。
1-3は上にマウスを重ねると文字の後ろのみ(tdの後ろではありません)背景が変わります。
ただしどれも連動はしていません。
2. 1-3の関連となりますが、現在、画像とテキストにリンクを貼っていますが、そうではなく列(またはテーブル)自体にリンクを貼る(リンクを1つにまとめる)ことは可能でしょうか?
tableやtrにリンクを貼っても動作しなかったのですが、何か代替案があればご教示いただければと思います。
【ソースコード】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>title</title>
<style type="text/css">
<!--
.text_link a {
display: block;
}
.text_link a:hover {
color:#33FF66;
background-color:#CCFFFF;
}
-->
</style>
<script type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>
<body onload="MM_preloadImages('images/5.jpg')">
<table border="0" cellspacing="0" cellpadding="0" width="300">
<tr>
<td width="1" valign="middle"><a href="index1.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image3','','images/5.jpg',1)"><img src="images/1.jpg" name="Image3" width="80" height="60" border="0" id="Image3" /></a></td>
<td valign="middle" class="text_link"><a href="index1.html">ここは1行目です。</a></td>
</tr>
</table>
</body>
</html>
【使用ファイル】
index.html(上記ソース)
images/1.jpg(任意の画像)
images/5.jpg(任意の画像)
どこか一箇所でもご教示いただけるようでしたら、ご教示いただければと思います。
以上、よろしくお願いします。
No.2
- 回答日時:
単純に「回り込み」を指定すれば良いのでは?
<img src="" alt="" title="" width="" height="" style="float:#;" />文字列・・・・<br style="clear:#;" />
#には以下の値を代入。
inherit…継承
none…指定無し
left…左を解除
right…右を解除
both…両側を解除
この回答への補足
回答2の「この回答へのお礼」の続きとなります。
【ソースコード】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>title</title>
<style type="text/css">
<!--
.middle {
vertical-align:middle;
}
a.hoge {
display: block;
}
a.hoge:hover {
color:#3f6;
background-color:#cff;
}
.text_link a {
display: block;
}
.text_link a:hover {
color:#33FF66;
background-color:#CCFFFF;
}
-->
</style>
<script type="text/JavaScript">
<!--
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>
<body onload="MM_preloadImages('images/5.jpg','images/3.jpg','images/6.jpg')">
<table border="0" cellspacing="0" cellpadding="0" width="300">
<tr>
<td class="text_link"><a href="index3.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image4','','images/6.jpg',1)"><img src="images/4.jpg" name="Image4" width="100" height="70" border="0" id="Image4" style="float:left" />CSSとfloatを使用したバージョン<br style="clear:both" /></a></td>
</tr>
</table>
<br />
<table border="0" cellspacing="0" cellpadding="0" width="300">
<tr>
<td class="text_link"><a href="index.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image2','','images/3.jpg',1)"><img src="images/2.jpg" name="Image2" width="80" height="60" border="0" id="Image2" class="middle" />CSSを使用したバージョンです。長い文字になると・・・</a></td>
</tr>
</table>
<br />
<table border="0" cellspacing="0" cellpadding="0" width="300">
<tr>
<td width="1" valign="middle" class="text_link"><a href="index1.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image3','','images/5.jpg',1)"><img src="images/1.jpg" name="Image3" width="80" height="60" border="0" id="Image3" /></a></td>
<td valign="middle" class="text_link"><a href="index1.html">tableレイアウトバージョンです。長い文字になると・・・</a></td>
</tr>
</table>
</body>
</html>
【使用ファイル】
index.html(上記ソース)
images/1.jpg(任意の画像)
images/2.jpg(任意の画像)
images/3.jpg(任意の画像)
images/4.jpg(任意の画像)
images/5.jpg(任意の画像)
images/6.jpg(任意の画像)
以上、よろしくお願いします。
ありがとうございます。
教えていただいたfloatを試してみた所、回答1の補足のテキストが複数行ある場合に、2行目が画像の下に回りこんでしまう現象が解決いたしました。
しかし他の問題が出てしまいました。
1. 文字が上揃えになってしまいました。
2. マウスを重ねると文字の上の背景しか変わらなくなりました。
http://okwave.jp/qa1171659.htmlの書き込みを見ると、floatを使用すると、vertical-align:middle;が無効化されているように読み取れましたが、これを解決する方法はあるのでしょうか?
※なお文字数制限の関係上、続きは「この回答への補足」に投稿させていただきます。
No.1
- 回答日時:
> tableやtrにリンクを貼っても動作しなかったのですが、
リンク<a>はインライン要素ですので、「tableやtrに」に適用する事はできません。
サンプルの様に、
<tr>
<td><a href="index1.html"><img></a></td>
<td><a href="index1.html">テキスト</a></td>
</tr>
という構造のままだとご希望をかなえるにはJavaScriptを追加修正するのが手っ取り早いかと思いますが、どうしてもこういう構造(画像とテキストをセルに分けて横並びにする)でなければいけませんか?仮に:
<tr>
<td><a href="index1.html"><img>テキスト</a></td>
</tr>
という構造で良いのであれば問題はCSSで一気解決するのですが。下記は大雑把な一例です。<img>に対するロールオーバーのJavaScriptはそのまま流用するとします。
※ただし<td>のpaddingが0の場合に限ります。
【CSS】
a.hoge {
display: block;
}
a.hoge:hover {
color:#3f6;
background-color:#cff;
}
【HTML】
<tr>
<td><a href="index1.html" (省略) class="hoge"><img (省略)>テキスト</a></td>
</tr>
a.hogeで<a (省略) class="hoge">をブロック要素化しているので、リンクの領域が<td>のセル内全体となり、<td>のどこにマウスを置いても前景色(テキストリンクの色)と背景色(テキストリンクの背景色だが表示上はセル全体となる)が同時に切り替わります。CSSを工夫すればその他のスタイルの微調整(例えば画像とテキストの間の余白・位置など)も可能です。
どうしても現在の様に<tr><td><a><img></a></td><td><a>テキスト</a></td></tr>という構造を保たねばならないのであれば、<tr>に対して疑似要素":hover"を適用する方法もありますが、残念ながらIE6では疑似要素":hover"が<a>に対してしか適用されないのでそれをどうにかする為にはやはりJavaScriptの併用が必要となります。
この回答への補足
ありがとうございます。
リンクがtableやtrに適用出来ない件、了解いたしました。
それと現在の構造を維持する必要はありません。
そして教えていただいた記述を元にCSSで組み直したところ、今回質問させていただいた内容はすべて解決いたしました。
しかし他の問題が出てしまいました。
テキストが複数行の場合、2行目が画像の下に回りこんでしまいます。
テーブルレイアウトの場合は、td内で改行されていたのですが。
http://oshiete1.goo.ne.jp/qa2016072.htmlの書き込みを見ると、複数行のテキストを動作させるのは難しいように読み取れましたが、これを解決する方法はあるのでしょうか?
【ソースコード】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>title</title>
<style type="text/css">
<!--
.middle {
vertical-align:middle;
}
a.hoge {
display: block;
}
a.hoge:hover {
color:#3f6;
background-color:#cff;
}
.text_link a {
display: block;
}
.text_link a:hover {
color:#33FF66;
background-color:#CCFFFF;
}
-->
</style>
<script type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>
<body onload="MM_preloadImages('images/5.jpg','images/3.jpg')">
<table border="0" cellspacing="0" cellpadding="0" width="300">
<tr>
<td class="text_link"><a href="index.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image2','','images/3.jpg',1)"><img src="images/2.jpg" name="Image2" width="80" height="60" border="0" id="Image2" class="middle" />CSSを使用したバージョンです。長い文字になると・・・</a></td>
</tr>
</table>
<br />
<table border="0" cellspacing="0" cellpadding="0" width="300">
<tr>
<td width="1" valign="middle" class="text_link"><a href="index1.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image3','','images/5.jpg',1)"><img src="images/1.jpg" name="Image3" width="80" height="60" border="0" id="Image3" /></a></td>
<td valign="middle" class="text_link"><a href="index1.html">tableレイアウトバージョンです。長い文字になると・・・</a></td>
</tr>
</table>
</body>
</html>
【使用ファイル】
index.html(上記ソース)
images/1.jpg(任意の画像)
images/2.jpg(任意の画像)
images/3.jpg(任意の画像)
images/5.jpg(任意の画像)
以上、よろしくお願いします。
※なお文字数制限の関係上、「この回答へのお礼」ではなく、「この回答への補足」に投稿させていただきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html でのテキスト結合について
-
tableタグとformタグの組み合わせ
-
テーブルの一部分のセルだけに...
-
Tableタグ内のspan styleが適応...
-
同じクラス名はつけないほうが...
-
表とリスト(ulとtable)の違い...
-
vbscriptで時計を作りたい
-
td要素内のdiv要素をセンタリン...
-
テーブルの枠線に色が付かない
-
TDタグ内での均等割付の仕方
-
Tableタグで作成した表の縮小
-
vb2005でwebbrowserに表示した...
-
table内の画像を中央寄せ、のせ...
-
カレンダーを自動生成させたい...
-
VBAでホームページから値を取得...
-
セルの高さを固定するには?
-
添付のような形で10×10ピクセル...
-
前の質問のソースです
-
cssで、テーブルのtdの中の文字...
-
リストの記号を括弧付きの文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html でのテキスト結合について
-
tableタグとformタグの組み合わせ
-
テーブルの一部分のセルだけに...
-
同じクラス名はつけないほうが...
-
テーブル内のテーブルの高さを...
-
XHTMLに関する質問 順序が逆に...
-
Tableタグ内のspan styleが適応...
-
Tableタグで作成した表の縮小
-
ブラウザによってテーブルのセ...
-
cssで、テーブルのtdの中の文字...
-
td要素内のdiv要素をセンタリン...
-
vbscriptで時計を作りたい
-
formのinputなどの幅100%指定
-
Firefoxを使ってるのですがズー...
-
テーブルの枠線に色が付かない
-
divで囲んだ文字が消える
-
TDタグ内での均等割付の仕方
-
表とリスト(ulとtable)の違い...
-
firefoxで「height: 100%;」と...
-
<img>タグにCSSのclass設定可能?
おすすめ情報