HTML5からは非推奨(廃止?)となり、今となっては懐かしい<marquee> タグ。
内包する要素をスライドさせて表示することができるこのタグは、一時は廃れたかのように見えましたが、最近再び見直されるようになり、同じ動作をするスクリプトが一部のスマートフォン対応サイトなどで使われています。

<marquee> タグが使えないとなると、同じ挙動は JavaScript で実現させようと考えるのが普通でしょうが、今日は CSS3 で marquee を実装する方法を紹介します。

HTML の書き方

<div class="marquee">
<p>The quick brown fox jumps over the lazy dog.</p>
</div>

「marquee」というクラスを与えたボックスでスライドさせたい要素を囲む。これが基本の記述です。
シンプルでいいですよね。
こういった簡単なプログラムコードに複雑さは厳禁です。

CSS3 の書き方

続いて CSS3 側の記述方法です。

.marquee {
width:600px;
padding:0.5em 0;
overflow:hidden;
background-color:#f6f6f6;
margin-bottom:10px;
position:relative;
}

.marquee p:after {
content:"";
white-space:nowrap;
padding-right:50px;
}

.marquee p {
margin:0;
padding-left:600px;
display:inline-block;
white-space:nowrap;
	-webkit-animation-name:marquee;
	-webkit-animation-timing-function:linear;
	-webkit-animation-duration:10s;
	-webkit-animation-iteration-count:infinite;
	-moz-animation-name:marquee;
	-moz-animation-timing-function:linear;
	-moz-animation-duration:10s;
	-moz-animation-iteration-count:infinite;
	-ms-animation-name:marquee;
	-ms-animation-timing-function:linear;
	-ms-animation-duration:10s;
	-ms-animation-iteration-count:infinite;
	-o-animation-name:marquee;
	-o-animation-timing-function:linear;
	-o-animation-duration:10s;
	-o-animation-iteration-count:infinite;
	animation-name:marquee;
	animation-timing-function:linear;
	animation-duration:10s;
	animation-iteration-count:infinite;
}
@-webkit-keyframes marquee {
  from   { -webkit-transform: translate(0%);}
  99%,to { -webkit-transform: translate(-100%);}
}
@-moz-keyframes marquee {
  from   { -moz-transform: translate(0%);}
  99%,to { -moz-transform: translate(-100%);}
}
@-ms-keyframes marquee {
  from   { -ms-transform: translate(0%);}
  99%,to { -ms-transform: translate(-100%);}
}
@-o-keyframes marquee {
  from   { -o-transform: translate(0%);}
  99%,to { -o-transform: translate(-100%);}
}
@keyframes marquee {
  from   { transform: translate(0%);}
  99%,to { transform: translate(-100%);}
}

「.marquee」で内包する要素に、「padding-left」で「.marquee」の横幅と同じ値、もしくはそれよりも大きな値を指定しておくことが1つのポイントになります。

あとはanimationtranslateをそれぞれ指定してなめらかな動きを実現しています。

このコードのデモは以下より。

CSS3 Marquee:サンプル・デモ