ขณะนี้ IE9 ขาดการสนับสนุนการไล่ระดับสี CSS3 อย่างไรก็ตามนี่เป็นวิธีแก้ปัญหาที่ดีโดยใช้ PHP เพื่อส่งคืนการไล่ระดับสี SVG (เชิงเส้นแนวตั้ง) แทนซึ่งช่วยให้เราสามารถรักษาการออกแบบของเราไว้ในสไตล์ชีตของเราได้
<?php
$from_stop = isset($_GET['from']) ? $_GET['from'] : '000000';
$to_stop = isset($_GET['to']) ? $_GET['to'] : '000000';
header('Content-type: image/svg+xml; charset=utf-8');
echo '<?xml version="1.0"?>
';
?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%">
<defs>
<linearGradient id="linear-gradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#<?php echo $from_stop; ?>" stop-opacity="1"/>
<stop offset="100%" stop-color="#<?php echo $to_stop; ?>" stop-opacity="1"/>
</linearGradient>
</defs>
<rect width="100%" height="100%" fill="url(#linear-gradient)"/>
</svg>
เพียงอัปโหลดไปยังเซิร์ฟเวอร์ของคุณและเรียก URL ดังนี้:
gradient.php?from=f00&to=00f
สามารถใช้ร่วมกับการไล่ระดับสี CSS3 ของคุณได้ดังนี้:
.my-color {
background-color: #f00;
background-image: url(gradient.php?from=f00&to=00f);
background-image: -webkit-gradient(linear, left top, left bottom, from(#f00), to(#00f));
background-image: -webkit-linear-gradient(top, #f00, #00f);
background-image: -moz-linear-gradient(top, #f00, #00f);
background-image: linear-gradient(top, #f00, #00f);
}
หากคุณต้องการกำหนดเป้าหมายต่ำกว่า IE9 คุณยังสามารถใช้วิธีการ 'ตัวกรอง' ที่เป็นกรรมสิทธิ์แบบเก่าได้:
.ie7 .my-color, .ie8 .my-color {
filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr="#ff0000", endColorStr="#0000ff");
}
แน่นอนว่าคุณสามารถแก้ไขโค้ด PHP เพื่อเพิ่มจุดหยุดบนการไล่ระดับสีหรือทำให้ซับซ้อนยิ่งขึ้น (การไล่ระดับสีตามแนวรัศมีความโปร่งใส ฯลฯ ) แต่วิธีนี้เหมาะสำหรับการไล่ระดับสีเชิงเส้นแบบง่าย (แนวตั้ง)