Показывать div, только если URL не имеет идентификатора фрагмента

Трудно объяснить, что я имею в виду, поэтому сначала посмотрите этот jsfiddle: http://jsfiddle.net/Gsggy/

Когда пользователь нажимает 1, div номер 1 показывает то же самое для остальных, достаточно просто.

Однако, прежде чем пользователь нажал на число, там нет div, потому что он опирается на значение # в URL

Как я могу установить div по умолчанию, который есть с пустым URL-адресом, например, www.jsfiddle.com, но исчезает, когда кто-то нажимает на число и делает его www.jsfiddle.com/#1

2 ответа

Решение

Дело в том, что вы не можете нацелить элемент таким образом, чтобы сказать ему: "сделай что-нибудь, пока кто-то другой является целью".

Однако есть некоторые обходные пути к этой дилемме. Одним из решений было бы всегда отображать содержимое по умолчанию и отображать целевые элементы выше.

Вы можете использовать тот факт, что элементы, которые появляются позже в dom, обычно отображаются выше узлов, которые появляются раньше. Таким образом, вы можете иметь, например, отрицательное верхнее поле или элемент с абсолютным позиционированием, чтобы скрыть ваш контент по умолчанию.

Улучшение вашей HTML структуры:

<div class="default" id="z">0</div>
<div id="a">1</div>
<div id="b">2</div>
<div id="c">3</div>

Этот CSS действительно работает:

.default {
    display: block;
    background: #eff;
}

div + div {
    margin-top: -102px;
}

div:target {
    background: #eef;
    display: block;
    position: relative;
}

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

Смотрите эту скрипку: http://jsfiddle.net/Gsggy/4/

Используйте селектор nth-of-type или last-of-type и сделайте div по умолчанию в прошлом, я думаю, что это будет работать в вашем случае

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