2010-10-13 16 views
8

Il problema:Come rimuovere il bordo 3D in IE8 con DOCTYPE XHTML?

alt text

Ecco quello che faccio

body { 
    border: 0; 
} 

come suggerito qui: Removing border from WebBrowser control

Ma questo funziona solo quando usiamo il seguente DOCTYPE:

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

Quando DOCTYPE viene modificato in

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

confine brutto non andrà via!

Ma ho bisogno del doctype XHTML perché "position: fixed" funzioni in IE.

Qualche suggerimento?


Il codice:

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

risposta

2

OK, sembra che non sia possibile rimuovere il bordo dai CSS quando XHTML DOCTYPE viene utilizzato in IE.

ho finito per l'implementazione del metodo GetHostInfo dell'interfaccia IDocHostUIHandler del controllo WebBrowser/componente nel mio desktop app, come questo esempio a Delfi illustra: Frameless Web Browser

E qui è un'altra questione correlata qui su StackOverflow: Remove border on activex ie control

+0

Purtroppo il tuo link è morto e non hai inserito alcun codice. Quindi hai risolto il problema per te ma questo non aiuta gli altri. Ho pubblicato il codice per gli sviluppatori MFC in una nuova risposta. – Elmue

0

Penso che sia a causa di eredità, è consigliabile utilizzare border:0 per ogni elemento che si desidera rimuovere frontiere.

+0

Nel mio codice ho solo body element e "border: 0" non funzionerà su di esso. – Vitaly

+0

il corpo non ha il margine predefinito, non capisco cosa vuoi. – MatTheCat

+0

Carica un'immagine che illustra il problema. Il bordo non è così visibile, si potrebbe dire, ma in realtà non si adatta quando si incorpora il browser nell'applicazione desktop. – Vitaly

0

border non è ereditato, quindi impostandolo sul corpo come nell'esempio avrà effetto solo sullo stile del bordo dell'elemento body stesso.

Se volete tutto a perdere la sua frontiera per impostazione predefinita, è necessario utilizzare * che è il jolly CSS:

* { 
    border:0; 
} 

Tuttavia, solo pochi elementi in realtà hanno di default margini (principalmente tables, ecc , ma anche img se è all'interno di una a), quindi si può scegliere di elencare solo quegli elementi specificially:

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

E 'più leggibile in questo modo rispetto allo * e probabilmente anche alle migliori pratiche.

Spero che questo aiuti.

+0

È solo il corpo che cerco. Impossibile rimuovere il bordo anche da quello. Ho appena aggiunto il mio codice alla domanda. – Vitaly

-1

Alternativa: utilizzare uno sfondo per la tabella, un altro sfondo per la cella e quindi cella.

<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

La domanda non era correlata alle tabelle in html. Inoltre, è considerato di cattivo stile utilizzare le tabelle per la formattazione del contenuto. Le tabelle servono per la presentazione di dati tabulari. – konqi

0

su IE 9 e IE 11 osservo che il confine 3D è sempre lì, se la pagina ha un <!DOCTYPE html>. Non è assolutamente possibile disattivarlo con i CSS. Ho provato questo senza successo:

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

Attenzione: Questo problema appare solo se si incorpora Internet Explorer in un progetto C++ (CHtmlView). Ma se si apre la stessa pagina Web in un Internet Explorer incorporato in un progetto .NET 4.0 (System.Windows.Forms.WebBrowser) il bordo 3D non verrà visualizzato. E se si apre la stessa pagina Web nello stesso Internet Explorer (iexplore.exe) anche il bordo 3D non verrà visualizzato.

Ma ho trovato una soluzione semplice se si dispone di IE in un progetto MFC. MFC implementa già il IDocHostUIHandler che è necessario per quello.

derivare una classe CHtmlView e sovrascrivere OnGetHostInfo():

Intestazione:

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

Implementazione:

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

e il confine 3D stupido è andato!

Problemi correlati