2010-10-13 32 views
8

Vấn đề:Làm cách nào để xóa đường viền 3D trong IE8 bằng DOCTYPE XHTML?

alt text

Dưới đây là những gì tôi làm

body { 
    border: 0; 
} 

như đã được đề xuất ở đây: Removing border from WebBrowser control

Nhưng này chỉ hoạt động khi chúng ta sử dụng loại tài liệu sau đây:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

Khi DOCTYPE được thay đổi để

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> 

biên giới khó chịu sẽ không biến mất!

Nhưng tôi cần loại tài liệu XHTML để "vị trí: cố định" hoạt động trong IE.

Mọi đề xuất?


Mã:

HTML:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> 
<html> 
    <head> 
    <title>Borders, Go Away!</title> 
    <link href="styles.css" rel="stylesheet" type="text/css" /> 
    </head> 
    <body> 
    </body> 
</html> 

CSS:

body { 
    border: 0; 
} 

Trả lời

2

OK, có vẻ như không có cách nào để xóa đường viền khỏi CSS khi XHTML DOCTYPE được sử dụng trong IE.

tôi đã kết thúc việc thực hiện phương pháp GetHostInfo của giao diện IDocHostUIHandler của sự kiểm soát WebBrowser/thành phần trong ứng dụng máy tính để bàn của tôi, như ví dụ này trong Delphi minh họa: Frameless Web Browser

Và đây là một câu hỏi có liên quan ở đây trên StackOverflow: Remove border on activex ie control

+0

Đáng buồn là liên kết của bạn đã chết và bạn không đăng bất kỳ mã nào. Vì vậy, bạn giải quyết vấn đề cho bạn nhưng điều này không giúp đỡ người khác. Tôi đã đăng mã cho các nhà phát triển MFC trong một câu trả lời mới. – Elmue

0

Tôi nghĩ đó là do thừa kế, bạn nên sử dụng border:0 cho mỗi phần tử bạn muốn loại bỏ đường viền.

+0

Trong mã của tôi, tôi chỉ có phần tử nội dung và "border: 0" sẽ không hoạt động trên đó. – Vitaly

+0

phần thân không có lề mặc định, tôi không hiểu bạn muốn gì. – MatTheCat

+0

Đã tải lên hình ảnh minh họa sự cố. Đường viền không hiển thị, bạn có thể nói, nhưng nó thực sự không phù hợp khi bạn nhúng trình duyệt vào ứng dụng dành cho máy tính để bàn của mình. – Vitaly

0

border không được kế thừa, do đó, đặt nó ở phần thân theo ví dụ của bạn sẽ chỉ ảnh hưởng đến kiểu đường viền của chính phần tử body.

Nếu bạn muốn mọi thứ để mất biên giới của nó theo mặc định, bạn nên sử dụng * đó là ký tự đại diện CSS:

* { 
    border:0; 
} 

Tuy nhiên, chỉ có một vài yếu tố thực sự có biên giới theo mặc định (chủ yếu là tables, vv , nhưng cũng img nếu nó bên trong một a), do đó bạn có thể thích để liệt kê chỉ là những yếu tố specificially:

body, table, tr, td, img { 
    border:0; 
} 

đó là chi tiết có thể đọc được theo cách đó hơn * và có thể thực hành tốt hơn.

Hy vọng điều đó sẽ hữu ích.

+0

Nó chỉ là cơ thể mà tôi sau. Không thể xóa đường viền ngay cả từ đó. Chỉ cần thêm mã của tôi vào câu hỏi. – Vitaly

-1

Phương án thay thế: sử dụng nền cho bảng, một nền tảng khác cho ô sau đó di động.

<TABLE WIDTH="15" HEIGHT="15" BORDER="0" CELLPADDING="0" CELLSPACING="1" BGCOLOR="#000000" > 
    <TR VALIGN="MIDDLE" > 
     <TDALIGN="CENTER" BGCOLOR="#FFFFFF"> 
     hi 
     </TD> 
    </TR> 
</TABLE> 
+0

Câu hỏi không liên quan đến bảng trong html. Ngoài ra, nó được coi là kiểu xấu để sử dụng các bảng để tạo thành nội dung. Các bảng dành cho việc trình bày dữ liệu dạng bảng. – konqi

0

Trên IE 9 và IE 11 Tôi quan sát rằng đường viền 3D luôn ở đó nếu trang có <!DOCTYPE html>. Hoàn toàn không có cách nào để tắt nó đi bằng CSS. Tôi cố gắng này không thành công:

html { margin:0px; padding:0px; border:0px; } 
body { margin:0px; padding:10px; border:0px; } 

Chú ý: Vấn đề này chỉ xuất hiện nếu bạn nhúng trình duyệt Internet Explorer vào một dự án ++ C (CHtmlView). Nhưng nếu bạn mở cùng một trang web trong Internet Explorer được nhúng trong dự án .NET 4.0 (System.Windows.Forms.WebBrowser) đường viền 3D sẽ không xuất hiện. Và nếu bạn mở cùng một trang web trong Internet Explorer (iexplore.exe) thì đường viền 3D cũng sẽ không xuất hiện.

Nhưng tôi đã tìm thấy một giải pháp dễ dàng nếu bạn có IE trong dự án MFC. MFC đã thực hiện các IDocHostUIHandler đó là cần thiết cho điều đó.

Rút ra một lớp từ CHtmlView và ghi đè lên OnGetHostInfo():

Tiêu đề:

class CMyHtmlView : public CHtmlView 
{ 
protected: 
    virtual HRESULT OnGetHostInfo(DOCHOSTUIINFO *pInfo); 
}; 

Thực hiện:

HRESULT CMyHtmlView::OnGetHostInfo(DOCHOSTUIINFO *pInfo) 
{ 
    HRESULT hr = CHtmlView::OnGetHostInfo(pInfo); 
    pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER; 
    return hr; 
} 

và biên giới 3D ngu ngốc đã biến mất!

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