2011-02-04 50 views
31

Tôi đang viết mẫu HTML e-mail và một số ứng dụng khách email không hỗ trợ <style> để chỉ định CSS. Cách thay thế duy nhất để áp dụng CSS là sử dụng kiểu nội tuyến (thuộc tính style). Có một công cụ hoặc thư viện (Node.JS) để áp dụng một biểu định kiểu cho một số HTML và lấy lại HTML với các kiểu được áp dụng không?"Biên dịch" CSS thành HTML dưới dạng kiểu nội tuyến

Công cụ không phải hỗ trợ nhiều bộ chọn; bộ chọn tên id, lớp và phần tử phải đủ cho nhu cầu của tôi.

Ví dụ về những gì cần thiết:

// stylesheet.css 
a { color: red; } 

// email.html 
<p>This is a <a href="http://example.com/">test</a></p> 

// Expected result 
<p>This is a <a href="http://example.com/" style="color: red;">test</a></p> 
+2

Chỉ cần viết một trình phân tích cú pháp HTML nhanh (sử dụng regex) và sau đó chỉ thay thế các số html với các nút html + thông tin kiểu. – Raynos

+16

@Raynos: Oh thôi nào, nó phức tạp hơn một chút. Viết một trình phân tích HTML từ đầu có thể không phải là ý tưởng hay nhất. –

+0

@Matti Nếu chương trình của anh ta liên kết với hội đồng Trident của Microsoft, nó không quá khó để phân tích cú pháp HTML. Ông vẫn muốn viết một wraex regex cho thư viện, mặc dù (cho mạnh mẽ). – ClosureCowboy

Trả lời

5

Đã làm một tìm kiếm google và thấy câu này:. http://inlinestyler.torchboxapps.com/

+0

Tuyệt vời! Có vẻ như những gì tôi cần. Tuy nhiên, nó có vẻ giống như một công cụ chỉ có web; Tôi sẽ liên hệ với tác giả và xem liệu tôi có thể nhận được phiên bản phía máy chủ hay không. – strager

+0

Có vẻ như có một API: http://inlinestyler.torchboxapps.com/styler/api/ –

+0

Có, nhưng như tôi đã nói, đó là trang web chỉ. Chúng tôi hy vọng sẽ tạo ra hàng nghìn chuyển đổi HTML/CSS hàng ngày, vì vậy đây không phải là một lựa chọn cho chúng tôi. – strager

3

Bạn có thể sử dụng jsdom + jquery để áp dụng $ ('a') css ({color: 'đỏ '});

+0

Yêu cầu ứng dụng email hỗ trợ javascript. Không phải là một, nhất định không may. – staticsan

+1

@staticsan: jsdom được dự định là máy chủ javascript, vì vậy tôi không nghĩ rằng hỗ trợ khách hàng qua email là một vấn đề. –

+0

@staticsan, OP đã đề cập đến Node.JS cụ thể. Great ý tưởng generalhenry. +1 –

0

Một giải pháp thay thế khác là quay lại vấn đề cơ bản. Nếu bạn muốn có một liên kết để có màu đỏ, thay vì

<a href="" style="color: red">my link</a> 

làm

<a href=""><font color="red">my link</font></a> 

Hầu như bất kỳ trình duyệt, bao gồm trình duyệt BlackBerry khủng khiếp có thể xử lý đó.

+1

Có, nhưng tôi vẫn cần xử lý tất cả các tài liệu HTML này để chuyển CSS "bình thường" thành sử dụng ''. – strager

15

Tôi nghĩ rằng juice là thứ bạn đang tìm kiếm.

Đơn giản chỉ cần yêu cầu nó, sau đó vượt qua nó html và css của bạn và để cho nó làm việc nặng nhọc cho bạn như thế này:

var juice = require('juice'); 
var inlinedcss = juice('<p>Test</p>', 'p { color: red; }'); 

Nó được xây dựng trên một số thư viện trưởng thành bao gồm mootools' slick, và hỗ trợ một phạm vi rộng của bộ chọn.

Bạn cũng có thể quan tâm node-email-templates, đây là trình bao bọc đẹp cho email động trong nút.

7

Dưới đây là các dự án javascript sống mà những gì bạn muốn:

  • juice. 1.7Mb với phụ thuộc.
  • juice2. 5.9Mb với phụ thuộc. Đây là một ngã ba của nước trái cây, dường như có nhiều lựa chọn hơn nước trái cây. Điều này không bỏ các truy vấn phương tiện truyền thông như nước trái cây. Sắp xếp các quy tắc css nội tuyến theo thứ tự abc.
  • styliner. 4.0Mb với phụ thuộc. Cái này sử dụng lời hứa thay thế. Có một vài lựa chọn khác với juice2. Có tùy chọn compact mà các tùy chọn khác không có để giảm thiểu html. Không đọc các tập tin html chính nó như những người khác làm. Đồng thời mở rộng marginpadding viết tắt. Và trong trường hợp bạn bằng cách nào đó sửa đổi các đối tượng bản địa của bạn (như nếu bạn đang sử dụng sugar), tôi không đề nghị sử dụng nó cho đến khi this issue được giải quyết.

Vậy nên sử dụng cái nào? Vâng nó phụ thuộc vào cách bạn viết CSS. Họ từng có sự hỗ trợ khác nhau cho các trường hợp cạnh. Kiểm tra tốt hơn và làm một số xét nghiệm để hiểu một cách hoàn hảo.

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