#css #internet-explorer-9 #css-float
#css #internet-explorer-9 #css-float
Вопрос:
Я не могу изменить следующую разметку, поскольку она основана на пользовательском контенте. Проблема в том, что в IE9 маркеры в a, ul
которые находятся рядом с плавающим img
, отображаются не с той стороны изображения. Это проблема только в IE9. Способ ul
переноса изображения — желаемое поведение, которое я хотел бы сохранить, но это действительно затрудняет решение этой проблемы. Есть идеи о том, как решить это без изменения разметки и таким образом, чтобы это хорошо выглядело в разных браузерах?
Скрипка
http://jsfiddle.net/fdHN6 /
РЕДАКТИРОВАТЬ: я должен был упомянуть об этом, list-style-position: inside
что приводит к неправильному выравниванию последнего маркера, который содержит более одной строки текста, поэтому само по себе это не очень хорошее решение.
<html>
<body>
<div style="width:500px;">
<img src="http://placekitten.com/g/200/303" alt="smelly cat" />
<ul style="margin-left: 10px;">
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine!</li>
<li>Mine! Mine! Mine! Mine! Mine! Mine! Mine! Mine! Mine! Mine! Mine! Mine! Mine! Mine</li>
</ul>
</div>
</body>
</html>
body{
margin-left:35px;
}
img {
margin:20px;
float:left;
}
ul li {
list-style-type: disc;
}
Комментарии:
1. извините, я использую Linux (без ie9) вы имеете в виду, что ul находится в левой части изображения или что маркеры находятся над изображением, но текст с правой стороны от него. потому что, если вы имеете в виду, что маркированные точки находятся на изображении, вам просто нужно установить правильные поля и отступы для li и ul (это в каждом браузере по-разному)
2. @micha маркированные точки отображаются в левой части изображения, а текст — в правой.
Ответ №1:
list-style-position: inside;
должно решить вашу проблему.
ОБНОВЛЕНИЕ: Используя псевдоэлементы, вы можете добиться аналогичного эффекта, сохраняя текстовый отступ:
Комментарии:
1. Извините, вероятно, следовало упомянуть об этом, но с list-style-position: inside; текст последнего маркера смещается, поэтому в нем больше текста, чем в других маркерах, чтобы проиллюстрировать это.
2. Не самое лучшее решение, но вот что: http://jsfiddle.net/fdHN6/3 /
3. Это не работает в режиме совместимости, поэтому мне придется использовать условное обозначение, но это нормально. Спасибо, чувак.
4. Я не слишком доволен тем, что мне приходится размещать текст с точным значением для заполнения, но это все, что я смог придумать на данный момент. Я дам вам знать, если найду лучшее решение; хотя не уверен, когда столкнусь с этой же проблемой. Рад, что смог помочь!
Ответ №2:
У меня была такая же проблема, и мне удалось найти исправление.
У меня было изображение, размещенное слева, и UL с правой стороны. Я хотел, чтобы положение списка было снаружи, чтобы текст, занимающий несколько строк, хорошо выравнивался слева. Однако в IE9 маркеры перемещались влево, поверх изображения, а не плавали справа от изображения.
Итак, я использую list-style-position:inside; для UL, и я также добавил для него отрицательный текстовый отступ, -12px идеально подходит для меня, вам нужно будет изменить это, пока оно не будет соответствовать вашим потребностям.
Комментарии:
1. Если вы используете text-indent, отступ будет только в первой строке элемента списка. Из-за этого ваше решение не подходит для многострочных элементов списка. Смотрите CSS-Reference
Ответ №3:
Только что была такая же проблема. Я использовал
ul {
overflow: hidden;
list-style-position: inside;
text-indent: 1em;
margin-left: 0;
}
li {
padding-left: 1em;
}
скрытое переполнение создайте новый контекст форматирования и принудительно «очистите» поле с плавающей точкой. Таким образом, маркер «уважает» плавающее изображение.
http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/
Кажется, работает нормально.
Ответ №4:
Сделайте отображение ul в виде таблицы.
ul{display:table;}