カテゴリ:
CSS

IE9でborder-radiusとグラデーションを両立する

WEB開発をしていると、対応ブラウザとしてIE9をサポートしなければならないこともまだあると思う。しかし、IE9はCSSでborder-radiusをサポートしているものの、linear-gradient等はサポートしていない。このため、ボタン等で角丸とグラデーションを両立しようとすると、画像を利用するか、またはborder-radiusとIE独自のフィルタを組み合わせることが思い浮かぶ。

画像を利用すればこれを実現できそうなのは分かるが、技術系の人間だと画像ファイルを作るのは躊躇しがちだ。そこで、border-radiusとIE独自のフィルタを組み合わせる方法を考えるが、実はこの方法はグラデーションが角丸の外側にはみ出してしまって使えない。例えば、以下のようなコードだ。


<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
		<meta charset="utf-8">
		<style>
			#button1 {
				border: solid 1px black;
				border-radius: 7px;
				filter: progid:DXImageTransform.Microsoft.Gradient(StartColorStr='#666666',EndColorStr='#cccccc',GradientType=0);
			}
		</style>
		<title>IE9でborder-radiusとグラデーションを両立</title>
	</head>
	<body>
		<h1>IE9でborder-radiusとグラデーションを両立</h1>
		<button id="button1">border-radiusとフィルタ</button>
	</body>
</html>

このことは数年前に試して知っていたのだが、最近Microsoftが解決方法を公開しているのをたまたま見つけたので再度試してみた。その方法は、端的に言うとCSSのbackground-imageでSVGを利用するというもの。「えっ、それって画像じゃねーの」と突っ込まれそうだが、SVGは画像ソフトを使わずともXMLを書くだけで良いのだ。

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
		<meta charset="utf-8">
		<style>
			#button2 {
				border: solid 1px black;
				border-radius: 7px;
				background-image: url('./images/background.svg');
			}
		</style>
		<title>IE9でborder-radiusとグラデーションを両立</title>
	</head>
	<body>
		<h1>IE9でborder-radiusとグラデーションを両立</h1>
		<button id="button2">border-radiusとSVG</button>
	</body>
</html>

SVGはこんな感じになる。ほぼ、Microsoftで公開されているものと同じである。

<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">
	<linearGradient id="vg1" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="0%" y2="100%">
		<stop stop-color="#666666" offset="0"/>
		<stop stop-color="#cccccc" offset="1"/>
	</linearGradient>
	<rect x="0" y="0" width="1" height="1" fill="url(#vg1)" />
</svg>

(2014/11/26)

新着情報
【iOS Objective-C, Swift Tips】アプリアイコンにバッジを表示(Swift)
【iOS Objective-C, Swift Tips】画像の向きを指定して保存する(Swift)
【iOS Objective-C, Swift Tips】UIImagePickerControllerの表示を日本語にする(Swift)

Copyright(C) 2004-2015 モバイル開発系(K) All rights reserved.
[Home]