Thursday, 19. February 2009, 15:19:28
Mặc dù Pearl đã hitle bạn IE rồi. Nhưng một sự thật phủ phàng không chỉ Pearl mà cả thế giới net (đặc biệt là web dev) phải chấp nhận là IE vẫn còn quá phổ biến

. Do vậy mà dù sao đi nữa thì vẫn phải tìm cách bưng bít cho cái blog nó nên hồn 1 tí

. Và quả thật thì hầu hết các skin của Pearl đều hoạt động ổn trên IE. Chỉ còn một lỗi be bé mà Pearl phải bận tâm là lúc post các ảnh to hơn chiều rộng entry thì nó bị xén "overflow" đi (IE nó không hiểu mấy vụ min/max lắm). Nhưng mà cũng không bận tâm nhiều lắm vì Pearl có dùng IE lướt web bao h mà cái lỗi nó bé như que tăm ấy nhỉ


Nhân dịp lần này làm cái skin “Ai Bơ”, để “sáng tạo” hơn em Vista lần trước Pearl đã lôi cả cái footer lên chung sidebar chơi. Nhưng để duy trì cho cái sự chuyển đổi đó thì Pearl phải tìm hiểu cách fix lỗi min-height cho IE mà đã lỡ fix min-height rồi thì fix luôn max-width cho mấy cái ảnh nhỉ

. Mà cái vụ fix này cũng có khá nhiều cách nhá. Người thì cứ dùng CSS đơn thuần, người dùng filters, nhưng mà xem kỹ thì dùng expression vẫn là giống nhất

Expression là một thuộc tính CSS giúp thực hiện một vài tính toán Javascript đơn giản trong CSS. Và chỉ được hỗ trợ trên IE (hình như 5+) (Microsoft khoái tự đặt quy tắc của mình hơn là làm theo quy tắc của người khác nhỉ

). Ví dụ đoạn code sau sẽ định min-width là 500px cho thành phần #wrap
#wrap{width:expression(this.width < 500 ? "500px" : auto)}
Có thể diễn dịch đoạn code trên là nếu chiều rộng thành phần này nhỏ hơn 500px thì đưa nó về 500px, nếu không thì cho tự do.
#wrap{width:expression(this.width > 1000 ? "1000px" : this.width)}
Đoạn code trên sẽ quy định lại chiều rộng thành phần #wrap về 1000px nếu nó vượt quá 1000px, nếu không phải thì cứ dùng chiều rộng hiện có.
Chúng ta cũng có thể viết ngắn gọn như sau
#wrap{width:expression(this.width > 1000 ? "1000px" : this.width < 500 ? "500px" : this.width)}
Một cách tương tự chúng ta cũng có thể quy định min-height và max-height cho #wrap lần lượt là 800px và 2000px
#wrap{height:expression(this.scrollHeight < 800 ? "800px" : this.scrollHeight > 2000 ? "2000px" : this.scrollHeight)}
Do các trình duyệt khác không hiểu expression nên chúng ta có thể dùng chung nó và các thuộc tính CSS chuẩn bình thường. Tuy nhiên, khi duyệt các trang web có sử dụng thuộc tính này IE sẽ hiện một thông báo yêu cầu bạn cho phép chạy ActiveX. Và một phiền phức khác khi Pearl áp dụng expression để giải quyết vấn đề của mình là lần đầu truy cập thường kích thước ảnh trong các entry hiển thị thậm chí rất bé nhưng chỉ cần enter một lần nữa thì nó sẽ làm việc đúng thôi

(một lần nữa cho thấy sự tồi tệ của IE, đề nghị Microsoft sử dụng chuẩn web dùng cái).

Ngoài dùng expression thì còn một cách thường được dùng là
#wrap{
min-width:500px;
width:auto !important;
width:500px
}
=> Các trình duyệt Non-IE sẽ nhận 2 thuộc tính min-width:500px và width:auto !important. Riêng IE sẽ định width:500px và nếu width thực tế của #wrap lớn hơn 500px thì cho auto.
Tuy nhiên như các bạn thấy thì do đặc thù của cách này thì nó chỉ dùng để fix min-width/height thôi. Và lưu ý đừng dùng thêm thuộc tính overflow:hidden cho trường hợp này vì nó sẽ ẩn đi cái phần dôi ra do diện auto đấy

Tình hình là có khá nhiều người đang “tra vấn” Pearl về cái phiên bản Advanced của Simple CSS. Nhưng tiếc là do sự cố kỹ thuật + cá nhân mà Pearl vẫn chưa hoàn thành được. Hi vọng sẽ sớm hoàn tất và lúc đó Pearl sẽ có câu trả lời với mọi người. Còn bây h thì lâu lâu Pearl sẽ cố chèn vào một entry CSS để giảm nhiệt
Lưu ý: Riêng My Opera không hỗ trợ thuộc tính này nên nếu ai muốn dùng thì phải soạn trên một file CSS ngoại và nhúng vào CSS chính thông qua thuộc tính @import.