Вложенные гиперссылки без вложенных элементов ссылки в HTML-источнике

Я хотел бы иметь что-то, что выглядит и ведет себя как гиперссылка внутри большего прямоугольника (полная страница), которая также является гиперссылкой. Ниже представлено ASCII-представление, как оно должно выглядеть:

|-------------------------------------------|
| Some text  [_link_]                            |
|-------------------------------------------|

Весь внешний прямоугольник (элемент блока) должен быть гиперссылкой. Внутри этого прямоугольника должен быть какой-то текст, а в конце этого текста должна быть другая ссылка.

К сожалению, вложенные ссылки (элементы A) являются незаконными в (X) HTML:

12.2.2 Вложенные ссылки являются незаконными

Связи и привязки, определенные элементом A, не должны быть вложенными;  элемент A не должен содержать никаких других элементов A.

(из http://www.w3.org/TR/html401/struct/links.html#h-12.2.2), поэтому наиболее естественный способ реализации выше

<a href="xxx" style="display: block">
  Some text
  <a href="yyy">link</a>
</a>

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

Так что я хотел бы спросить, как добраться до макета, представленного выше, используя HTML и CSS (но без JavaScript), но без вложенных элементов ссылки в HTML источник. Было бы неплохо, если бы поведение было как можно ближе к тому, у которого были вложенные элементы ссылок (для браузеров, которые не слишком строги при реализации стандарта HTML).


Изменить (16-01-2009)

Разъяснение: Решения, в которых используется более двух элементов ссылок, являются совершенно приемлемыми

<a href="xxx" ...>Some text</a>
<a href="yyy" ...>Link</a>
<a href="xxx" ...>& nbsp;</a>
...

Ответы

Ответ 1

Вы можете попробовать что-то вроде этого:

div.a {
  position: relative;
  background-color: #F88;
  z-index: 0;
}
a.b {
  position: relative;
  z-index: 2;
}
a.b:hover {
  background-color: #8F8;
}
a.c {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
}
a.c:hover {
  background-color: #88F;
}
a.c span {
  display: none;
}
<div class="a">
  foo
  <a href="bar" class="b">bar</a>
  <a href="foo" class="c"><span>baz</span></a>
</div>

Ответ 2

Возможно, это сработает?

div.parentBox {
  position:relative;
  height:100px;
}
  a.someLink {
    position:absolute;
    top:0;
    left:0;
    height:100px;
  }

// Now just position the two spans

<div class="parentBox">
  <span class="someText">Some Text</span>
  <a href="#" class="someLink">
    <span class="linkText">Link Text</span>
  </a>
</div>

Ответ 3

То, что я делал в прошлом, - это использовать Javascript для присоединения правильной функциональности к div (при условии, что это родительский элемент), так что когда он щелкнут, window.location запускается, открывая атрибут .href дочерней ссылки.

Что-то вроде этого возможно.

// jQuery Code
$(".parentDivLink").click(function(){
  window.location = $(this).find("a.mainLink").attr("href");
});

<div class="parentDivLink">
  <a href="http://www.google.com" title="Google" class="mainLink">Click Me</a>
</div>

Ответ 4

Просто поместите обработчик события onclick на внешний элемент, который при нажатии вызывает "window.location = 'yourURLhere"; "

Вы можете добавить атрибут стиля - "cursor: pointer", чтобы получить курсор мыши при наведении мыши.

У вас также может быть блок кода hover css для изменения цвета.

EDIT: просто не реализовано javascript, поэтому в этом случае сохраните тег 'a' и просто определите стиль для него в css, таким образом вы можете присвоить ему высоту, ширину и т.д.

Ответ 5

Поплавок с отрицательными полями также должен работать.

Протестировано (только в IE6):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>Link within link</title>
<style type="text/css">
.Parent {
width: 500px;
background-color: yellow;
}
.sub {
float: left;
margin-left: -300px;
}
.foo {
display:block;
float: left;
text-decoration: none;
}
</style>
</head>
<body>
<a href="foo" Class="foo"><div class="Parent">foo </div></a>
<div class="sub"><a href="bar">Link text</a></div>
</body>
</html>

Вы осознаете большой потенциал для путаницы пользователей.