CSS-спрайты возвращаются к событию: hover благодаря комментарию PHP - PullRequest
0 голосов
/ 11 июня 2011

Я использую спрайты CSS для навигации по WordPress, и чтобы заставить их работать, мне нужно было использовать php, чтобы показать текущую страницу для раздела.

CSS:

#sidebarnav ul#sidenav li.visionside a {width:204px; height:53px; background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/vision2.png)  0px 0}
#sidebarnav ul#sidenav li.visionside a:hover {background-position:0px -53px}


#sidebarnav ul#sidenav li.teamside a {width:204px; height:53px; background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/team2.png)  0px 0}
#sidebarnav ul#sidenav li.teamside a:hover {background-position:0px -53px}


#sidebarnav ul#sidenav li.mtlside a {width:204px; height:53px; background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/mtl2.png)  0px 0}
#sidebarnav ul#sidenav li.mtlside a:hover {background-position:0px -53px}


#sidebarnav ul#sidenav li.blogside a {width:204px; height:53px; background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/content2.png)  0px 0}
#sidebarnav ul#sidenav li.blogside a:hover {background-position:0px -53px}


#sidebarnav ul#sidenav li.orgside a {width:204px; height:53px; background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/org2.png)  0px 0}
#sidebarnav ul#sidenav li.orgside a:hover {background-position:0px -53px}

CSS в заголовке, который должен запускаться PHP:

#sidebarnav ul#sidenav li.<?php echo $current1; ?> {
    background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/vision2.png)  0px -106px;
}

#sidebarnav ul#sidenav li.<?php echo $current2; ?> {
    background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/team2.png)  0px -106px;
}

#sidebarnav ul#sidenav li.<?php echo $current3; ?> {
    background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/content2.png)  0px -106px;
}

#sidebarnav ul#sidenav li.<?php echo $current4; ?> {
    background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/org2.png)  0px -106px;
}

PHP:

 <?php
  if ( is_page('vision') ) { $current1 = 'visionside a'; }
  elseif  ( is_page('team') ) { $current2 = 'teamside a'; }
  elseif  ( is_page('commentary') ) { $current3 = 'blogside a'; }
  elseif  ( is_page('organizations') ) { $current4 = 'orgside a'; }
 ?>

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

URL: http://jumpthru.net/newsite/vision/

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Я согласен в основном с тем, что говорит @thirtydot, поскольку, вероятно, существует более простой способ WP добавить класс к активной ссылке ... но, следуя своей логике, вы можете сделать все это намного проще.

СначалаCSS.хотя я скопировал немного больше из вашего файла подкачки, вы можете удалить все эти повторяющиеся объявления, так что единственное, что нужно каждой конкретной ссылке, это background-image .. исходный размер, background-position и т. д. не изменяютсячто-то вроде этого облегчает чтение:

#sidenav {
    width:204px; 
    list-style:none; 
    margin:0;
    padding: 0;
    padding-bottom:40px;
    float:left;
}

#sidenav li {
    float:left;
    width: 100%; 
}

#sidenav li a {
    display: block;
    height:53px;
    background-repeat: no-repeat;
    background-position: 0 0;
    text-indent: -9999px;
}

#sidenav li a:hover {
    background-position: 0 -53px;
}

#sidenav li.visionside a {background-image : url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/vision2.png);}
#sidenav li.teamside a {background-image : url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/team2.png);}
#sidenav li.mtlside a {background-image : url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/mtl2.png);}
#sidenav li.blogside a {background-image: url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/content2.png);}
#sidenav li.orgside a {background-image: url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/org2.png);}

теперь вашему «активному» состоянию нужна только одна релевантная ссылка, чтобы его background-position было изменено на 0 -106px - не нужно повторно объявлятьизображение снова

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

 <?php
  if ( is_page('vision') ) { $current = 'visionside'; }
  elseif  ( is_page('team') ) { $current = 'teamside'; }
  elseif  ( is_page('???') ) { $current = 'mtlside'; }
  elseif  ( is_page('commentary') ) { $current = 'blogside'; }
  elseif  ( is_page('organizations') ) { $current = 'orgside'; }
 ?>

Примечание: та же переменная используется (и вопросдля вашей ссылки mtlside нужно будет пометить метки), а затем строку в стилях <head> нужно будет прочитать:

#sidenav li.<?php echo $current ?> a {
    background-position: 0px -106px;
}

Таким образом, это будет только одна ссылка, которая получает более конкретный показфоновая позиция "активной страницы".

Я не уверен, что вы на самом деле хотите, чтобы ваше наведение делало, но правило a:hover не будет переопределять новый "активный" селектор, потому что правило в стилях <head> выше более конкретное, есливы действительно хотите, чтобы активная ссылка показывала то же состояние :hover, что и обычное, вам нужно сделать правило a:hover в таблице стилей более конкретным, что вы можете сделать следующим образом:

#sidebarnav #sidenav li a:hover {
    background-position: 0 -53px;
}

примечание, которое я удалилдвойные ID из селекторов таблиц стилей, поскольку в них нет необходимости, один идентификатор достаточно уникален ... но тогда вы можете использовать второй идентификатор (#sidebarnav), если требуется, чтобы последнее правило "весило" больше, еслитогда требуется конкретность.

1 голос
/ 11 июня 2011

Это невероятно плохой способ сделать это. Игнорирование здравого смысла:

Вы можете просто добавить !important к каждому из ваших background свойств, например:

background:url(http://jumpthru.net/newsite/wp-content/themes/twentyten/images/side/vision2.png)  0px -106px !important;

Вы делаете это не так, как предлагает WordPress:

http://codex.wordpress.org/Dynamic_Menu_Highlighting

Я думаю, вам следует внимательно прочитать это руководство и повторить его.

...