Нажав на слои / деления

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

13
задан Joshxtothe4 29 May 2009 в 11:35
поделиться

6 ответов

Невозможно, если вы хотите, чтобы блоки div оставались в своих текущих значениях x, y и (и, что наиболее важно), z - кликабельным может быть только «верхний» слой.


Добавление поста OP edit:

Думайте о макете CSS, как если бы вы физически работали с кусочками бумаги (это намного легче визуализировать, если вы зададите всем своим "слоистым" div другим цвет фона). Механизм рендеринга вырезает кусочек бумаги в тех размерах, которые вы ему даете (или это получается) для каждого найденного элемента. Он делает это в том порядке, в котором они сталкиваются с тем, как они кладут каждый кусочек бумаги на страницу по мере продвижения - последний элемент будет наверху.

Теперь вы сказали механизму рендеринга поместить ваш третий div в позицию. где он перекрывает второй. И теперь вы ожидаете, что сможете «увидеть» покрытый контент. Не будет t работать с бумагой, не работать с HTML. То, что он прозрачен, не означает, что он не занимает места.

Так что вам нужно что-то изменить.

Глядя на ваш CSS и разметку (которые, честно говоря, можно было бы очистить, но я предполагаю, что есть другие отметки - вверх вы не показываете нам, что его оправдывает) есть несколько простых способов выиграть:

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

2). Измените ширину со 100%, например, на 80%, или более вероятно, если вы используете pos: abs, установленный left: 0px и right: 199px; (Я' предполагаете, что padding-left на Layer2 - это предполагаемая ширина столбца?). Цена этого состоит в том, что ваш Layer3 больше не имеет 100% ширины

3). Google "Макет столбца CSS" , найдите шаблон, который отражает то, что вам нужно, и адаптируйте его. Каждый возможный макет CSS был выполнен уже миллион раз. Существуют стандартные методы, которые решают ваши проблемы. CSS - это сложно, если вы не накопили опыта, поэтому используйте опыт других. Не изобретайте колеса заново.

CSS - это сложно, если вы не накопили опыта, поэтому используйте опыт других. Не изобретайте колеса заново.

CSS - это сложно, если вы не накопили опыта, поэтому используйте опыт других. Не изобретайте колеса заново.

6
ответ дан 1 December 2019 в 19:08
поделиться

Трудно сказать, не увидев некоторого кода.

Вы можете попробовать установить z-index на нижнем слое, но это работает с элементами, которые были позиционированы с абсолютным, относительным или фиксированным ( позиция: абсолютная).


редактировать после просмотра кода:

Добавить позицию: относительная; z-индекс: 100; в #rightLayer.

Или вы можете удалить ширину: 100% из .Layer3.


Возможно, вы захотите провести рефакторинг своего кода и использовать макет из двух столбцов для #rightLayer и .Layer3.

css

#Layer0 {
    width:100%;
    height:100%;
}
body {
    margin:10px 10px 0px 10px;
    padding:0px;
    color:#999999;
    font-family:"Trebuchet MS",arial,sans-serif;
    font-size:70.5%;
}
#Layer1 {
    width:200px;
    margin-top:17px;
    font-size:1.0em;
    padding-left:12px;
    padding-top:8px;
}
#Layer2 {
    background:#fff;
    margin-left:199px;
    color:#000;
}

#rightlayer {
float:right;
}
.Layer3 {
}

html

<div id="Layer0">
    <div id="Layer2" class="Layer2">
        <h1>TEST</h1>
    </div>
    <div id="Layer1" class="Layer1">
        <h3 align="left">Brands</h3>
    </div>
    <div class="content">
        <div id="rightlayer">
            <a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p>
        </div>
        <div id="Layer3" class="Layer3">
            <h1>Ed Hardy Auctions</h1>
        </div>
    </div>
</div>
]
0
ответ дан 1 December 2019 в 19:08
поделиться

Это была бы гигантская работа, но это возможно.
Вам нужно будет захватить событие щелчка на верхнем слое / div и найти положение курсора xy.
Затем найдите все ссылки в слое / div под верхним слоем и посмотрите, совпадает ли его положение на экране с текущим положением мыши.
Затем вы можете активировать щелчок по соответствующей ссылке.
Я бы использовал для этого jQuery (если вы еще этого не сделали), а затем повторно разместил бы сообщение с тегом jQuery, если у вас возникнут проблемы.

4
ответ дан 1 December 2019 в 19:08
поделиться

Из примера я предполагаю, что ссылки в правом слое - единственные ссылки, по которым нужно щелкнуть, и что у вас нет ссылок в других слоях. Если это так, вы можете решить проблему, изменив порядок z-index для div.

Layer1 и Layer3 имеют абсолютное положение, поэтому, если вы добавите стиль положения (абсолютный или относительный) к Layer2, вы сможете вытащить этот div на передний план, также вытягивая div правого уровня, чтобы он находился на более высоком уровне, чем Layer 3.

Я добавил следующее в CSS:

#Layer2 {    
    position: relative;
    z-index: 1;
}

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

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

Надеюсь, это поможет!

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

I submitted a bug years ago to the Firefox Bugzilla saying that there was this very bug in Firefox.

I was told by a Mozilla engineer that this was not actually a bug and that it is the correct behaviour as per the HTML/CSS specifications. К сожалению, я не могу найти исходную ошибку для ссылки, как это было около 6 лет назад.

Причина, по которой я отправил ошибку, заключалась в том, что я мог щелкнуть верхний div на ссылки ниже при использовании IE (я думаю, 6), но Firefox не позволил мне.

Как обычно, оказалось, что IE имел неправильную реализацию и Firefox работал так, как предполагалось в спецификации.

Тот факт, что div является прозрачным, не означает, что вы должны иметь возможность щелкать по

Я не уверен, как можно обойти это с помощью JavaScript или CSS. Я бы сделал шаг назад и еще раз подумал о том, чего вы пытаетесь достичь и как вы пытаетесь этого достичь.

Грег

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

Не могли бы вы просто установить ширину div на auto (по умолчанию для абсолютного позиционирования - т.е. просто удалите ширину: 100% из .Layer3).

Таким образом, div будет быть настолько широким, насколько это необходимо, а не перекрывать ссылки без необходимости.

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