2010-12-10 30 views
20

Tôi cần văn bản trong một div cần được bảo quản và bọc. Cho đến nay tôi đang có một thời gian khó khăn để đưa ra một giải pháp. Giải pháp tốt nhất mà tôi có thể tìm thấy không hoạt động với tất cả các trình duyệt.Trình bao bọc từ tương thích và khoảng trắng: trước?

Các công trình sau đây trong Chrome và IE6 +, nhưng trong Firefox văn bản không được gói.

white-space: pre; 
word-wrap: break-word; 

Tôi đã tìm thấy rằng vì bất kỳ lý do nào văn bản không được bao bọc trong Firefox với khoảng trắng: trước. Và -moz-pre-wrap không hoạt động trong Firefox 3.5 (tại sao ??), chỉ được bọc trước. NHƯNG khi tôi thêm trước khi bọc vào danh sách, IE 6 và 7 không hoạt động. Rất bực bội.

Mã:

.introsub { 
    position: relative; 
    top: 30px; 
    left: 25px; 
    width: 550px; 
    font-weight: normal; 
    line-height: 1.5em; 
    overflow: auto; 
    margin: 0; 
    padding: 1.5em; 
    white-space: pre; 
    word-wrap: break-word; 
} 
+0

Văn bản không tự động được bao bọc theo mặc định? Bạn có thể chỉ cho tôi một số mã mẫu không? – PeeHaa

+0

Tôi nghĩ rằng nó sẽ được, nhưng nó không phải. .introsub { vị trí: tương đối; hàng đầu: 30px; bên trái: 25px; chiều rộng: 550px; font-weight: normal; chiều cao dòng: 1,5em; tràn: tự động; lề: 0; padding: 1.5em; khoảng trắng: trước; từ bọc: ngắt lời; } – Logan

+0

Chế độ xem vấn đề trên codeplex có vẻ như đang gặp phải vấn đề này. – SoonDead

Trả lời

25

Các thuộc tính CSS3 không phải lúc nào làm việc như chúng tôi muốn họ làm việc :). Tuy nhiên, tôi không thấy điểm nào trong việc trộn white-space:preword-wrap:break-word.

Trước đây sẽ không bao gồm văn bản trừ khi gặp phải thẻ <br />. Điều thứ hai sẽ làm ngược lại: phá vỡ các từ bất cứ khi nào nó cần thiết, ngay cả ở giữa một từ. Họ dường như là mâu thuẫn, và câu trả lời rõ ràng nhất cho lý do tại sao các trình duyệt khác nhau phản ứng khác nhau với các đặc tính này là

  • họ hỗ trợ một trong hai thuộc tính
  • vì chúng là mâu thuẫn, các ưu tiên là undefined hoặc khác nhau trong mỗi trình duyệt

(Tôi không thể chắc chắn, tôi không thực sự là chuyên gia ở đây).

Tôi khuyên bạn nên xem xét kỹ hơn thisthis và sau đó quyết định những gì nên được sử dụng trong trường hợp cụ thể của bạn.

[EDIT]

Bạn có thể muốn thử loại này (nên làm việc trong tất cả các trình duyệt):

white-space: -moz-pre-wrap; /* Firefox */ 
white-space: -pre-wrap; /* ancient Opera */ 
white-space: -o-pre-wrap; /* newer Opera */ 
white-space: pre-wrap; /* Chrome; W3C standard */ 
word-wrap: break-word; /* IE */ 

tôi đã không kiểm tra này, nhưng tôi tin rằng nó sẽ làm các trick cho bạn.

+0

Giải pháp của bạn cho tất cả các trình duyệt từ bọc là gì? Tôi đã thử nhiều kết hợp khác nhau, nhưng đây là lần duy nhất tôi tìm thấy sẽ làm việc với hầu hết các trình duyệt (ngoại trừ Firefox). Nhưng tôi cũng cần Firefox để làm việc. Nếu tôi không có word-wrap: break-word, thì IE6 & 7 sẽ không hoạt động. Nhưng tôi không thể sử dụng pre-wrap, mà làm việc trong Firefox 3.5 b/c nó cũng không hoạt động trong IE6 hoặc 7. – Logan

+0

Kiểm tra chỉnh sửa :) – mingos

+0

Thật không may, tôi đã thử điều này là tốt, nhưng nó không hoạt động trong IE6 hoặc IE7. Thực sự, tôi sẽ chỉ được hạnh phúc nếu nó làm việc trong hai AND firefox (các trình duyệt khác không phải là quan trọng), nhưng cho đến nay tôi đã tìm thấy không có giải pháp. : [ – Logan

14

Tôi biết đây là một vấn đề rất cũ, nhưng kể từ khi tôi vừa chạy vào nó tôi cảm thấy sự thôi thúc để trả lời.

Giải pháp của tôi sẽ là:

Sử dụng white-space: pre-wrap;, vì nó là gần giống như white-space: pre; chỉ cần thêm dấu ngắt hàng. (Tham khảo: http://www.quirksmode.org/css/whitespace.html)

Sau đó, tôi đặc biệt sẽ nhắm mục tiêu cũ tức là với một trong hai ý kiến ​​có điều kiện (tài liệu tham khảo: http://www.quirksmode.org/css/condcom.html) hoặc với hacks css trình duyệt cụ thể (http://paulirish.com/2009/browser-specific-css-hacks/).

Một ví dụ cho phương pháp thứ hai:

.introsub { 
    position: relative; 
    top: 30px; 
    left: 25px; 
    width: 550px; 
    font-weight: normal; 
    line-height: 1.5em; 
    overflow: auto; 
    margin: 0; 
    padding: 1.5em; 
    white-space: pre-wrap; 
    word-wrap: break-word; 
} 

/* IE6 and below */ 
* html .introsub { white-space: pre } 

/* IE7 */ 
*:first-child+html .introsub { white-space: pre } 

Đây sẽ là đủ để buộc nó để quấn.

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