2011-02-07 37 views
13

Có thể jQuery sửa đổi CSS cho loại phương tiện cụ thể (ví dụ: in) không?jQuery có thể sửa đổi CSS cho một loại phương tiện cụ thể không?

Vấn đề cụ thể của tôi là tôi đang sử dụng ảnh động trên một phần tử và nó ghi đè bản định kiểu in, làm hỏng bố cục in của tôi. Mặc dù vấn đề của tôi hơi khác so với câu hỏi chung đặt ra, tôi nghĩ câu trả lời sẽ giúp tôi giải quyết vấn đề của mình. Bất kỳ cách giải quyết nào cũng có thể hữu ích. Nhiều nghĩa vụ.

Trả lời

6

Bạn không cần phải làm điều này với Javascript. Chỉ cần sử dụng quy tắc @media trong tài liệu css của bạn. Bạn có thể viết tất cả những thứ này chỉ trong một tệp css. Dưới đây là cụ thể W3C Documentation

@media screen { 

/* all your fancy screen css with a bunch of animation stuff*/ 

} 

@media print { 

/* all your fancy print css just plain */ 

} 

Bạn có thể viết các khai báo rất cụ thể và phù hợp với tất cả các yếu tố theo nhu cầu của mình. Btw được hỗ trợ xuống IE6. Hoạt động như một sự quyến rũ trong các dự án của chúng tôi.

@media print { 
    body { font-size: 10pt } 
} 

@media screen { 
    body { font-size: 13px } 
} 

@media screen, print { 
    body { line-height: 1.2 } 
} 
+3

Đừng nghĩ rằng điều này khá giải quyết vấn đề của tôi. Giả sử tôi thiết lập biểu định kiểu như bạn đã đề xuất. Giả sử tôi đã chỉ định độ rộng khác nhau cho in và màn hình. Sau khi trang hiển thị, tôi sử dụng jquery $ (div) .animate ({width: 100px} để thay đổi chiều rộng. Bây giờ khi tôi in trình duyệt, nó sẽ sử dụng chiều rộng "100px" mới thay vì chiều rộng in. –

+1

Đây là địa chỉ phù hợp cho vấn đề của bạn :) jQuery viết chiều rộng theo kiểu nội tuyến (… style = "width: 100px" ...). Inline Styles cao hơn trong specifity. Đây là lý do tại sao trình duyệt của bạn hoạt động với chiều rộng nội tuyến để in tài liệu của bạn. Bạn chỉ phải ghi đè (http://css-tricks.com/override-inline-styles-with-css/) chiều rộng kiểu nội dòng. Và trên thực tế, bạn nên đặt cho kiểu in của mình trong '@media print'. – gearsdigital

+0

Ngọt ngào, việc ghi đè nên thực hiện thủ thuật. Cảm ơn! –

4

Thêm một css cho đa phương tiện (in) với một quy tắc cụ thể mà giấu đi một yếu tố (ví dụ #div {display: none;})

Trong kịch bản của bạn, nếu đây:

$('#div').is(':visible') 

là đúng, sau đó bạn đang ở trên một phương tiện in (in).

+0

Cách tiếp cận thông minh. Suy nghĩ tốt, Julien. – Corey

+0

Tôi không nghĩ rằng điều này sẽ làm việc, ít nhất là không khi bạn có một trang được tải trên đó bạn nhấn nút in. Vấn đề là dom sẽ không được tải lại và vì vậy kiểm tra này không được thực hiện. Bạn có thể sử dụng 'window.matchMedia ('print')' và lắng nghe các thay đổi phương tiện nhưng không đáng tin cậy lắm. – Thomas

+0

Nó hoạt động (thử nghiệm) trên IE8 +, Chrome & FFox. BTW, nó không cần tải lại DOM vì nó là một phần mở rộng jQuery (là: pseudo có thể nhìn thấy) và Javascript thuần túy. –

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