2010-10-13 3 views
8

Das Problem:So entfernen Sie 3D-Rahmen in IE8 mit DOCTYPE XHTML?

alt text

Hier ist, was ich tun

body { 
    border: 0; 
} 

wie hier vorgeschlagen wurde: Removing border from WebBrowser control

Aber das funktioniert nur, wenn wir die folgenden Doctype verwenden:

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

Wenn Doctype wird

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

die böse Grenze wird nicht weggehen!

Aber ich brauche den XHTML-Doctype, damit "position: fixed" im IE funktioniert.

Irgendwelche Vorschläge?


Der Code:

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; 
} 

Antwort

2

OK, es scheint, dass es keine Möglichkeit gibt, den Rahmen von CSS zu entfernen, wenn XHTML DOCTYPE in IE verwendet wird.

endete ich GetHostInfo Methode der IDocHostUIHandler Schnittstelle der Web-Browsers Steuerung/Komponente in meiner Desktop-App Implementierung auf, wie dieses Beispiel in Delphi zeigt: Frameless Web Browser

Und hier ist ein andere damit zusammenhängende Frage hier auf Stackoverflow: Remove border on activex ie control

+0

Leider ist Ihr Link tot und Sie haben keinen Code gepostet. Also hast du das Problem für dich gelöst, aber das hilft anderen nicht. Ich habe Code für MFC-Entwickler in einer neuen Antwort veröffentlicht. – Elmue

0

Ich denke, es wegen ist auf Erbschaft, sollten Sie border:0 für jedes Element verwenden Sie entfernen möchten Grenzen.

+0

In meinem Code habe ich nur body-Element und "border: 0" wird nicht funktionieren. – Vitaly

+0

Körper hat keine Standard-Marge, ich verstehe nicht, was Sie wollen. – MatTheCat

+0

Ein Bild hochgeladen, das das Problem veranschaulicht. Der Rahmen ist nicht so sichtbar, könnte man sagen, aber er passt nicht wirklich, wenn Sie den Browser in Ihre Desktop-Anwendung einbetten. – Vitaly

0

border wird nicht vererbt. Wenn Sie also den Körper wie in Ihrem Beispiel festlegen, wirkt sich dies nur auf den Rahmenstil des Elements body selbst aus.

Wenn Sie alles wollen seine Grenze standardmäßig zu verlieren, sollten Sie * verwenden, die das CSS Wildcard ist:

* { 
    border:0; 
} 

jedoch nur wenige Elemente haben tatsächlich Grenzen standardmäßig (vor allem tables, etc , sondern auch img wenn es innerhalb eines a) ist, so können Sie specificially nur die Elemente zur Liste bevorzugen:

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

es ist mehr lesbar auf diese Weise als *, und wahrscheinlich auch besser zu üben.

Hoffe, dass hilft.

+0

Es ist nur der Körper, nach dem ich suche. Die Grenze kann nicht entfernt werden. Habe gerade meinen Code zu der Frage hinzugefügt. – Vitaly

-1

Alternative: Verwenden Sie einen Hintergrund für die Tabelle, einen weiteren Hintergrund für die Zelle dann cellspacing. 11

<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

Die Frage bezog sich nicht auf Tabellen in HTML. Darüber hinaus wird es als schlechter Stil angesehen, Tabellen zur Inhaltsformatierung zu verwenden. Tabellen dienen zur Darstellung von Tabellendaten. – konqi

0

Auf IE 9 und IE Ich beobachte, dass die 3D-Grenze ist immer da, wenn die Seite ein <!DOCTYPE html> hat. Es gibt absolut keine Möglichkeit, es mit CSS auszuschalten. Ich habe versucht, dies ohne Erfolg:

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

Achtung: Dieses Problem wird nur angezeigt, wenn Sie das Internet Explorer in ein C++ Projekt (CHtmlView) einbetten. Wenn Sie jedoch die gleiche Webseite in einem eingebetteten Internet Explorer in einem .NET 4.0-Projekt öffnen (System.Windows.Forms.WebBrowser), wird der 3D-Rahmen nicht angezeigt. Und wenn Sie dieselbe Webseite im Internet Explorer selbst öffnen (iexplore.exe), wird auch der 3D-Rahmen nicht angezeigt.

Aber ich fand eine einfache Lösung, wenn Sie den IE in einem MFC-Projekt haben. MFC implementiert bereits die IDocHostUIHandler, die dafür benötigt wird.

Leiten Sie eine Klasse von CHtmlView und überschreiben OnGetHostInfo():

Rubrik:

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

Umsetzung:

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

und die dumme 3D-Grenze ist weg!