Как удалить 3D-границу в IE8 с DOCTYPE XHTML? - PullRequest
8 голосов
/ 13 октября 2010

Проблема:

alt text

Вот что я делаю

body {
    border: 0;
}

, как было предложено здесь: Удаление границы из элемента управления WebBrowser

Но это работает только тогда, когда мы используем следующий тип документа:

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

Когда тип документа изменяется на

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

грязная границане уйдет!

Но мне нужен doctype XHTML для того, чтобы "position: fixed" работал в IE.

Есть предложения?


Theкод:

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

Ответы [ 5 ]

2 голосов
/ 14 октября 2010

ОК, кажется, нет способа удалить границу из CSS, когда в IE используется XHTML DOCTYPE.

В итоге я реализовал метод GetHostInfo интерфейса IDocHostUIHandler элемента управления / компонента WebBrowser на моем рабочем столе.app, как показано в этом примере в Delphi: Безрамочный веб-браузер

А вот еще один связанный с этим вопрос здесь, в StackOverflow: Удаление границы для activex, т.е. управление

0 голосов
/ 05 августа 2017

В IE 9 и IE 11 я наблюдаю, что 3D-граница всегда присутствует, если на странице есть <!DOCTYPE html>.Нет абсолютно никакого способа отключить это с помощью CSS.Я попробовал это безуспешно:

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

Внимание: Эта проблема появляется, только если вы встраиваете Internet Explorer в проект C ++ (CHtmlView).Но если вы откроете ту же веб-страницу во встроенном Internet Explorer в проекте .NET 4.0 (System.Windows.Forms.WebBrowser), 3D-граница не появится.И если вы откроете ту же веб-страницу в самом Internet Explorer (iexplore.exe), 3D-граница также не появится.

Но я нашел простое решение, если у вас есть IE в проекте MFC.MFC уже реализует IDocHostUIHandler, который необходим для этого.

Извлечение класса из CHtmlView и перезапись OnGetHostInfo():

Заголовок:

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

Реализация:

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

и тупая трехмерная граница исчезла!

0 голосов
/ 31 июля 2012

Альтернатива: использовать фон для таблицы, другой фон для ячейки, а затем пространство для ячейки.

<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 голосов
/ 13 октября 2010

border не наследуется, поэтому установка его в теле в соответствии с вашим примером будет влиять только на стиль границы самого элемента body.

Если вы хотите, чтобы все потеряло свою границу по умолчанию, вы должны использовать *, который является подстановочным знаком CSS:

* {
    border:0;
}

Однако только несколько элементов по умолчанию имеют границы по умолчанию (в основном tables и т. Д., Но также и img, если он находится внутри a), поэтому вы можете указать только эти элементы конкретно:

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

Это более читабельно, чем *, и, вероятно, лучше практиковаться.

Надеюсь, это поможет.

0 голосов
/ 13 октября 2010

Я думаю, что это связано с наследованием, вы должны использовать border:0 для каждого элемента, который вы хотите удалить границы.

...