Выпадающее меню на CSS без доступа к HTML, без JavaScript

В некоторых онлайн конструкторах сайтов на определенных тарифах очень ограничен функционал (например — Битрикс24). Бывает нет возможности вставить свой JavaScript-код, а так же поменять HTML-код готовых блоков. Такая политика в общем то не удивительна, надо же как-то монетизировать такие продукты.

Что если все же хочется выпадающее меню на сайте, а базовые модули с таким функционалом не доступны. Попробуем сделать чисто на CSS. Бывает, что его добавлять как раз разрешают.

Итак пример структуры одноуровневого меню, которое будем превращать в двухуровневое:

<ul>
<li>First</li>
<li>Second</li>
<li>Third</li>
<li>Four</li>
<li>Five</li>
<li>Sub el 1</li>
<li>Sub el 2</li>
</ul>

И CSS:

ul {
  word-spacing: -.36em;
  display: table;
  position: relative;
  margin: 0;
  padding: 0;
}
li {
  display: inline-block;
  padding: 10px;
  word-spacing: normal;
  height: 20px;
  width: 80px;
  background: gray;
}

ul:hover li {
  display: inline-block;
}

li:nth-child(6),
li:nth-child(7) {
  display: none;
  position: absolute;
  left: 200px;
  background: lightgray;
}
li:nth-child(6) {
  top: 40px;
}
li:nth-child(7) {
  top: 80px;
}
li:nth-child(1):hover ~ li:nth-child(6),
li:nth-child(2):hover ~ li:nth-child(6),
li:nth-child(4):hover ~ li:nth-child(6),
li:nth-child(5):hover ~ li:nth-child(6),
li:nth-child(1):hover ~ li:nth-child(7),
li:nth-child(2):hover ~ li:nth-child(7),
li:nth-child(4):hover ~ li:nth-child(7),
li:nth-child(5):hover ~ li:nth-child(7) {
  display: none;
}

Вот что у нас получилось:

  • First
  • Second
  • Third
  • Four
  • Five
  • Sub el 1
  • Sub el 2

Как видно, выпадающие пункты меню размещены в конце, иначе начинаются проблемы при отображении. Некоторый CSS-код относится к решению проблемы отступов между элементами типа inline-block (В частности word-spacing и display: table у UL). Неудобство, конечно, еще в том что все отступы пунктов выпадающего меню придется прописывать вручную. А для разных разрешений экрана, по видимому, их надо будет настраивать с помощью медиа-запросов CSS.

Но суть в том, что все же есть техническая возможность сделать выпадающее меню для клиентов, которые пока не готовы платить дополнительный ежемесячный взнос за расширенный функционал онлайн-конструктора.

Как вставить или заменить любую ссылку во Flash с помощью HTML и CSS

Для вставки или изменения ссылки в swf-файле вовсе не обязательно иметь его исходники и среду разработки. Ниже приведен код, в котором реализована ссылка с баннера, не имеющего внутренней ссылки.

<div style="position:relative;">
<a style="position: absolute; width: 100px; height: 100px; left: 0; top: 0; background: url(/images/blank.gif) left top no-repeat;" href="http://www.example.ru"></a>
<object
  type="application/x-shockwave-flash"
  data="/banner.swf"
  width="100" height="100">
    <param name="movie" value="banner.swf">
    <param name="wmode" value="opaque">
    <param name="allowScriptAccess" value="sameDomain" />
</object></div>

В примере используется флешка 100 на 100 пикселей. На неё накладывается ссылка с абсолютным позиционированием. А чтобы это было возможно, swf-файлу присваивается параметр wmode с значением opaque. Для работы данного примера также необходим пустой gif 1 на 1 пиксель, используемый в качестве фона ссылки.

margin: 0 auto и IE

Для выравнивания сайта по центру часто используется следующий код:

.site {margin: 0 auto;}

Идентификатор .site указывает на div-обертку шаблона сайта. У большинства браузеров вопросов не возникает, но Internet Explorer прижимает шаблон к левому краю окна. Один из простых вариантов решения этой задачи — добавить в CSS-файл, предназначенный для IE, код указанный ниже:

body {text-align: center;}

Теперь выравнивание по центру Internet Explorer должно работать нормально.

Как обрезать Flash с помощью HTML и CSS

Иногда возникает необходимость модифицировать какой либо элемент дизайна сайта, сделанный на Flash. Допустим fla-исходников нет и в помине, и/или среда разработки Flash недоступна. Если вся требуемая модификация сводится к обрезке имеющегося swf-файла, то это проще сделать средствами HTML и CSS. Например это может потребоваться когда шапка сайта сделана во Flash заодно с меню. Если надо поменять только меню, то его можно отрезать от Flash и сделать альтернативное на JavaScript. Рассмотрим два варианта обрезки.

  1. Обрезаем Flash снизу
    <div style="height:175px; overflow:hidden;">
    <object
      type="application/x-shockwave-flash"
      data="/header.swf"
      width="800" height="200">
        <param name="movie" value="header.swf">
        <param name="wmode" value="transparent">
        <param name="allowScriptAccess" value="sameDomain" />
    </object>
    </div>

    В этом случае высота Flash — 200 пикселей, а высота div-контейнера — 175 пикселей. Соответственно swf-файл будет обрезан снизу на 25 пикселей.

  2. Обрезаем Flash сверху
    <div style="height:175px; overflow:hidden;">
    <div style="position:relative; top:-25px;">
    <object
      type="application/x-shockwave-flash"
      data="/header.swf"
      width="800" height="200">
        <param name="movie" value="header.swf">
        <param name="wmode" value="transparent">
        <param name="allowScriptAccess" value="sameDomain" />
    </object>
    </div>
    </div>

    А эта обертка в 2 div-а обрезает swf-файл сверху на 25 пикселей.

В следующем посте рассмотрим как вставить или заменить любую ссылку во Flash с помощью HTML и CSS без вмешательства в сам swf-файл.

Убрать отступ от картинки в IE 9

Имеется код:

<table class='bn_table' cellpadding='0' cellspacing='0' border='0'>
<tr class='bn_0'>
  <td class='bn_0_0'><img src="/design/banner-0-0.png" border="0" width="49" height="2" /></td>
  <td class='bn_1_0'><img src="/design/banner-1-0.png" border="0" width="612" height="2" /></td>
  <td class='bn_2_0'><img src="/design/banner-2-0.png" border="0" width="47" height="2" /></td>
</tr>
<tr class='bn_1'>
  <td class='bn_0_1'><img src="/design/banner-0-1.png" border="0" width="49" height="284" /></td>
  <td class='bn_1_1'><img src="/design/banner.jpg" border="0" width="612" height="284" /></td>
  <td class='bn_2_1'><img src="/design/banner-2-1.png" border="0" width="47" height="284" /></td>
</tr>
<tr class='bn_2'>
  <td class='bn_0_2'><img src="/design/banner-0-2.png" border="0" width="49" height="51" /></td>
  <td class='bn_1_2'><img src="/design/banner-1-2.png" border="0" width="612" height="51" /></td>
  <td class='bn_2_2'><img src="/design/banner-2-2.png" border="0" width="47" height="51" /></td>
</tr>
</table>

При этом большинство браузеров отображает картинки в таблице без отступов. Однако новоиспеченный IE9 отображает отступы по вертикали. Пример ниже.
IE9 отображает отступы по вертикали после картинок
Решение простое — в CSS прописываем:

.bn_table tr td img {display:block;}

И вауля — отсупы исчезают!
убрали отступ после картинки в IE9