HTML・CSS

バナーを横並びにするときに
  • にclassを付加せずにfloat落ちを防ぐ方法
  • この記事は2013年3月に公開したものです(13年以上前)。当時の情報にもとづいており、現在の仕様とは異なる場合があります。

    リスト<li>を使ってバナーを横並びにしたいと思います。

    • コンテンツ幅:620px
    • バナーサイズ:200px × 40px
    • バナー同士のスキマ:10px

    list-class130304-01

    HTML

    <div id="contents">
    <ul>
    <li><a href="/"><img src="img/bnr01.gif" alt="バナー01" /></a></li>
    <li><a href="/"><img src="img/bnr02.gif" alt="バナー02" /></a></li>
    <li><a href="/"><img src="img/bnr03.gif" alt="バナー03" /></a></li>
    </ul>
    <!-- /#contents --></div>

    CSS

    #contents {
    	width: 620px;
    }
    #contents ul {
    	zoom: 1;
    }
    #contents ul:after { content:"."; display: block; height:0px; clear:both; line-height:0; visibility:hidden; }
    #contents li {
    	float: left;
    	margin: 0 10px 0 0;
    }

    このとき、バナー03の<li>の右マージン10pxがcontents幅をはみ出してしまうため、通常ではバナー03がfloat落ちします。

    list-class130304-02

    それを防ぐために、バナー03の<li>にclassを追加し、marginを無効化します。
    list-class130304-03

    HTML

    <div id="contents">
    <ul>
    <li><a href="/"><img src="img/bnr01.gif" alt="バナー01" /></a></li>
    <li><a href="/"><img src="img/bnr02.gif" alt="バナー02" /></a></li>
    <li class="no-margin"><a href="/"><img src="img/bnr03.gif" alt="バナー03" /></a></li>
    </ul>
    <!-- /#contents --></div>

    CSS

    #contents {
    	width: 620px;
    }
    #contents ul {
    	zoom: 1;
    }
    #contents ul:after { content:"."; display: block; height:0px; clear:both; line-height:0; visibility:hidden; }
    #contents li {
    	float: left;
    	margin: 0 10px 0 0;
    }
    #contents li.no-margin {
    	margin: 0;
    }

    しかし、バナーサイズが変わるかもしれないし、順序が入れ替わるかもしれない状態で、classをつけたりとったりするのはめんどうです。
    そのため、<li>にclassを付加せずにfloat落ちを防ぎたいと思います。

    HTML

    <div id="contents">
    <ul>
    <li><a href="/"><img src="img/bnr01.gif" alt="バナー01" /></a></li>
    <li><a href="/"><img src="img/bnr02.gif" alt="バナー02" /></a></li>
    <li><a href="/"><img src="img/bnr03.gif" alt="バナー03" /></a></li>
    </ul>
    <!-- /#contents --></div>

    CSS

    #contents {
    	overflow: hidden;
    	width: 620px;
    }
    #contents ul {
    	zoom: 1;
    	width: 630px;
    }
    #contents ul:after { content:"."; display: block; height:0px; clear:both; line-height:0; visibility:hidden; }
    #contents li {
    	float: left;
    	margin: 0 10px 0 0;
    }

    <ul>に内容物の幅を指定、その親要素にはみ出すものは表示しない指定をします。
    この指定により、バナー03の<li>がfloat落ちするのを防ぐことができます。
    list-class130304-04

    ウェブサイトの制作・改善や、社内の困りごとのご相談を承っています。

    相談してみる