最速怪談選手権

●AAAAA● ●BBBBB● ●CCCCC●
上記のように文字の両側に●画像をCSSにて配置したいのですが。

HTML
<div class=R>
<a href=".html">AAAAA</a>
<a href=".html">BBBBB</a>
<a href=".html">CCCCC</a>
</div>
CSS
div.R a {
background-image: url("●.gif");
background-repeat: no-repeat;
background-position: left center;
margin-right: 12px;
padding-left: 7px
}
この状態では、左に●は表示されるます。
もうひとつ重ねればとおもい
<div class=R>の中に<div class=R2>なるものを配置し、
div.R2 a {
background-image: url("●.gif");
background-repeat: no-repeat;
background-position: right center;
margin-left: 12px;
}
を重ねてみたんですが、うまくいきません。
右にも表示させてい場合は、どのような記述にすれば表示されるのでしょうか?

A 回答 (4件)

> ●AAAAA● ●BBBBB● ●CCCCC●


> 上記のように文字の両側に●画像をCSSにて配置したいのですが。

ANo.2の回答者様の言及された通り、疑似要素が使えるならそちらの方がベターなんですが、肝心のIEめが未実装ですので…逃げ道を考えてみました。
検証条件として、

・各リンクは横並びにできるのであれば、マークアップは自由
・「●」は全て同じ画像を指す
・各リンクのテキスト幅が違っても、一定の余白を保つ

上記の様に解釈させて頂いた上でのサンプルが以下です。"mark.gif"という背景画像は10px×10pxと想定しています。
IE6.0/7.0、Firefox2.0~、Opera9.25 on Windows XPでほぼ同様表示の結果が得られています。
----------------------------------------------------------------------
【HTML】
----------------------------------------------------------------------
<?xml version="1.0" encoding="EUC-JP"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<link rel="stylesheet" href="./css/common.css" type="text/css" media="all" />
<title>サンプル</title>
</head>

<body>

<ul class="sample">
<li><span><a href="a.html">AAAAA</a></span></li>
<li><span><a href="b.html">BBBBBbb</a></span></li>
<li><span><a href="c.html">CCCCCccc</a></span></li>
</ul>

</body>
</html>
----------------------------------------------------------------------
【CSS】
----------------------------------------------------------------------
ul.sample {
list-style: none;
font-size: 12px;
line-height: 140%;
padding: 0;
margin: 0;
}
ul.sample li {
display: inline;
background: url(../images/mark.gif) left center no-repeat;
padding: 0 0 0 15px;
margin: 0 1em 0 0;
}
ul.sample li span {
background: url(../images/mark.gif) right center no-repeat;
padding-right: 15px;
}
----------------------------------------------------------------------
背景を両側に配置する為だけの意味を持たない入れ子(<span>)が増えるので、あまり気持ちの良い方法ではありませんが、論理構造上はまあ間違ってはいません。もしも、テキストの一方の背景画像部分だけ、リンクに含まれてしまってもよい、ということであれば、<span>を使わず<a>に対してスタイルを定義する事でも実装できますが。

----------------------------------------------------------------------
【HTML】
----------------------------------------------------------------------
(省略)
<ul class="sample">
<li><a href="a.html">AAAAA</a></li>
<li><a href="b.html">BBBBBbb</a></li>
<li><a href="c.html">CCCCCccc</a></li>
</ul>
(省略)
----------------------------------------------------------------------
【CSS】
----------------------------------------------------------------------
ul.sample {
(同上)
}
ul.sample li {
(同上)
}
ul.sample li a {
background: url(../images/mark.gif) right center no-repeat;
padding-right: 15px;
}
----------------------------------------------------------------------
こちらのサンプルの方が、<span>を使わずに済む分、マークアップはすっきりしますが、右側の背景画像の箇所までリンクが貼られている状態になります。この状態だと、環境(ブラウザの種類・テキストに対する画像の大きさ等)によっては、<a>のスタイルに下線が引かれている場合は、その部分までリンクが続いている事が一見でわかってしまうので、ちょっと見栄えが悪いかもしれません。その場合はtext-decoration: none;と定義して下線の出ないスタイルにする、という手もあります。

ちなみに、

> もうひとつ重ねればとおもい
> <div class=R>の中に<div class=R2>なるものを配置し、

<div class="R">
<div class="R2">
<a href="a.html">AAAAA</a>
</div>
</div>

この記述では、各リンクがブロック要素<div>で囲まれてしまう事により、質問者様が希望する様な横並びの状態にはならなくなります。スタイルを実現するのに適切なマークアップ、というのをまず考える様にして下さい。
※アトリビュートの値(value)はダブル・コーテーションで囲む記述にすることをお奨めします。
    • good
    • 0
この回答へのお礼

abrilさん
ご回答ありがとうございました。
早速、spanタイプを設置しました所、希望通りの表示になりました。

ありがとうございます。

お礼日時:2008/04/09 10:36

幅が決まっているなら、「●   ●」を1つの●.gifにしてしまうのが楽です。

    • good
    • 0

cssでやるならこんな感じ。


firefox2、ネスケ7.1、opera9などではいけそうです。
例によってIEには未実装です。

<style type="text/css">
div.R a:before,div.R a:after{
content: url("●.gif");
}
</style>
<div class=R>
<a href=".html">AAAAA</a>
<a href=".html">BBBBB</a>
<a href=".html">CCCCC</a>
</div>
    • good
    • 0

div.R a


div.R2 a

どちらも、「<a href=".html">AAAAA</a>」などのa要素に対してのスタイル指定です。
この2つを記述しても、片方(この順で記述しているなら「div.R2 a」)しか表示されません。
これは、一つの要素に対して、一つの属性(background-imageなど)は一つの値(A.gifなど)しか反映されないからです。
(どの値が反映されるかという点については割愛します)

方法としては、
<div class="bg"><a href=".html">AAAAA</a></div>
などと、a要素を別のdivで囲んで、a要素の背景とdiv要素の背景にそれぞれ指定するとか、

<div class="left"></div>
<a href=".html">AAAAA</a>
<div class="right"></div>
などとして、floatで横並びするなどがとれると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!