2011-11-08 18 views

Trả lời

73

IE8 và cũ hơn có lỗi trong trình phân tích cú pháp của chúng cho thuộc tính src. Vì vậy, nếu bạn bao gồm nhiều hơn 1 định dạng phông chữ trong SRC, IE không tải được và báo cáo lỗi 404.
Dấu chấm hỏi giải quyết vấn đề khi nó đánh IE vào phần còn lại của chuỗi (src khác) là chuỗi truy vấn và do đó chỉ tải tệp EOT ...
Các trình duyệt khác sẽ tuân theo đặc điểm và chỉ tải cần phông chữ kiểu ...
Bạn có thể muốn đọc Paul Irish của Bulletproof @font-face syntax để biết thêm về một số khác của lý do tại sao là ...

+3

điều này không trả lời cho thẻ băm bổ sung (? #). có một linh cảm về nó trong liên kết câu hỏi ban đầu, nhưng nó mơ hồ. – commonpike

+0

Nó không mơ hồ chút nào: Trong một số trường hợp hiếm hoi, IE sẽ thất bại vì khai báo phông chữ @ có quá nhiều ký tự. Điều này có thể được giải quyết trong hầu hết các trường hợp bằng cách thêm dấu băm ‘#’ sau dấu hỏi ‘?’. Điều này mua cho bạn một chút thêm phòng ... Nó chỉ mơ hồ lý do tại sao nó mua thêm phòng. – DrCord

+0

Lưu ý rằng đôi khi phông chữ .eot sẽ không hoạt động trong IE8 ngay cả khi sửa lỗi này (mặc dù phông chữ sẽ hoạt động trong IE9 +). Hãy thử sử dụng một ttf khác để chuyển đổi eot nếu bạn có vấn đề này. – cakan

2

các ?#iefix đang có mặt để ngăn chặn các trình duyệt giải thích bất kỳ ký tự sau khi ? như là một chuỗi truy vấn và do đó ngăn chặn một lỗi máy chủ có thể xảy ra.

17

Bạn có thể làm bất cứ điều gì thay vì ?#iefix: Mục tiêu cơ bản là đặt ?#something sau tệp phông chữ đầu tiên trong URL như @Rexyz đã trả lời.

@font-face { 
font-family: 'MyWebFont'; 
src: url('webfont.eot'); /* IE9 Compat Modes */ 
src: url('webfont.eot?#FooAnything') format('embedded-opentype'), /* IE6-IE8 */ 
    url('webfont.woff') format('woff'), /* Modern Browsers */ 
    url('webfont.ttf') format('truetype'), /* Safari, Android, iOS */ 
    url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */ 
} 
+0

Có phải phông chữ '.otf' dành cho Safari, Android, iOS không? – e9t

Các vấn đề liên quan