Css li меню динамической ширины строки в IE6

У меня есть такое меню css:

<ul>
  <li><a>Item1</a></li>
  <li><a>Item Two</a></li>
  <li><a>Item C</a></li>
  <li><a>A Rather Long Menu Item Down Here</a></li>
</ul>

Я хочу создать это:

|-----------------------------------|
| Item1                             |
|-----------------------------------|
| Item Two                          |
|-----------------------------------|
| Item C                            |
|-----------------------------------|
| A Rather Long Menu Item Down Here |
|-----------------------------------|

но я получаю это:

 -------- 
| Item1 |
|----------- 
| Item Two |
|-----------
| Item C |
|----------------------------------- 
| A Rather Long Menu Item Down Here |
 ----------------------------------- 

Если я установлю теги [li] или [a] для display: block, они растянутся, чтобы заполнить максимально возможную ширину. Я хочу, чтобы все они имели одинаковую ширину, которая определяется динамически по самому широкому элементу, а не путем ручной установки ширины в теге [ul].

Да, и цель - IE6. :)

Обновлять:

width:1px, overflow:visible не работал. (Получился тот же эффект сжатия, что и без дисплея: заблокированные якоря.)

Это для интрасети, где IE6 является целью, поэтому я застрял там. (В других проектах я перестал об этом беспокоиться.) JS - это требование, так что, возможно, я воспользуюсь этим. (Хотя я всегда ненавижу это делать.)

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
4 621
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Ваш единственный вариант - javascript.

Кстати, один из моих сайтов посещает большое количество домашних пользователей. Мы видели, что IE6 сокращает до 12% нашего трафика. Два месяца назад было 20%. При этом общий трафик IE остается на уровне 76%.

Я хочу сказать, что вам, вероятно, больше не стоит слишком беспокоиться о причудах IE6.

Я бы не советовал использовать JS для решения этой проблемы, хотя это, конечно, вариант. Существуют гораздо более простые решения только на CSS. И я боюсь, что время, когда можно перестать беспокоиться о причудах IE6, еще не настало; 12% посетителей - это слишком много, чтобы игнорировать!

Ola Tuvesson 19.11.2008 05:10

@ola: Рентабельность инвестиций на то время, чтобы выяснить, как исправить действительно незначительную причуду отображения для 12% (и падающих) ваших пользователей, чрезвычайно низка. Гораздо лучше потратить время на добавление функций или исправление более серьезных проблем.

NotMe 21.11.2008 01:52

Прошло почти два года, и использование IE6 упало до 2,71% - когда оно упадет ниже 1%, возможно, мы наконец сможем двигаться дальше ...

Ola Tuvesson 14.08.2011 04:48

@Ola Tuvesson: У нас он упал до 1,74%. ;) Итого: IE 64% (большинство из которых на 8 и 9), Firefox 13%, Safari 13% и Chrome 7,5%. Охватывает около 60 000 домашних пользователей.

NotMe 15.08.2011 23:01

Определенное количество взломов, чтобы заставить его работать в IE6, потому что width: auto никогда не работал должным образом.

Я видел некоторые решения этой проблемы с использованием width: 1px; overflow: visible;, который может сработать в этом случае, но лучше всего сделать это в условном комментарии, чтобы не загромождать "настоящие" браузеры, или использовать хакерский хакер или что-то подобное. Имейте в виду, что IE 6, вероятно, будет обрабатывать это иначе в режиме совместимости и в стандартном режиме, поэтому знайте свой тип документа.

Кстати, ваши якорные теги будут помещены в виде блоков, поэтому вы получите цели мыши с одинаковой шириной.

Чтобы сжать Ли внутри ул с чистым CSS, но с неравномерной шириной, попробуйте:

ul,li {float:left;}
ul {overflow:hidden;}
li {clear:left;}

(затем, возможно, адаптируйте искусственные колонны с фиксированной высотой строки и повторяющимся фоновым изображением для стилизации элементов Ли)

Если вы Конечно, это только для IE, тогда JavaScript может быть встроен в CSS с динамическое свойство, чтобы установить ширину дочернего элемента в соответствии с родительским, таким образом:

ul,li {float:left;}
ul {overflow:hidden;}
li {clear:left;width:expression(this.parentNode.offsetWidth);}

Это удивительно просто:

<style>
ul {
float: left;
}
    ul li a {
    display: block;
    white-space: nowrap;
    border: 1px solid blue;
    }
</style>

<ul>
  <li><a>Item1</a></li>
  <li><a>Item Two</a></li>
  <li><a>Item C</a></li>
  <li><a>A Rather Long Menu Item Down Here</a></li>
</ul>

Уловка здесь заключается в комбинации плавающего <ul> и добавления пробела: nowrap; к заблокированным анкерам. Фактически, вам даже не нужен «nowrap», если только ваш <ul> не борется за место. Что касается предложения игнорировать 12% посетителей ... ну ...

Голосуйте "за" за ваш код, "против" за высокомерное заявление: «Это замечательно просто».

dacracot 22.07.2010 19:43

Единственным высокомерным заявлением в этой ветке было предположение, что 12% пользователей почему-то не в счет. Ленивый и высокомерный. И да, решение на удивление простое. Спасибо за ваш (не) голос!

Ola Tuvesson 28.07.2011 03:03

Сэр, вы гений, придумав такое простое решение. Это устранило проблему, с которой я столкнулся, когда IE6 сообщал, что неупорядоченный список (и, следовательно, все его родительские элементы) был намного уже до того, как он был показан пользователю, чем после. [... и простота не обязательно означает, что это было легко]

Jonathan 19.04.2012 17:22

Другие вопросы по теме