2010-10-13 14 views
8

El problema:¿Cómo eliminar el borde 3D en IE8 con DOCTYPE XHTML?

alt text

Aquí es lo que hago

body { 
    border: 0; 
} 

como fue sugerido aquí: Removing border from WebBrowser control

Pero esto sólo funciona cuando usamos el siguiente tipo de documento:

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

Cuando tipo de documento se cambia a

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

la frontera desagradable no va a desaparecer!

Pero necesito el doctype XHTML para que funcione "posición: fija" en IE.

¿Alguna sugerencia?


El código:

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

Respuesta

2

OK, parece que no hay forma de eliminar el borde de CSS cuando se usa XHTML DOCTYPE en IE.

que terminó la implementación de método GetHostInfo de la interfaz IDocHostUIHandler del control WebBrowser/componente en mi aplicación de escritorio, como este ejemplo en Delphi ilustra: Frameless Web Browser

Y aquí es otra cuestión relacionada aquí en StackOverflow: Remove border on activex ie control

+0

Lamentablemente, su enlace está muerto y no ha publicado ningún código. Entonces resolviste el problema, pero esto no ayuda a los demás. Publiqué un código para desarrolladores de MFC en una nueva respuesta. – Elmue

0

Creo que es debido a la herencia, se debe utilizar border:0 para cada elemento que desea eliminar fronteras.

+0

En mi código solo tengo el elemento del cuerpo y "border: 0" no funcionará en él. – Vitaly

+0

cuerpo no tiene margen predeterminado, no entiendo lo que quiere. – MatTheCat

+0

Subió una imagen que ilustra el problema. El límite no es tan visible, se podría decir, pero realmente no encaja cuando insertas el navegador en tu aplicación de escritorio. – Vitaly

0

border no se hereda, por lo que configurarlo en el cuerpo como se muestra en el ejemplo solo afectará al estilo de borde del elemento body.

Si desea todo a perder su frontera de forma predeterminada, se debe utilizar * que es el comodín CSS:

* { 
    border:0; 
} 

Sin embargo, sólo unos pocos elementos realmente tienen fronteras por defecto (principalmente tables, etc. , sino también img si es dentro de un a), por lo que prefieren a la lista sólo aquellos elementos de modo específico:

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

es más legible de esa manera que *, y probablemente sea una mejor práctica también.

Espero que ayude.

+0

Es solo el cuerpo que estoy buscando. No se puede eliminar el borde incluso de eso. Acabo de agregar mi código a la pregunta. – Vitaly

-1

Alternativa: utilice un fondo para la tabla, otro fondo para la celda y luego el espaciado de las celdas.

<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 pregunta no estaba relacionada con tablas en html. Además, se considera un mal estilo usar tablas para formatear el contenido. Las tablas son para la presentación de datos tabulares. – konqi

0

En IE 9 y 11 IE observo que la frontera 3D siempre está ahí si la página tiene una <!DOCTYPE html>. No hay forma de apagarlo con CSS. He intentado esto sin éxito:

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

Atención: Este problema sólo aparece si incrusta Internet Explorer en un proyecto de C++ (CHtmlView). Pero si abre la misma página web en un Internet Explorer incrustado en un proyecto .NET 4.0 (System.Windows.Forms.WebBrowser), el borde 3D no aparecerá. Y si abre la misma página web en Internet Explorer (iexplore.exe), el borde 3D tampoco aparecerá.

Pero encontré una solución fácil si tiene IE en un proyecto de MFC. MFC ya implementa el IDocHostUIHandler que se requiere para eso.

derivar una clase de CHtmlView y sobrescribir OnGetHostInfo():

Cabecera:

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

Implementación:

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

y la frontera 3D estúpida se ha ido!

Cuestiones relacionadas