JOURNAL クリエイティブとマーケティングの話

CSSでHTMLのテキストを手軽に差し替える方法

CSSでHTMLのテキストを手軽に差し替える方法のメモです。

最近はアニメーションをCSSで実装するケースが多く、その場合はクラスを付加したり取り除いたりして動かすみたいなことをよくやります。

ここでご紹介する方法だと、クラスの付加・削除に連動してテキストも差し替えられるので意外と便利です。

CSSのみでHTMLのテキストを差し替える方法

例として、ボタンのテキストを差し替えます。

ボタンにホバーするとボタンの色とテキストの色が変わり、クリックすると「OPEN」というテキストが「CLOSE」に差し替わります。

HTML
<div id="btn">
	<button>
		<span>OPEN</span>
	</button>
</div>
CSS
#btn button {
	display: block;
	width: 200px;
	height: 40px;
	line-height: 40px;
	text-align: center;
	color: #fefefe;
	background: #333;
	margin: 0 auto;
	position: relative;
	cursor: pointer;
	transition: .3s ease;
}

#btn button:hover {
	background: #666;
}

#btn.active button span {
	font-size: 0;
	transition: 0; /* 親要素のtransitionを無効化 */
}

#btn.active button span::before {
	display: block;
	content: 'CLOSE';
	width: 100%;
	height: 100%;
	position: absolute;
	top: 0;
	left: 0;
}
JavaScript
jQuery(function($){	
	$("#btn button").click( function(){
		$(this).parent("#btn").toggleClass("active");
	});
});

ボタンをクリックする度に要素「#btn」に「.active」の付加・削除を繰り返します。

#btn.activeの状態になるとspanのフォントサイズが0(非表示)になり、代わりにspan疑似要素の「CLOSE」というテキストが表示されるという仕組みです。

注意点としては、親要素のtransitionの指定が子要素でも効いてしまうため、上記の例では文字の差し替えもヌルっとした感じになってしまいます。

そのため子要素で親要素のtransitionを無効化し、テキストがサッと差し替わるようにしています。

まとめ

以上、CSSでHTMLのテキストを手軽に差し替える方法でした。

テキストの差し替えは基本的にJSで処理することが多いかと思いますが、今回の方法も「あんなやり方もあったな」程度に覚えておいてもいいかもしれません。