предисловие
Однажды ко мне неожиданно подошел руководитель и сказал, что в будущем мы можем решить проблемы с совместимостью для некоторых старых систем. Я тоже невинно спросил: «Сколько ему лет?» «О, оно не слишком старое, просто используйтеjsp
Грамматика написана, она может быть только совместимаIE7
Да, теперь, чтобы быть совместимымIE8
,IE9
и браузеры, такие как Firefox, Google"
jsp
?IE7
? ?IE8
? ? ?IE9
? ? ? ? Проблемы совместимости? ? ? ? ? Тогда я пойду?
Невозможно ходить, но я хочу услышать, что когда он будет совместим с браузером IE, большинство фронтенд-разработчиков будут улыбаться на поверхности, а MMP в их сердцах.
Затем руководитель прислал мне несколько документов Word, в которых есть некоторые проблемы с совместимостью и решения, но они очень запутаны, дайте мне разобраться. вызов! Тогда организуйте это и успокойтесь.Это также редкая возможность войти в контакт с ранней разработкой системы.
Закончив расстановку, руководитель вернулся с новой информацией, сказав, что нам не нужно заниматься обработкой совместимости, пока мы организуем этот документ и сделаем демонстрационное руководство по решению проблемы совместимости, то есть пока как есть проблема, это хорошо, чтобы обеспечить техническую поддержку. Хахаха, повороты и повороты, очень счастлив!
мне не нужно даватьjsp
Старая система совместима с браузером IE, ха-ха, надеюсь, вам не придется это делать!
Ниже представлена собранная информация:
1. Разберитесь с браузером
Основные браузерыИх пять: IE (ядро Trident), Firefox (Firefox: ядро Gecko), Safari (Apple: ядро webkit), Google Chrome (Google: ядро Blink), Opera (Opera: ядро Blink)
Четыре ядра: Trident (ядро IE), Gecko (ядро Firefox), ядро webkit, Blink (ядро Chrome)
Во-вторых, понять проблемы совместимости
Продвижение стандартов W3C, появление Firefox, Chrome, Safari и Opera положили конец дням, когда IE доминировал в мире.
Однако это и хорошо, и плохо для разработчиков. Это хорошо, потому что для того, чтобы завоевать большую долю рынка, производители браузеров сделают каждый браузер более совместимым со стандартом W3C и получат лучшую совместимость, а функции расширения разных браузеров (такие как-moz
,-webkit
style в начале), что также является толчком к стандарту W3C; это плохо, потому что одновременно существует несколько браузеров, и эти браузеры иногда ведут себя по-разному при работе с одной и той же страницей. Эта разница может быть небольшой и даже незаметной, а может быть настолько большой, что невозможно нормально просматривать страницы в определенном браузере. Мы называем проблемы, вызывающие эти различия, общим названием «проблемы совместимости браузеров». Именно эти «проблемы совместимости с браузерами» фактически добавляют много трудностей в нашу разработку.
1. В чем проблема совместимости?
отвечать:Один и тот же код, эффект отображения страницы в разных браузерах разный
2. Каковы причины различия?
отвечать:Браузеры Браузеры используют разные ядра, и они по-разному думают об одном и том же.
3. Почему у браузеров возникают проблемы с совместимостью?
- Тот же браузер, чем старше версия, тем больше
bug
Чем больше, тем меньше поддержка новых атрибутов, тегов и новых функций по сравнению с браузерами более новых версий. - Разные браузеры имеют разные базовые технологии (ядра), разные стандарты и разные методы реализации, и конечный эффект будет разным перед публикой.
- Дизайнеры пишут нестандартный код, что сделает несовместимость более заметной..
С точки зрения ядра браузера проблемы совместимости браузера можно разделить на следующие три категории:
- Связанные с рендерингом: истильСвязанная проблема, то есть проблема, отраженная в эффекте макета.
- Связанный сценарий: исценарийСвязанные проблемы, включая JavaScript и DOM, проблемы со спецификациями. Для некоторых функций браузера он также попадает в эту категорию.
- Другие категории: функциональные проблемы, отличные от двух указанных выше типов проблем, как правило, представляют собой функции, предоставляемые самим браузером над уровнем ядра.
Нерегулярное вложение:
<div>
<li>新闻标题一</li>
<li>新闻标题一</li>
<li>新闻标题一</li>
</div>
div
непосредственно вложенный вli
элементы некачественные,li
должен быть вil
Внутри. такие проблемы тоже бываютp
вложенный вdiv
,table
и другие элементы.
Нестандартный интерфейс DOM и настройки свойств:
document.all.a_name.style.top = 35;
в приведенном выше кодеtop
的值,其实应该是一个字符串值,需有单位。 Например:35px
.
Короче говоря, человеческие причины также составляют большую часть. Причины антропогенных проблем совместимости, помимо небрежности, в основном связаны с наличием ошибок браузера и непониманием стандартов разработчиками.
Например, если вы хотите создать функцию, она будет заключаться в том, чтобы наводить указатель мыши наimg
Над элементом может появиться подсказка.Люди, которые часто разрабатывают для IE, могут использоватьimg
элементаль"alt"
атрибут, но не указан в других браузерах"alt"
атрибут лица. Поскольку свойство, указанное в стандарте W3C для этого,"title"
, большинство браузеров соответствует стандарту, IE нет, это проблема ядра браузера IE, разработчик не знает"title"
, Проблема разработчика - писать код, не соответствующий стандарту.
Итак, проблема делится на две половины, и ответственность несет и браузер, и разработчик. Поскольку все они несут ответственность, все они обязаны решать проблемы совместимости. Что ж, с точки зрения браузера, его производитель должен исправитьbug
и некачественный, когда когда-нибудь IE"alt"
Его нельзя использовать для подсказок. Кто-нибудь еще использует этот неправильный атрибут для отображения подсказок? С точки зрения разработчика, если вы знаете больше о стандартах и проблемах совместимости браузеров, вы можете эффективно избежать проблем совместимости в процессе разработки и сделать ваши страницы беспрепятственными во всех браузерах.
3. Идеи для решения проблем совместимости
1. Вы хотите это сделать?
(1) С точки зрения продукта: аудитория продукта, доля браузеров аудитории, приоритет эффекта или приоритет базовой функции.
(2) С точки зрения стоимости: нет необходимости делать это совместимым.
2. В какой степени?
A: Какие браузеры поддерживают какие эффекты.
3. Как это сделать?
(1) Выберите техническую структуру/библиотеку (например,jquery 1.x.x
).
(2) Выберите совместимые инструменты в соответствии с требованиями совместимости:html5shiv
,Respond.js
,CSS Reset
,normalize.css
,Modernizr.js
,postcss
.
(3) Условные комментарии,CSS Hack
,js
Обнаружение возможностей делает некоторые изменения.Hack
:CSS
середина,Hack
означает совместимыйCSS
Трюки для корректного отображения в разных браузерах, пропатченыbug
МетодыFilter
: Указывает значение фильтра, который представляет собой метод отображения или скрытия правил или объявлений для определенного браузера или группы браузеров. По сути,Filter
Даhack
один из методов.
4. Прогрессивное улучшение и плавная деградация
(1)прогрессивное улучшение: создавайте страницы для браузеров с более низкими версиями, чтобы обеспечить самые основные функции, а затем улучшайте и добавляйте такие функции, как эффекты и взаимодействия для продвинутых браузеров, чтобы улучшить взаимодействие с пользователем.
(2)изящная деградация: Создайте полную функциональность с самого начала, а затем сделайте ее совместимой со старыми браузерами.
4. Совместимость с JavaScript
1,addEventListener
а такжеattachEvent
разница
attachEvent
- Совместимо: IE7, IE8; несовместимо с firefox, chrome, IE9, IE10, IE11, сафари, оперой.addEventListener
- Совместимость с: firefox, chrome, IE, safari, opera; не совместима с IE7, IE8
решение:
function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) { // W3C标准
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent) { // IE
var r = elm.attachEvent('on' + evType, fn); // IE5+
return r;
} else {
elm['on' + evType] = fn; // DOM事件
}
}
2,document.formName.item("itemName")
вопрос
Описание проблемы: В IE вы можете использоватьdocument.formName.item("itemName")
илиdocument.formName.elements ["elementName"]
; под Firefox используйте толькоdocument.formName.elements["elementName"]
.
Решение: унифицированное использованиеdocument.formName.elements["elementName"]
.
3. Проблема объекта класса коллекции
Описание проблемы: В IE вы можете использовать()
или[]
Получите объект класса коллекции; в Firefox вы можете использовать только[ ]
Получите объект класса коллекции.
Решение: унифицированное использование[]
Получите объект класса коллекции.
4. Проблема с пользовательскими атрибутами
Описание проблемы: Под IE можно использовать метод получения общих атрибутов для получения пользовательских атрибутов, а можно использоватьgetAttribute()
Получите пользовательские свойства; в Firefox вы можете использовать толькоgetAttribute()
Получить пользовательские свойства.
Решение: единый пропускgetAttribute()
Получить пользовательские свойства.
5.eval("idName")
вопрос
Описание проблемы: В IE вы можете использоватьeval("idName")
илиgetElementById("idName")
получитьid
дляidName
HTML-объект; в Firefox используйте толькоgetElementById("idName")
получитьid
дляidName
HTML-объект.
Решение: унифицированное использованиеgetElementById("idName")
получитьid
дляidName
HTML-объект.
6. Проблема в том, что имя переменной совпадает с идентификатором объекта HTML.
Описание проблемы: в IE идентификатор HTML-объекта можно использовать какdocument
В Firefox вы можете использовать то же имя переменной, что и идентификатор объекта HTML, но не в IE.
Решение: использоватьdocument.getElementById("idName")
заменятьdocument.idName
. Лучше не брать имя переменной с одним и тем же идентификатором HTML-объекта, чтобы уменьшить количество ошибок; при объявлении переменных всегда добавляйтеvar
ключевые слова, чтобы избежать двусмысленности.
7.const
вопрос
Описание проблемы: В Firefox вы можете использоватьconst
ключевое слово илиvar
Ключевые слова для определения констант; в IE используйте толькоvar
ключевое слово для определения констант.
Решение: унифицированное использованиеvar
ключевое слово для определения констант.
8,input.type
проблема собственности
Описание проблемы: под IEinput.type
Свойство доступно только для чтения, однако в Firefoxinput.type
Свойство доступно для чтения и записи.
Решение: не изменятьinput.type
Атрибуты. Если вам нужно изменить его, вы можете сначала скрыть оригиналinput
, а затем вставьте новыйinput
элемент.
9,window.event
вопрос
Описание проблемы:window.event
Он может работать только в IE, но не в Firefox, потому что Firefoxevent
Можно использовать только на месте происшествия.
Решение: добавьте функцию, в которой происходит событиеevent
параметры в теле функции (при условии, что параметрevt
)использоватьvar myEvent = evt?evt:(window.event? window.event:null)
Пример:
<input type="button" onclick="doSomething(event)"/>
<script language="javascript">
function doSomething(evt) {
var myEvent = evt ? evt :(window.event ? window.event : null);
…
}
</script>
10.event.x
а такжеevent.y
вопрос
Описание проблемы: В IE,event
объект имеетx
,y
свойства, но нетpageX
,pageY
свойства; в Firefox,event
объект имеетpageX
,pageY
свойства, но нетx
,y
Атрибуты.
решение:var myX = event.x ? event.x : event.pageX; var myY = event.y ? event.y:event.pageY;
Если вы рассматриваете вопрос 8, используйте вместо негоmyEvent
заменятьevent
Вот и все.
11.event.srcElement
вопрос
Описание проблемы: В IE,event
объект имеетsrcElement
свойства, но нетtarget
свойства; в Firefox,event
объект имеетtarget
свойства, но нетsrcElement
Атрибуты.
Решение: использоватьsrcObj = event.srcElement ? event.srcElement : event.target;
Если вы рассматриваете вопрос 8, используйте вместо негоmyEvent
заменятьevent
Вот и все.
12.window.location.href
вопрос
Описание проблемы: В IE или Firefox2.0.x вы можете использоватьwindow.location
илиwindow.location.href
;В Firefox 1.5.x используйте толькоwindow.location
.
Решение: использоватьwindow.location
заменитьwindow.location.href
. Конечно, вы также можете рассмотреть возможность использованияlocation.replace()
метод.
13. Проблемы с модальными и немодальными окнами
Описание проблемы: Под IE можно пройтиshowModalDialog
а такжеshowModelessDialog
Открывает модальные и немодальные окна; не в Firefox.
Решение: использовать напрямуюwindow.open(pageURL,name,parameters)
способ открыть новое окно.
Если вам нужно передать параметры из дочернего окна обратно в родительское окно, вы можете использовать в дочернем окнеwindow.opener
для доступа к родительскому окну. Если вам нужно родительское окно для управления дочерним окном, используйтеvar subWindow = window.open(pageURL,name,parameters);
чтобы получить недавно открытый объект окна.
14.frame
а такжеiframe
вопрос
со следующимframe
Например:
(1) Доступframe
объект
ИИ: использоватьwindow.frameId
илиwindow.frameName
посетить этоframe
объект;
Фаерфокс: использоватьwindow.frameName
посетить этоframe
объект;
Решение: унифицированное использованиеwindow.document.getElementById("frameId")
посетить этоframe
объект;
(2) Переключательframe
содержание
Работает как в IE, так и в Firefoxwindow.document.getElementById("frameId").src = "webjx.com.html"
илиwindow.frameName.location = "webjx.com.html"
переключитьframe
Содержание;
При необходимостиframe
Параметры передаются обратно в родительское окно, которое можно найти вframe
используется вparent
ключевое слово для доступа к родительскому окну.
15. Метод делегирования событий
Описание проблемы: В IE используйтеdocument.body.onload = inject;
, вfunction inject()
Это было реализовано раньше; в Firefox используйтеdocument.body.onload = inject();
Решение: унифицированное использованиеdocument.body.onload=new Function("inject()");
илиdocument.body.onload = function(){}
[Уведомление]Function
а такжеfunction
разница
16. ИспользованиеsetAttribute
установить событие
var obj = document.getElementById("objId");
obj.setAttribute("onclick", "funcitonname()");
Поддержка FireFox, IE не поддерживает.
Решение: В IE вы должны использовать точечную нотацию для ссылки на требуемый обработчик событий и назначить его анонимной функции следующим образом:
var obj = document.getElementById("objId");
obj.onclic k= function(){ fucntionname(); };
Этот метод поддерживается всеми браузерами
17. Разница между доступом к родительским элементам
Описание проблемы: В IE используйтеobj.parentElement
илиobj.parentNode
доступobj
Родительский узел ; в FireFox используйтеobj.parentNode
доступobj
родительский узел.
Решение: Поскольку и FireFox, и IE поддерживают модель DOM, используйте ее единообразно.obj.parentNode
посетитьobj
родительский узел.
18.innerText
Эта проблема.
Описание проблемы:innerText
отлично работает в IE, ноinnerText
Не в Фаерфоксе.
Решение: использовать в браузерах, отличных от IEtextContent
заменятьinnerText
.
Пример:
if (navigator.appName.indexOf("Explorer") > -1) {
document.getElementById("element").innerText = "my text";
} else {
document.getElementById("element").textContent = "my text";
}
[Примечание]innerHTML
В то же время он поддерживается такими браузерами, как IE и FireFox.Другие, такие какouterHTML
Поддерживается только IE, лучше не использовать.
19.Table
Операционные проблемы
Описание проблемы: IE, FireFox и другие браузеры неtable
Работа тегов отличается, в IE не разрешеноtable
а такжеtr
изinnerHTML
Назначение, используйте js, чтобы добавить одинtr
когда используешьappendChild
метод тоже не работает.document.appendChild
FireFox поддерживает вставку строк в таблицы, IE — нет.
Решение: вставьте строку вtbody
, не вставляйте непосредственно в таблицу Обходной путь:
// 向table追加一个空行:
var row = otable.insertRow(-1);
var cell = document.createElement("td");
cell.innerHTML = "";
cell.className = "XXXX";
row.appendChild(cell);
[Примечание] Для работы рекомендуется использовать набор фреймов JS.table
, например JQuery.
20. Проблема назначения ширины и высоты объекта
Описание проблемы: Аналогично FireFox.obj.style.height = imgObj.height
заявление недействительно.
Решение: унифицированное использованиеobj.style.height = imgObj.height + "px";
двадцать один,setAttribute("style", "color: red;")
Поддержка FireFox (кроме IE, который сейчас поддерживается всеми браузерами), IE не поддерживает
Решение: нетsetAttribute("style", "color : red;")
и использоватьobject.style.cssText = "color: red;"
(Есть исключения из этого написания)
Лучший способ - использовать все вышеперечисленные методы, надежные
22. Настройки имени классаsetAttribute("class", "styleClass")
Поддержка FireFox, IE не поддерживает (указанное имя свойстваclass
, IE не будет устанавливатьclass
свойство, вместо этого просто используйтеsetAttribute
IE автоматически распознаетclassname
Атрибуты)
решение:setAttribute("class", "styleClass")
setAttribute("className", "styleClass")
или напрямуюobject.className= "styleClass";
Поддержка IE и FFobject.className
.
23. Создайте радиокнопки
// IE以外的浏览器
var rdo = document.createElement("input");
rdo.setAttribute("type", "radio");
rdo.setAttribute("name", "radiobtn");
rdo.setAttribute("value", "checked");
// IE
var rdo = document.createElement("<input name="radiobtn" type="radio" value="checked" />");
решение:
Это отличие отличается от предыдущих. На этот раз все совсем по-другому, поэтому я не могу найти общего решения для ее решения, тогда толькоIF-ELSE
охватывать
К счастью, IE можно идентифицироватьdocument
изuniqueID
атрибут, который не распознается другими браузерами. задача решена.
5. CSS-совместимость
1,CSS Hack
использоватьhacker
Браузеры можно разделить на 3 категории: IE6, IE7 и Safari, остальные (IE8, Chrome, Safari, Opera и т.
(1) Известно IE6hacker
подчеркивание_
и звездочка*
(2) IE7 и Aoyou знают друг другаhacker
это звездочка*
Такие как:height:300px;*height:200px;_height:100px;
(1) Браузер IE6 читаетheight:300px
когда считается пора300px
Читайте дальше, он тоже знает*heihgt
, поэтому, когда IE6 читает*height:200px
Когда конфликтующие настройки предыдущего элемента перезаписываются, высота считается200px
.
Читайте дальше, IE6 тоже знает_height
, поэтому он снова перезаписывает200px
высокая настройка, установите высоту на100px
.
(2) IE7 и роуминг одинаковы с высоты300px
Настройки читайте ниже. когда они читают*height:200px
остановились, когда они не знали друг друга_height
.
Таким образом, они разрешат высоту как200px
, остальные браузеры распознают только первыйheight:300px
;
Таким образом, они будут анализировать высоту как300px
. Порядок записи очень важен, потому что последний атрибут, установленный с таким же приоритетом и конфликтующий, перезапишет предыдущий.
2. Стили CSS совместимы с разными браузерами
Общие для всех браузеров:height: 100px;
Только для IE6:_height: 100px;
или*height: 100px;
Только для IE7:*+height: 100px;
Совместно с IE7 и FF:height: 100px !important;
Следующие два метода могут решить почти всю совместимость сегодня:
(1)!important
С парой IE7!important
служба поддержки,!important
Метод теперь совместим только с IE6 (обратите внимание на способ написания, помните, что позицию объявления нужно продвигать)
.box {
width: 100px !important; /* IE7+FF */
width: 80px; /* IE6 */
}
(2) IE6/IE77 в FireFox *+html
а также*html
- это тег, специфичный для IE, который в настоящее время не поддерживается FireFox. а также*+html
Это также специальный тег IE7.
.box { width: 120px; } /* FireFox */
*html .box { width: 80px;} /* ie6 fixed */
*+html .box { width: 60px;} /* ie7 fixed, 注意顺序 */
3. Универсальныйfloat
Закрытие (очень важно) может использоваться для решения несколькихdiv
Неправильный интервал при выравнивании
Добавьте следующий кодGlobal CSS
, для тех, что нужно закрытьdiv
плюсclass="clearfix"
Вот и все, проверено.
Код:
<style>
/* Clear Fix */
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {
display: inline-block;
}
/* Hide from IE Mac \*/
.clearfix {
display:block;
}
/* End hide from IE Mac */
/* end of clearfix */
</style>
4. Другие навыки совместимости
- Firefox дает
div
настраиватьpadding
вызоветwidth
а такжеheight
увеличивается, а IE нет (доступно!important
решить) - Проблема с центрированием:
- вертикальный центр
line-height
установить на текущийdiv
той же высоты, затем пройтиvetical-align: middle
(Будьте осторожны, чтобы не обернуть содержимое) - Центрировать по горизонтали:
margin: 0 auto;
(конечно не все)
- вертикальный центр
- Если вам нужно дать
a
Содержимое тега плюс стиль необходимо установитьdisplay: block;
(обычно во вкладках навигации) - Различия в понимании BOX в Firefox и IE приводят к различиям
2px
Также установлен наfloat
изdiv
под т.е.margin
Удвоение и др. -
ul
Ярлыки по умолчанию ниже FFlist-style
а такжеpadding
Лучше объявить об этом заранее, чтобы избежать ненужных хлопот (обычно во вкладках навигации и списках контента). - как внешний
wrapper
изdiv
Не устанавливайте мертвую высоту, лучше добавьтеoverflow: hidden
быть высоко адаптивным
5. Совместимый код: Совместим с наиболее рекомендуемым режимом.
/* FF */
.submitbutton {
float: left;
width: 40px;
height: 57px;
margin-top: 24px;
margin-right: 12px;
}
/* IE6 */
*html .submitbutton {
margin-top: 21px;
}
/* IE7 */
*+html .submitbutton {
margin-top: 21px;
}
6. СовместимостьCSS
метод
Способ сделать совместимую страницу таков: каждый раз, когда мы пишем небольшой фрагмент кода (строку или блок в макете), мы должны проверять, совместим ли он в разных браузерах.Конечно, это не так хлопотно определенную степень.
Рекомендуется для начинающих пользователей, которые часто встречаются с проблемами совместимости. Многие проблемы совместимости вызваны различными браузерами, интерпретирующими атрибуты по умолчанию тегов. Эти проблемы совместимости могут быть легко решены, если мы устанавливаем немного.
Если мы знакомы со свойствами тегов по умолчанию, мы можем понять, почему возникают проблемы совместимости и как их решить.
6. Другая совместимость с CSS
1. Вкладки по умолчанию в разных браузерахmargin
а такжеpadding
разные
Описание проблемы: Написать несколько тегов по желанию, не добавляя управление стилями, соответствующиеmargin
а такжеpadding
большие разные.
решение:CSS: *{margin: 0;padding:0;}
2. Теги атрибутов блокировкиfloat
Позже происходят массовыеmargin
случай, в отображении IE6margin
больше, чем набор
Описание проблемы: общий симптом заключается в том, что последний блок в IE6 перемещается на следующую строку (float
макет для наиболее распространенных проблем совместимости браузера)
Решение: вfloat
добавлено в элемент управления стилем меткиdisplay:inline;
Преобразуйте его во встроенный атрибут
Примечание. Чаще всего используетсяdiv+CSS
выкладывается, иdiv
Это типичный тег свойств блока, который мы обычно используем в альбомной ориентации.div float
Реализовано, если интервал по горизонтали задан с помощьюmargin
Реализация, это проблема совместимости, с которой неизбежно придется столкнуться.
3. Этикетки меньшей высоты (обычно менее10px
)вопрос
Описание проблемы: Высота этой метки в IE6, 7 и роуминге не контролируется и превышает высоту, установленную вами
Решение: установить метки, которые превышают высотуoverflow:hidden;
Или установить высоту строкиline-height
меньше установленной высоты.
Примечание. Такая ситуация обычно возникает в этикетке, где мы устанавливаем фон из небольших закругленных углов. Причина этой проблемы в том, что браузеры до IE8 давали метке минимальную высоту строки по умолчанию. Даже если ваша метка пуста, высота метки все равно будет соответствовать высоте строки по умолчанию.
4. Метка встроенного атрибута, установкаdisplay:block
принят позжеfloat
компоновка и безудержноеmargin
В случае интервала IE6bug
Описание проблемы: коэффициент интервала в IE6 превышает установленный интервал
Решение: вdisplay:block;
присоединиться позжеdisplay:inline;display:table;
Примечание. Теги встроенных атрибутов, чтобы установить ширину и высоту, нам нужно установитьdisplay:block;
(Кромеinput
теги специальные).
С использованиемfloat
расположение и иметь горизонтальноеmargin
После этого под IE6 у него есть атрибут блокаfloat
Боковой пейзажmargin
изbug
.
Однако, поскольку он сам по себе является встроенным тегом атрибута, мы добавляемdisplay:inline
Если это так, его высота и ширина не могут быть установлены.
В это время нам также необходимоdisplay:inline
присоединиться позжеdisplay:talbe
.
5. Картинки имеют интервал по умолчанию
Описание проблемы: несколькоimg
Когда теги объединены, некоторые браузеры будут использовать интервал по умолчанию, и добавление подстановочных знаков, упомянутых в вопросе 1, не будет работать.
Решение: использоватьfloat
собственностьimg
макет
Примечание: потому чтоimg
Метка является встроенной меткой атрибута, поэтому, если она не превышает ширину контейнера,img
теги будут располагаться в одну строку, но некоторые браузерыimg
Между метками будет пробел. Чтобы удалить этот интервал, используйтеfloat
это правильный путь.
6. Настройка минимальной высоты этикеткиmin-height
не совместимы
Описание проблемы: Потому чтоmin-height
сам по себе несовместимCSS
свойство, поэтому установитеmin-height
плохо совместим с различными браузерами
Решение: Если мы хотим установить минимальную высоту метки200px
, необходимо выполнить следующие настройки:
{
min-height: 200px;
height: auto !important;
height: 200px;
overflow:visible;
}
Примечания: Когда внешний интерфейс системы B/S открыт, во многих случаях у нас есть это требование. Когда содержимое меньше значения (например,300px
)Время. Высота контейнера составляет300px
; Когда высота содержимого больше этого значения, вместо полос прокрутки растягивается высота контейнера. В это время мы столкнемся с этой проблемой совместимости.
7. Проблемы с центрированием в макете CSS
Описание проблемы: Сначала определите в родительском элементеtext-align: center;
Это означает, что содержимое родительского элемента располагается по центру; для IE этого параметра достаточно. Но это не может быть сосредоточено в Mozilla.
Решение: добавьте его при настройке определения дочернего элементаmargin-right: auto; margin-left: auto;
8. Двойное расстояние, создаваемое плавающим IE
#box {
float: left;
width: 100px;
margin: 0 0 0 100px; // 这种情况之下IE会产生200px的距离
display: inline; // 使浮动忽略
}
Позвольте мне уточнить здесьblock
,inline
два элементаBlock
Характеристики элемента: он всегда начинается с новой строки, и можно контролировать высоту, ширину, высоту строки и поля (блочный элемент).Inline
Характеристики элемента: на одной линии с другими элементами, неуправляемый (встроенные элементы)
#box {
display: block; // 可以为内嵌元素模拟为块元素
display: inline; // 实现同一行排列的的效果
diplay: table;
}
9, IE и проблемы с шириной и высотой
IE его не распознаетmin-
это определение, но на самом деле оно ставит нормальноеwidth
а такжеheight
считается имеющимmin
ситуация для использования.
Это большая проблема.Если вы используете только ширину и высоту, эти два значения не изменятся в обычных браузерах.Если вы используете только ширину и высотуmin-width
а такжеmin-height
Если это так, IE эквивалентен тому, что вообще не устанавливает ширину и высоту.
Например, для установки фонового изображения ширина важнее.
Решение: Чтобы решить эту проблему, вы можете сделать это:
#box {
width: 80px;
height: 35px;
}
html>body #box {
width: auto;
height: auto;
min-width: 80px;
min-height: 35px;
}
10. Минимальная ширина страницы
min-width
это очень удобноCSS
команда, она может указать, что размер элемента не меньше определенной ширины, чтобы компоновка всегда была правильной.
Но IE этого не распознает и фактически помещаетwidth
Используйте его как минимальную ширину.
Чтобы эта команда работала и в IE, вы можете поместить<div>
помещать<body>
вкладка, затем дляdiv
укажите класс, затемCSS
Дизайн такой:
#containe r{
min-width: 600px;
width: e-xpression(document.body.clientWidth < 600? "600px": "auto");
}
Первыйmin-width
это нормально;
но строка 2width
использовалJavaScript
, это распознается только IE, что также сделает вашHTML
Документация не формальная. на самом деле проходитJavaScript
для достижения минимальной ширины.
11. Очистить поплавок
.box {
display: table;
// 将对象作为块元素级的表格显示
}
// 或者
.box {
clear: both;
}
или присоединиться:after
(псевдообъект), устанавливает, что происходит после объекта, обычно иcontent
При совместном использовании IE не поддерживает этот псевдообъект,
Поддержка браузера, отличного от IE, поэтому это не влияет на браузер IE/WIN.
……#box:after {
content: “.”;
display: block;
height: 0;
clear: both;
visibility: hidden;
}
12.DIV
Генерация плавающего текста IE3px
изbug
Объект слева является плавающим, правая сторона располагается по левому краю внешнего патча, а текст в объекте справа будет отделен от левого.3px
Подача.
#box {
float: left;
width: 800px;
}
#left {
float: left;
width: 50%;
}
#right {
width: 50%;
}
*html #left {
margin-right: -3px; // 这句是关键
}
13. Проблема IE в прятки
когдаdiv
Когда приложение сложное, в каждом столбце есть несколько ссылок,div
В это время легко возникает проблема пряток.
Некоторый контент не может быть отображен. Когда мышь выбирает эту область, обнаруживается, что контент действительно находится на странице.
Решение: да#layout
использоватьline-height
атрибутировать или дать#layout
Используйте фиксированную высоту и ширину. Структура страницы должна быть максимально простой.
14. Рост не подходит
Несовместимость по высоте заключается в том, что при изменении высоты объекта внутреннего слоя высота внешнего слоя не может регулироваться автоматически, особенно когда объект внутреннего слоя используетmargin
илиpadding
Время. пример:
<div id=”box”>
<p>p对象中的内容</p>
</div>
CSS
:
#box {
background-color: #eee;
}
#box p {
margin-top: 20px;
margin-bottom: 20px;
text-align: center;
}
Решение: вp
Добавляйте объекты вверх и вниз2
пустойdiv
объектCSS
Код:.1{ height: 0px; overflow: hidden; }
или дляDIV
плюсborder
Атрибуты.
15.cursor
проблема собственности
cursor: hand;
VS cursor: pointer;
Описание проблемы: FireFox не поддерживаетhand
, но IE поддерживаетpointer
.
Решение: унифицированное использованиеpointer
.
16. Анализ блочной модели противоречив.
- правильно
border
Разбор несовместим, например:box.style { width: 100px; border: 1px; }
; IE понимает это какbox.width = 100px;
; Firefox интерпретирует это какbox.width = 100 + 1*2 = 102px; // 加上边框2px
решение:div { margin: 30px !important; margin: 28px; }
Обратите внимание на эти дваmargin
Порядок не должен быть обратным, IE не может распознать!important
Этот атрибут распознается другими браузерами. Так что на самом деле это интерпретируется как это в IE:div{ maring: 30px; margin: 28px; }
Быть выполненным в последнем повторном определении, он не может просто написатьmargin: XXpx !important;
- Интерпретация блочной модели IE5 и IE6 противоречива. В IE5
div{ width: 300px; margin: 0 10px 0 10px; }
вdiv
Ширина интерпретируется как300px-10px(右填充)-10px(左填充)
, наконецdiv
ширина280px
, тогда как в IE6 и других браузерах ширина равна300px+10px(右填充)+10px(左填充)=320px
вычислять.
Решение: внесите следующие измененияdiv { width: 300px !important; width /**/: 340px; margin: 0 10px 0 10px; }
17.ul
а такжеol
Проблема с отступом в списке
ликвидироватьul
,ol
Когда список имеет отступ, стиль должен быть записан как:list-style: none; margin: 0px; padding: 0px;
Проверил, что в IE установилmargin: 0px;
Вы можете удалить верхний, нижний, левый и правый отступы, пробелы и номера или точки списка.padding
не влияет на стили;
В Firefox установитеmargin: 0px;
Можно только убрать верхние и нижние болванки, установитьpadding: 0px;
После этого можно убрать только левый и правый отступы, также необходимо установитьlist- style: none;
чтобы удалить номера списка или точки. То есть в IE просто установилmargin: 0px;
для достижения конечного эффекта, в то время как в Firefox вы должны установить обаmargin: 0px;
,padding: 0px;
так же какlist-style: none;
Три для достижения конечного эффекта.
17. Почему нельзя определить1px
левый и правый контейнеры высоты
Эта проблема под IE6 заключается в том, что строка по умолчанию вызвана; есть много навыков:
Например:overflow: hidden;
zoom: 0.08
line-height: 1px;
18. Ссылка (a
метка) граница и фон
a
Ссылка с рамкой и цветом фона, необходимо установитьdisplay: block;
установить в то же времяfloat: left;
Гарантированно не завернуть. Ссылаться наmenubar
, Датьa
а такжеmenubar
Высота задается во избежание смещения нижнего края, если не заданаheight
, допустимыйmenubar
Вставьте пробел.
19. После доступа к гиперссылкеhover
Проблема стиля не возникает
Описание проблемы: стиль гиперссылки, по которой вы щелкнули и посетили, больше не имеетhover
а такжеactive
охватывать
Решение состоит в том, чтобы изменить порядок свойств CSS: L-V-H-A ;<style type="text/css"> <!-- a:link {} a:visited {} a:hover {} a:active {} --> </style>