Разные цвета для разных статей с помощью: hover - PullRequest
0 голосов
/ 18 февраля 2011

Я пытаюсь назначить три разных цвета для трех разных статей на одной странице, используя a:hover в Wordpress.

Это сайт http://paragrams.wpshower.com/

В настоящее время все статьи становятся бледно-желтыми на a:hover. Я пытаюсь создать разные цвета для каждой статьи (например, первая статья должна быть желтой, вторая статья красной, третья синяя и т. Д.).

Ниже приведен php & CSS для a:hover в настоящее время. Я предполагаю, что мне нужно обернуть каждый идентификатор большого пальца в разные div и указать цвет в CSS?

PHP:

<ul class="mcol">
          <?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>
            <li class="article">

                    <?php
                    if ( has_post_thumbnail() ) { ?>
                    <?php 
                    $imgsrcparam = array(
                    'alt'   => trim(strip_tags( $post-    >post_excerpt )),
                    'title' => trim(strip_tags( $post-    >post_title )),
                    );
                    $thumbID = get_the_post_thumbnail( $post->ID, 'background',     $imgsrcparam ); ?>



                    <div><a href="<?php the_permalink() ?>" class="preview"><?php echo     "$thumbID"; ?></a></div>
                    <?php } ?>


                <h2><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>

и CSS:

.li_container {
background-attachment: scroll;
background-image: url(images/main-bg.gif);
background-repeat: repeat-y;
background-position: left top;
}
.li_container .article:hover {
background-color:#57bfeb;
}

Это JS:

  #  * Splits a <ul>/<ol>-list into equal-sized columns. 
#  *  
#  * Requirements:  
#  * <ul> 
#  * <li>"ul" or "ol" element must be styled with margin</li> 
#  * </ul> 
#  *  
#  * @see http://www.codeasily.com/jquery/multi-column-list-with-jquery 
#  */  
jQuery.fn.makeacolumnlists = function(settings){
settings = jQuery.extend({
    cols: 3,                // set number of columns
    colWidth: 0,            // set width for each column or leave 0 for     auto width
    equalHeight: 'li',  // can be false, 'ul', 'ol', 'li'
    startN: 1               // first number on your ordered list
}, settings);

if(jQuery('> li', this)) {
    this.each(function(y) {
        var y=jQuery('.li_container').size(),
            height = 0, 
            maxHeight = 0,
            t = jQuery(this),
            classN = t.attr('class'),
            listsize = jQuery('> li', this).size(),
            percol = Math.ceil(listsize/settings.cols),
            contW = t.width(),
            bl = ( isNaN(parseInt(t.css('borderLeftWidth'),10)) ? 0 :     parseInt(t.css('borderLeftWidth'),10) ),
            br = ( isNaN(parseInt(t.css('borderRightWidth'),10)) ? 0 :     parseInt(t.css('borderRightWidth'),10) ),
            pl = parseInt(t.css('paddingLeft'),10),
            pr = parseInt(t.css('paddingRight'),10),
            ml = parseInt(t.css('marginLeft'),10),
            mr = parseInt(t.css('marginRight'),10),
            col_Width = Math.floor((contW - (settings.cols-1)*(bl+br+pl+pr+ml+mr))/settings.cols);
        if (settings.colWidth) {
            col_Width = settings.colWidth; 
        }
        var colnum=1,
            percol2=percol;
        jQuery(this).addClass('li_cont1').wrap('<div id="li_container' + (++y) + '" class="li_container"></div>');
        for (var i=0; i<=listsize; i++) {
            if (colnum > settings.cols) colnum = 1;
            var eq = jQuery('> li:eq('+i+')',this);
            eq.addClass('li_col'+colnum);
            colnum++;
            //if(i>=percol2) { percol2+=percol; colnum++; }
            //var eq = jQuery('> li:eq('+i+')',this);
            //eq.addClass('li_col'+ colnum);
            //if(jQuery(this).is('ol')){eq.attr('value', ''+(i+settings.startN))+'';}
        }
        jQuery(this).css({cssFloat:'left', width:''+col_Width+'px'});
        for (colnum=2; colnum<=settings.cols; colnum++) {
            if(jQuery(this).is('ol')) {
                jQuery('li.li_col'+ colnum, this).appendTo('#li_container' + y).wrapAll('<ol class="li_cont'+colnum +' ' + classN + '" style="float:left; width: '+col_Width+'px;"></ol>');
            } else {
                jQuery('li.li_col'+ colnum, this).appendTo('#li_container' + y).wrapAll('<ul class="li_cont'+colnum +' ' + classN + '" style="float:left; width: '+col_Width+'px;"></ul>');
            }
        }
        if (settings.equalHeight=='li') {
            for (colnum=1; colnum<=settings.cols; colnum++) {
                jQuery('#li_container'+ y +' li').each(function() {
                    var e = jQuery(this);
                    var border_top = ( isNaN(parseInt(e.css('borderTopWidth'),10)) ? 0 : parseInt(e.css('borderTopWidth'),10) );
                    var border_bottom = ( isNaN(parseInt(e.css('borderBottomWidth'),10)) ? 0 : parseInt(e.css('borderBottomWidth'),10) );
                    height = e.height() + parseInt(e.css('paddingTop'), 10) + parseInt(e.css('paddingBottom'), 10) + border_top + border_bottom;
                    maxHeight = (height > maxHeight) ? height : maxHeight;
                });
            }
            for (colnum=1; colnum<=settings.cols; colnum++) {
                var eh = jQuery('#li_container'+ y +' li');
                var border_top = ( isNaN(parseInt(eh.css('borderTopWidth'),10)) ? 0 : parseInt(eh.css('borderTopWidth'),10) );
                var border_bottom = ( isNaN(parseInt(eh.css('borderBottomWidth'),10)) ? 0 : parseInt(eh.css('borderBottomWidth'),10) );
                mh = maxHeight - (parseInt(eh.css('paddingTop'), 10) + parseInt(eh.css('paddingBottom'), 10) + border_top + border_bottom );
                eh.height(mh);
            }
        } else 
        if (settings.equalHeight=='ul' || settings.equalHeight=='ol') {
            for (colnum=1; colnum<=settings.cols; colnum++) {
                jQuery('#li_container'+ y +' .li_cont'+colnum).each(function() {
                    var e = jQuery(this);
                    var border_top = (     isNaN(parseInt(e.css('borderTopWidth'),10)) ? 0 : parseInt(e.css('borderTopWidth'),10) );
                    var border_bottom = ( isNaN(parseInt(e.css('borderBottomWidth'),10)) ? 0 : parseInt(e.css('borderBottomWidth'),10)     );
                    height = e.height() + parseInt(e.css('paddingTop'),     10) + parseInt(e.css('paddingBottom'), 10) + border_top + border_bottom;
                    maxHeight = (height > maxHeight) ? height :     maxHeight;
                });
            }
            for (colnum=1; colnum<=settings.cols; colnum++) {
                var eh = jQuery('#li_container'+ y +'     .li_cont'+colnum);
                var border_top = (     isNaN(parseInt(eh.css('borderTopWidth'),10)) ? 0 : parseInt(eh.css('borderTopWidth'),10) );
                var border_bottom = ( isNaN(parseInt(eh.css('borderBottomWidth'),10)) ? 0 : parseInt(eh.css('borderBottomWidth'),10) );
                mh = maxHeight - (parseInt(eh.css('paddingTop'), 10) + parseInt(eh.css('paddingBottom'), 10) + border_top + border_bottom );
                /*eh.height(mh);*/
            }
        }
        jQuery('#li_container' + y).append('<div style="clear:both; overflow:hidden; height:0px;"></div>');
    });
}
}

jQuery.fn.uncolumnlists = function(){
jQuery('.li_cont1').each(function(i) {
    var onecolSize = jQuery('#li_container' + (++i) + ' .li_cont1 > li').size();
    if(jQuery('#li_container' + i + ' .li_cont1').is('ul')) {
        jQuery('#li_container' + i + ' > ul > li').appendTo('#li_container'     + i + ' ul:first');
        for (var j=1; j<=onecolSize; j++) {
            jQuery('#li_container' + i + ' ul:first li').removeAttr('class').removeAttr('style');
        }
        jQuery('#li_container' + i + ' ul:first').removeAttr('style').removeClass('li_cont1').insertBefore('#li_container' + i);
    } else {
        jQuery('#li_container' + i + ' > ol > li').appendTo('#li_container' + i + ' ol:first');
        for (var j=1; j<=onecolSize; j++) {
            jQuery('#li_container' + i + ' ol:first li').removeAttr('class').removeAttr('style');
        }
        jQuery('#li_container' + i + ' ol:first').removeAttr('style').removeClass('li_cont1').insertBefore('#li_container' + i);
    }
    jQuery('#li_container' + i).remove();
});
}

Ответы [ 3 ]

2 голосов
/ 18 февраля 2011

Вам не нужно было бы делать что-то необычное с divs;просто присвойте каждому тегу li уникальный класс и укажите цвета этого класса в css.

Из своего кода вы можете изменить строку

<li class="article">

на

<?php
switch($post->ID) {
    case 1:
        $class = 'yellow';    break;
    case 2:
        $class = 'blue';      break;
    case 3:
        $class = 'green';     break;
}
?>
<li class="article <?php echo $class; ?>">

Это будет эффективно выводить class='article yellow' для первой статьи, class='article blue' для второй и т. Д. Затем вы можете заставить все это работать, изменив CSS следующим образом:

.li_container .article.yellow:hover { background-color:#57bfeb; }
.li_container .article.green:hover  { background-color:green; }
.li_container .article.blue:hover   { background-color:blue; }

Если вы хотитечтобы получить фантазию, вы также можете изменить switch($post->ID) на switch(mod($post->ID,3)), чтобы сделать много изменений цвета.

0 голосов
/ 18 февраля 2011

Что бы я лично сделал, это добавил инкрементный класс с использованием PHP, например так ...

<ul class="mcol">
<?php if(have_posts()) : $i = 0; while(have_posts()) : the_post(); $i++; ?>
    <li class="article <?php echo "item-$i";?>">

Затем вы получите что-то вроде ..

<li class="article item-1">content</li>
<li class="article item-2">content</li>
<li class="article item-3">content</li>

Затем переключите класс при наведении на ..

$(document).ready(function(){
    $('li.article').hover(function(){
        $(this).toggleClass('active-item');
    });
});

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

li.article { /* CSS for all list items */ }
li.article.active-item { /* CSS for all any item active */ }
li.item-1 { /* CSS for the first item */ }
li.item-2 { /* CSS for the second item */ }
li.active-item.item-1 { /* CSS for the first item when hovered */ }
li.active-item.item-2 { /* CSS for the secpnd item when hovered */ }

ПРИМЕЧАНИЕ: Не помешает конкретизировать ваши CSS-селекторы, добавление идентификатора перед ними (скажем, идентификатора родительского списка) поможет вам меньше конфликтовать с другими конкурирующими стилями.

Надеюсь, это полезно ..;)

0 голосов
/ 18 февраля 2011

эйканал имеет хорошее решение.Просто, чтобы исключить другую опцию, вы можете использовать jquery и просто динамически добавлять классы, основанные на позициях статей в dom.Что-то вроде:

Добавьте это внутри элемента head вашей страницы:

<script type="text/javascript"src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function () {
    $('.mcol li.article:nth-child(1)').addClass('yellow')
    $('.mcol li.article:nth-child(2)').addClass('red')
    $('.mcol li.article:nth-child(3)').addClass('blue') 
  });
</script>

Затем вы добавите что-то подобное в ваш файл CSS:

.yellow:hover { background-color: yellow; }
.red:hover { background-color: red; }
.blue:hover { background-color: blue; }

Изменитьцвета для шестнадцатеричных кодов по вашему выбору, конечно.Веселись!

...