CSS @font-face เปลี่ยนฟ้อนต์ให้หน้าเว็บ(CrossBrowser)

font-face

ผมคิดว่าท่านๆเคยพยายามที่จะเปลี่ยนfontในหน้าเว็บกัน เหมือนผมใช่ไหมละครับ แต่การเปลี่ยน fontในหน้าเว็บนั้นจะไม่ง่ายเหมือนกัน word หรือ photoshop ที่แค่เลือกfontแล้วเปลี่ยนได้สบายตามใจฉัน และวิธีการเปลี่ยนfontนั่นก็มีอยู่หลายวิธีด้วยกัน(ถ้าใครที่เสิร์จหาเจอแล้วลองทำดูแล้วก็น่าจะรู้ครับ)ไม่ว่าจะเป็นการเปลี่ยนโดยใช้ php สร้างเป็นรูปภาพมาแปะเพื่อที่จะให้มัน cross Browser หรือว่าจะใช้เป็น ใส่ Flash มาทับพื้นที่ที่ต้องการใช้ตัวอักษรนั้นอย่าง sIFR ที่เห็นกันในเว็บ ไทยรัฐ แต่สำหรับบทความผมจะขอแนะนำการใช้ @font-face ใน css stylesheet กัน เพราะคิดว่าเป็นวิธีที่สะดวกและง่ายที่สุดครับ
สำหรับ @font-face นี้จะ support Browser IE4 ขึ้นไปนะครับ(เขาว่างั้นนะครับ ผมได้ลองแค่ ie6) ส่วน browser modernอื่นๆคงไม่ต้องพูดถึงครับหาก ie support แล้ว ฮ่าๆๆ

วิธีการใช้ @font-face  แบบ cross browser

สิ่งที่ต้องเตรียมมาก็คือ ไฟล์ font ที่เป็น .tff (truetype) ครับหาได้ทั่วไป มีให้โหลดเยอะแยะแถวๆ dafont.com  และก็ notepad++ สักตัว(ไม่พลัสหรือตัวอื่นก็ได้ครับ แต่ผมชอบตัวนี้ ฮ่าๆ)

เสร็จแล้วก็ให้เข้าเว็บ http://www.kirsle.net/wizards/ttf2eot.cgi ตามนี้ครับ เพื่อที่จะแปลง .tff เป็น .eot ให้ IE support ด้วย (จริงๆเว็บอื่นก็มีครับลอง search google : ttf2eot หรือว่า ttf to eot )

เสร็จแล้วก็ เลือกไฟล์ font  .ttf ของเรา แล้วคลิ๊ก Convert TTF To EOT! ครับ

เมื่ออัพโหลดเสร็จแล้ว web มันจะ generate css มาให้พร้อมกับลิ้งค์โหลดไฟล์ .eot ก็โหลดไฟล์ .eot นั้นมาใส่ไว้ใน folder เดียวกับไฟล์ stylesheet ครับ แล้วก็ก๊อปโค๊ดไปไว้ในหน้าเพจหรือว่าตัดเอามาใส่ใน stylesheet บรรทัดแรกๆก็ได้ครับ

คราวนี้ท่านอยากใช้ font นี้ตรงส่วนไหนก็สามารถเขียน css จับใส่ลงไปใน font-family ได้อย่างสบายใจละครับ
ตัวอย่าง stylesheet

@font-face {
	font-family: Test;
	src: url(Test.eot);
}
@font-face {
	font-family: Test;
	src: url(Test.ttf) format('truetype');
}

h1,h2,h3,h4,h5,h6{
	font-family:Test,tahoma,Arial,sans-serif;
}

สำหรับ Firefox จะมีปัญหาอยู่นึงกรณีนำไปใช้ หลายโดเมน หรือว่าหลาย subdomain ครับ firefox จะติดหลุม Security พวก Cross Site อ่าครับ ดูได้จากที่นี่ครับ https://developer.mozilla.org/en/HTTP_access_control

สำหรับวิธีแก้ปัญหาก็คือให้เพิ่ม header  Access-Control-Allow-Origin: * ลงไปใน output ครับ(ค่อนข้างจะ low level นิดนึง -..-) วิธีที่ง่ายที่สุดเห็นจะเป็น เอาไปใส่ใน .htaccess ครับ โดยอนุญาตใ้ห้ทุกโดเมน สามารถเข้าถึงไฟล์ตัวนี้ได้ครับ

.htaccess

header set Access-Control-Allow-Origin *

สำหรับรายละเอียดลึกๆผมจะไม่ขออธิบายนะครับว่าจะทำยังไงให้ Allow เฉพาะไซต์หรือว่า Allow เว็บตามชื่อที่อยู่ใน list มันจะงงเปล่าๆ = =’ เอาแค่นี้ก็แล้วกันครับ