CSS Выпадающие Меню - “Лучше всего”? Самый многофункциональный?

Есть еще одна проблема, которая не указана ни в одном из существующих ответов. Python разрешено объединять любые два неизменных значения, и предварительно созданные значения малых значений не являются единственным способом, которым это может случиться. Реализация Python никогда не гарантирована , но все они делают это не более, чем просто малые int.


Во-первых, есть еще некоторые предварительно созданные такие как пустые tuple, str и bytes и некоторые короткие строки (в CPython 3.6 это 256 односимвольных строк Latin-1). Например:

>>> a = ()
>>> b = ()
>>> a is b
True

Но также даже не созданные заранее значения могут быть одинаковыми. Рассмотрим следующие примеры:

>>> c = 257
>>> d = 257
>>> c is d
False
>>> e, f = 258, 258
>>> e is f
True

И это не ограничено значениями int:

>>> g, h = 42.23e100, 42.23e100
>>> g is h
True

Очевидно, что CPython не поставляется с предварительно созданным float для параметра 42.23e100. Итак, что здесь происходит?

Компилятор CPython будет объединять постоянные значения некоторых известных неизменяемых типов, таких как int, float, str, bytes, в одном модуле компиляции. Для модуля весь модуль является единицей компиляции, но в интерактивном интерпретаторе каждый оператор представляет собой отдельный блок компиляции. Поскольку c и d определены в отдельных утверждениях, их значения не объединяются. Поскольку e и f определены в том же самом заявлении, их значения сливаются.


Вы можете видеть, что происходит, разобрав байт-код. Попробуйте определить функцию, которая выполняет e, f = 128, 128, а затем называет dis.dis на ней, и вы увидите, что существует одно постоянное значение (128, 128)

>>> def f(): i, j = 258, 258
>>> dis.dis(f)
  1           0 LOAD_CONST               2 ((128, 128))
              2 UNPACK_SEQUENCE          2
              4 STORE_FAST               0 (i)
              6 STORE_FAST               1 (j)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
>>> f.__code__.co_consts
(None, 128, (128, 128))
>>> id(f.__code__.co_consts[1], f.__code__.co_consts[2][0], f.__code__.co_consts[2][1])
4305296480, 4305296480, 4305296480

. Вы можете заметить, что компилятор сохранил 128 как константу, даже если он фактически не используется байтовым кодом, что дает вам представление о том, как мало оптимизирует компилятор CPython. Это означает, что (непустые) кортежи на самом деле не сливаются:

>>> k, l = (1, 2), (1, 2)
>>> k is l
False

Поместите это в функцию, dis, и посмотрите на co_consts - есть 1 и 2, два (1, 2) кортежа, которые имеют одинаковые 1 и 2, но не идентичны, и кортеж ((1, 2), (1, 2)), который имеет два разных одинаковых кортежа.


Есть еще одна оптимизация, которую выполняет CPython: string interning. В отличие от сгибания константы компилятора, это не ограничивается литералами исходного кода:

>>> m = 'abc'
>>> n = 'abc'
>>> m is n
True

С другой стороны, он ограничен типом str и строками типа внутреннего хранилища «ascii compact», «compact» или «legacy ready» , и во многих случаях только «ascii compact» будет интернирован.


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

Возможно, стоит изучить правила для одного конкретного Python для удовольствия. Но не стоит полагаться на них в вашем коде. Единственное безопасное правило:

  • Не записывайте код, который предполагает наличие двух равных, но отдельно созданных неизменяемых значений.
  • Не записывайте код, который предполагает два равных, но отдельно

Или, другими словами, использовать is только для проверки документированных синглетов (например, None) или которые создаются только в одном месте в код (например, идиома _sentinel = object()).

14
задан Dan Herbert 25 August 2008 в 13:45
поделиться

8 ответов

Вы могли использовать jQuery. Вот пример: http://www.jqueryplugins.com/plugin/47/

3
ответ дан 1 December 2019 в 14:12
поделиться

Я был бы сильно , предлагают, чтобы Вы использовали суперрыба , адаптация jQuery меню suckerfish. Это имеет загрузки функций (и задержка является одним из них), добавляют некоторые необычные возможности анимации и ухудшаются к нормальному меню suckerfish корректно. Этому также не нужна никакая дополнительная разметка.

8
ответ дан 1 December 2019 в 14:12
поделиться

Вы не сможете получить чистое выпадающее меню CSS с функциональностью, которой Вы требуете. Необходимо будет использовать некоторый JavaScript. Или библиотека как JQuery, который был упомянут или путем изменения кода Suckerfish для использования onclick вместо onmouseover/out.

, Но путем хождения всем путем JavaScript Вы могли помогать одной группе людей ("пользователи с трудностями с координацией"), но мешать другим (любой с JavaScript, выключенным по некоторым причинам).

можно хотеть изучить добавление некоторых альтернатив - мышь управляемое меню при наведении курсора для довольных мышью; основанное на клавиатуре управление через ключи доступа и т.п. для других.

1
ответ дан 1 December 2019 в 14:12
поделиться

Я использую решение, реализованное на сайте Steve Gibson grc.com . Это делает все, в чем я нуждаюсь, и использование никакой javascript. Вещь задержки, которую Вы ищете, не там однако, таким образом, необходимо будет, вероятно, добавить некоторый JavaScript для этого.

1
ответ дан 1 December 2019 в 14:12
поделиться

Я не вижу способ добавить задержку за пределами JavaScript - но если Вы собираетесь использовать JavaScript, можно также использовать управляемое меню JavaScript.

, Если Вы следуете за семантически корректным военно-морским шаблоном и настраиваете его так он дисплей обычно (например, статичный), когда JavaScript не присутствует, необходимо согласиться с тем, что Вы используете.

Это - все о Вашей целевой аудитории - кто является более крупным? JS-disabled или пользователи с трудностями с координацией? Я предположил бы, что последние требуют приоритета (если бы не использование процента затем законы о нетрудоспособности).

0
ответ дан 1 December 2019 в 14:12
поделиться

Часть проблемы координации может произойти от плохого дизайна. Удостоверьтесь, что у Вас есть довольно большие кнопки с, если это возможно, перекрытие на всех сторонах. Идеально главная военно-морская кнопка имела бы выпадающее меню, кажущееся центрируемой ниже его (вместо выровненного по левому краю). Подменю выпадающего следовали бы за подобным шаблоном. Я нашел, что наличие этого уровня ошибочного дополнения размещает нескоординированных пользователей и избавляет Вас от необходимости программировать в JavaScript.

Каждый сайт отличается, конечно, таким образом, я представляю это больше как альтернативу 'что - если' решение.

1
ответ дан 1 December 2019 в 14:12
поделиться

Как Lee Theobald сказал, отбрасывание/вниз нуждаются в JavaScript, и JQuery является большим выбором. Но в стороне доступности, смотрите на" Listamatic" большой список меню и особенный , это вложило .

0
ответ дан 1 December 2019 в 14:12
поделиться

Моя первая рекомендация echos один уже сделанный - Меню CSS Steve Gibson. Это не использует JavaScript, почти столь межплатформенный совместимый, как Вы собираетесь добраться, и относительно просто реализовать.

, Если это не работает, мой основанный на JS reccomendation переходит в mygosuMenu. Я использовал его в течение достаточно долгого времени на всех моих проектах до нахождения меню Steve. Его высоконастраиваемое; и стиль, структура и код меню являются все отдельными. Это - основная HTML-таблица, которую можно разработать с помощью CSS к содержанию основы.

я все еще получил два сайта с помощью последнего:

0
ответ дан 1 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: