Малък трик за презареждане на картинка

Открих съвсем прост начин за зареждане на картинка при RollOver събитие. По стандартната схема имаме две картинки, една в активно състояние и една в пасивно. При минаване с курсора над активната картинка искаме да се показва пасивната. Това е свързано с известно забавяне, понеже пасивната картинка не е заредена в браузъра, и в зависимост от скоростта на връзката се получава пауза, която разваля ефекта. Освен при RollOver събитие, тази картинка трябва да отбелязва избраната страница. Идеята е, пасивната картинка да се зареди първа, а след това върху нея активната.

Това е примерно меню с три връзки. В HTML-а пишем:

<div id="side_menu">
  <ul>
    <li id="about">
	  <span>About</span>
	</li><li id="links">
	  <a href="links/"><span>Links</span></a>
	</li><li id="contact">
	  <a href="contact/"><span>Conact</span></a>
	</li>
  </ul>

</div>

В CSS-а имаме:

#side_menu ul {
  padding: 0;
  margin: 0;
  list-style: none;
}

#side_menu a {
  display: block;
  width: 140px;
  height: 24px;
  border: none;
}

#m01 a {
  background: url(img/side_m01.gif) no-repeat;
}

#m02 a {
  background: url(img/side_m02.gif) no-repeat;
}

#m03 a {
  background: url(img/side_m03.gif) no-repeat;
}

#m01 a:hover {
  background: url(img/side_m01-on.gif) no-repeat;
}

#m02 a:hover {
  background: url(img/side_m02-on.gif) no-repeat;
}

#m03 a:hover {
  background: url(img/side_m03-on.gif) no-repeat;
}

#m01 {
  background: url(img/side_m01-on.gif) no-repeat;
}

#m02 {
  background: url(img/side_m02-on.gif) no-repeat;
}

#m03 {
  background: url(img/side_m03-on.gif) no-repeat;
}

#side_menu span {
  display: none;
}

CSS-ът не е съвсем оптимизиран, понеже се получава малко досадно повторение за #m0x и #m0x a:hover. Резултатът може да се види тук. Неудобството е, че примера не работи, ако на LI се зададе display: inline. Ни най-малко не претендирам аз да съм открил това решение. Положителното в случая е, че стигнах до него сам.

1. HowBizarre 18.03.2004

Хаха, много готино…

Преди време гледах подобна идея, но на “li” елемента за background е присвоена една картинка. Тази картинка представлява двете състояния на бутона заедно - един под друг. При “а” позицията на background за “li” елемента e “no-repeat 0 0” (т.е. първото състояние на бутона), a при “a:hover” - “no-repeat 0 -50” (второто състояние, като -50 е в зависимост от големината на изместването).

2. Петьо 23.03.2004

готино е, на howbizarre решението ми се струва също логично…

а наче можеш да сбиеш cssто така -

#m01, #m01 a {background: url(img/side_m01.gif) no-repeat;}
#m02, #m02 a {background: url(img/side_m02.gif) no-repeat;}
#m03, #m03 a {background: url(img/side_m03.gif) no-repeat;}

#m01 a:hover {background: url(img/side_m01-on.gif) no-repeat;}
#m02 a:hover {background: url(img/side_m02-on.gif) no-repeat;}
#m03 a:hover {background: url(img/side_m03-on.gif) no-repeat;}

друг е въпроса, че при check for newer… every visit to the page в IE става едно хипер гадно премигване…