#html #css #hyperlink #visited
#HTML #css #гиперссылка #посещенный
Вопрос:
У меня есть список с несколькими записями.
<ul>
<li>
<a href="http://url" title="The Title">
<img src="/badge-unvisited.png" alt="" border="0" />
</a>
</li>
<!-- etc. -->
</ul>
Я не хочу использовать jQuery, поэтому он должен быть только для CSS.
Какой самый лучший и простой способ изменить src изображения при его посещении?
Ответ №1:
Какой самый лучший и простой способ изменить src изображения при его посещении?
Его нет. src
Свойство изображения выходит за рамки CSS.
Вместо этого вам придется работать со background-image
свойствами.
Теоретически у вас может быть два изображения и показывать одно одновременно, а другое при следующем использовании display: none
, но это довольно запутанно и приводит к загрузке обоих изображений.
Ответ №2:
По крайней мере, в Webkit и Firefox это невозможно, поскольку стилизация посещенных ссылок допускает различные сценарии атаки.
http://blog.mozilla.com/security/2010/03/31/plugging-the-css-history-leak/
https://bugzilla.mozilla.org/show_bug.cgi?id=147777
https://bugs .webkit.org/show_bug.cgi?id=24300
Ответ №3:
Afaik, вы не можете изменить src изображения только с помощью css.
Но вы могли бы просто сделать его фоновым изображением того же размера, а затем использовать класс:hover, например
div {
background-image:url(default.jpg);
}
div:visited {
background-image:url(changed.jpg);
}
Кстати, еще более изящным решением было бы использовать одно и то же изображение, включающее оба состояния, и просто изменить background-position
. Таким образом, нагрузка меньше. Ищите «css sprites», если вас интересует больше!
Комментарии:
1. Проблема в том, что наличие div внутри элемента привязки («a») недопустимо. Я мог бы использовать элемент li и придать ему фон. Но я не могу обернуть ссылку вокруг li. Итак, какой элемент я бы использовал? Промежуток с отображением: блок — единственный вариант, который я вижу.
2. HTML5 позволяет блокировать элементы в <a> . В противном случае промежуток с display:block был бы следующим лучшим решением, да!
Ответ №4:
Вы можете изменить свойства изображения следующим образом:
ul li a:visited img { border:10px }
Но чтобы изменить сам источник, вы должны проявить творческий подход. либо замените изображение элементом, имеющим фоновое изображение, либо, если вам не нужно поддерживать старые браузеры, вы можете использовать сгенерированный контент, например:
ul li a:after { content:url(image.gif); }
и затем
ul li a:visited:after { content:url(image-2.gif); }
Ответ №5:
css не может изменить dom, я мог бы предложить установить фоновое изображение, а затем скрыть img
a{background-image:url(badge-visited.png);width:50px;height:50px;}
a:visited img{display:none;}
Комментарии:
1. хорошая идея! хотя <a> является встроенным элементом и не будет принимать ширину и высоту. вы могли бы просто сделать его блочным элементом с display:block;