2010-11-21 33 views
8

Ok, vì vậy tôi đang làm việc trên mẫu thử nghiệm giao diện người dùng của mình trước khi tôi bắt đầu mã hóa webapp. Tôi nhận được thiết kế chủ yếu được thực hiện trong khi làm việc trong Firefox và (tất nhiên) khi tôi thử nghiệm nó trong IE, đã có rất nhiều vấn đề dựng hình. Một trong những vấn đề đó là nếu tôi có một div chứa một số văn bản và một div khác được thiết lập để nổi: phải, div lồng nhau đó xuất hiện trên dòng tiếp theo, bên dưới div cha của nó. Đây là đánh dấu vấn đề trong dạng đơn giản nhất ...Float: div bên phải xuất hiện trên dòng tiếp theo trong IE chỉ

<div style="background-color:red;"> 
    Text 
    <div style="background-color:yellow; float:right;">Right</div> 
</div> 

tôi scoured internet cho các giải pháp và giải pháp duy nhất làm việc có liên quan tôi thấy rằng làm công việc này trong IE là đặt div nổi vào đầu của nó cha mẹ như thế này ...

<div style="background-color:red;"> 
    <div style="background-color:yellow; float:right;">Right</div> 
    Text 
</div> 

Trong thực tế, div lồng nhau có lớp và CSS của tôi đang thả nổi lớp đó. Nhưng điều gì sẽ xảy ra nếu tôi cuối cùng tạo một biểu định kiểu khác để nhắm mục tiêu thiết bị di động và tôi không còn muốn div bên trong đó được thả nổi nữa? Sau đó, bản thân nội dung sẽ không theo thứ tự trong HTML, chỉ vì mục đích chứa một vấn đề CSS trong IE. Có cách nào tốt hơn để giải quyết vấn đề này không?

+0

Bạn đang sử dụng loại tài liệu? – Rob

+0

Tôi thực hiện, spaaarky21

+0

@ lấp lánh, là bạn thanh toán bù trừ các phao nổi một khi bạn đã làm xong, rõ ràng: trái hoặc rõ ràng: cả hai. nhiều hơn tôi có thêm một gợi ý tại sao bạn có văn bản và một div khác bên trong một div, thats không phải như thế nào divs được mã hóa. – kobe

Trả lời

18

Một đồng nghiệp của tôi gần đây đã có một vấn đề rất giống nhau. Tôi khuyên bạn chỉ nên sử dụng định vị chứ không phải là thả nổi. Tôi tin rằng bạn có thể thực hiện tương tự tại đây:

<div style="background-color:red; position:relative;"> 
    Text 
    <div style="background-color:yellow; position:absolute; right:0; top:0;">Right</div> 
</div> 

Tôi không biết bạn có yêu cầu sử dụng phao nổi hay không. Sử dụng phương pháp định vị sẽ làm cho phần tử vị trí không chiếm không gian trong luồng thông thường, nhưng nếu không giữ đúng thứ tự nguồn và hoàn thành trực quan những gì tôi nghĩ bạn muốn làm.

+0

Thật đơn giản đó là thiên tài! Mặc dù tôi sẽ thêm thông báo rằng định vị tuyệt đối tương đối với tổ tiên đầu tiên với định vị không tĩnh (mặc định.) Trong ứng dụng của tôi, div ngoài không ở đầu trang vì vậy khi tôi áp dụng định vị tuyệt đối cho div bên trong , nó thực sự chuyển đến phía trên cùng bên phải của trang. Vì vậy, để có được xung quanh đó, tôi đã thêm vị trí tương đối cho phụ huynh mà không chỉ định trái hoặc trên. Nó hoạt động hoàn hảo trong IE, FF và Safari. Cảm ơn bạn rất nhiều! – spaaarky21

+0

Đợi đã, tôi có thể đã nói quá sớm. Không giống như thả nổi div, định vị nó hoàn toàn cho phép nó chồng chéo lên các con khác của container. – spaaarky21

+0

Bạn có thể khắc phục vấn đề mới bằng cách điều chỉnh chỉ mục z. Bất kỳ cơ hội nào bạn có thể đăng một mẫu mã hoàn chỉnh hơn? –

1

Tôi không chắc chắn nếu nó là một khả năng cho bạn, nhưng đặt văn bản trong div bên ngoài trong một div của riêng nó dường như giải quyết vấn đề

<div style="background-color:red;"> 
    <div style="float: left;">Text</div> 
    <div style="background-color:yellow; float:right;">Right</div> 
</div> 
+0

Cảm ơn bạn đã đề xuất. Tôi đã thử điều đó nhưng nó gây ra cho tôi hai vấn đề. Đầu tiên, div bên ngoài thực sự được tô màu trong ứng dụng của tôi. Nó sẽ là một thanh điều hướng nguyên thủy và nếu tôi nổi cả hai con của nó, div bên ngoài sẽ sụp đổ xuống độ cao 0px. Tôi có thể thiết lập chiều cao nhưng vấn đề "gói nổi" này đang xảy ra ở những nơi khác, nơi các nội dung bọc và tôi không thể thiết lập một chiều cao. Vấn đề thứ hai là cũng có một biểu tượng từ một div khác được lưu hành ở bên trái. Theo cách của nó, logo đó thay thế "Văn bản" nhưng nếu tôi nổi nó còn lại, chúng chồng lên nhau. – spaaarky21

+0

@spaarky, nếu nó là vấn đề gói, bạn có thể sử dụng một trong các thuộc tính tràn của – kobe

+0

@gov Tôi không đặc biệt quen thuộc với CSS nên xin lỗi nếu tôi thiếu một cái gì đó nhưng sẽ không tràn chỉ thay đổi hành vi khi tràn xảy ra? Những gì tôi muốn làm là ngăn chặn tràn đó ở nơi đầu tiên và có div con đó không bọc trong IE. – spaaarky21

3

Đặt một giá trị chiều rộng trên div bên trong của bạn và làm cho nó hiển thị: inline-block. Div là các phần tử khối có độ rộng 100% của bố mẹ, đó là lý do tại sao IE đặt nó trên dòng tiếp theo.

+0

Không may mắn trong IE 8 với

Right
. – spaaarky21

+0

Điều này thực sự đã giúp tôi. Bí quyết là xác định chiều rộng cho tất cả các phần tử lưu hành. Đó là tẻ nhạt, nhưng hey, những gì bạn mong đợi từ IE? – rgin

1

Tôi vừa mới gặp sự cố này trong IE7 - trong trường hợp của tôi, mục sẽ xóa dấu phẩy sẽ có chiều rộng đầy đủ. Tôi chỉ đặt nó là "float: none; clear: left" và nó có vẻ hoạt động.

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