Отрицательное поле относительно расположенного встроенного элемента иногда обрезает символы в IE7

У меня есть <a> элементов в двух разных контекстах на моей странице, некоторые из них находятся в div (назовите их .container > a), а некоторые — в дочерних div (например, .container > .section > a), и даже некоторые из них находятся в следующих потомках div ( например .container > ... > .section > а). В настоящее время я занимаюсь форматированием встроенных элементов <a> с помощью следующего CSS:

line-height:1.4;
position: relative;
left: 15px;
margin-left: -5px;

Поскольку в настоящее время я оформляю ссылки с помощью border-bottom: 1px dotted #333, необходимо, чтобы ссылки оставались встроенными элементами. Проблема в том, что иногда ссылки в .section ведут себя не так, как в .container. Последние отлично смотрятся как в FF 3.6, так и в IE7. Первые имеют первый символ или около того (независимо от того, что находится внутри суммы отрицательного поля), обрезанного в IE7 (я предполагаю, что это отрицательное поле).

Я думаю, что это может быть ошибка с hasLayout, поэтому я проверил статус трех случаев. Они следующие:

Случай 1) Для .container > a значение .container hasLayout истинно. (https://imgur.com/WJ3zM.png)
Случай 2) Для .container > .section > a, .section hasLayout — false, а .container hasLayout — true. (https://imgur.com/4NHxj.png)
Случай 3) Для .container > ... > .section > a, .section hasLayout — false, все промежуточные контейнеры (divs, li и ul), кроме одного, hasLayout — true, а .container hasLayout — true. (https://imgur.com/WefBk.png)

Первые два случая нормально выглядят в IE7, а третий случай имеет ошибку отрицательного поля. Что может быть причиной этого, и в таком ограниченном контексте?


person burningstar4    schedule 16.07.2010    source источник


Ответы (2)


Это может быть hasLayout. Вы пытались добавить макет в случае 3 к .container? (Извините, вы сказали, что у него уже есть макет, я имел в виду один из .section...)

Добавлено на основе моего комментария и эксперимента ниже:

Измените margin-left: -5px на text-indent: -5px в тегах a.

person ScottS    schedule 16.07.2010
comment
Для случая 2 я дал макет div .section (используя zoom: 1 на панели инструментов разработчика IE), и это действительно привело к появлению ошибки и в этом случае. Когда я дал макет .section в случае 3, это не решило проблему. - person burningstar4; 16.07.2010
comment
Ну, по крайней мере, это подтверждает, что hasLayout ваша проблема. Без кода мне было бы невозможно отлаживать. Я не уверен, почему вы делаете это именно так, но почему бы просто не установить left: 10px и не убрать -5px поля (если отрицательное поле вызывает ошибку)? - person ScottS; 16.07.2010
comment
Поле, поскольку оно влияет только на первую строку, используется для создания отступа второй строки ссылки, если она переносится. Я поработаю над тем, чтобы получить доступ к урезанному коду. - person burningstar4; 17.07.2010
comment
Не уверен, что это поможет, но вы можете попробовать использовать text-indent: -5px вместо margin для смещения первой строки текста. - person ScottS; 17.07.2010
comment
Вы можете увидеть код с ошибкой (работает в Firefox, а не в IE7) здесь: webdevout.net/test ?03В - person burningstar4; 17.07.2010
comment
Что ж, мой быстрый эксперимент показал, что изменение text-indent, о котором я упоминал в комментарии выше, сработало. - person ScottS; 17.07.2010
comment
Кажется, что Firefox ничего не делает для text-indent, может быть, потому, что <a> не является блочным элементом? Я всегда мог бы использовать какой-нибудь условный комментарий или что-то в этом роде, чтобы оба работали, спасибо! - person burningstar4; 17.07.2010

Установите z-index явно, чтобы переопределить братьев и сестер, или вам может потребоваться установить позицию в родительском элементе этого элемента с относительным позиционированием. IE неправильно применяет z-индекс 0 ко всем элементам. Это также может быть переполнение: скрыто.

Изображения не так хороши, как живые примеры.

person meder omuraliev    schedule 16.07.2010
comment
Я не уверен, что вы имеете в виду насчет z-индекса, не могли бы вы пояснить? Я попытался установить ‹code›position: относительный‹/code› в .section div, но безрезультатно. Я также пытался дать .section ‹code›overflow: visible‹/code›, но это тоже ничего не дало. Мне жаль, что изображения не идеальны, я посмотрю, что я могу сделать, на живом примере, но в этом случае это довольно сложно. › ... › в случае 3 на самом деле 2 div, затем ul и его дочерний li, а затем еще один div. - person burningstar4; 16.07.2010
comment
z-index:5;.. можешь сделать демо? - person meder omuraliev; 16.07.2010