【问题标题】:Hover effect over image悬停在图像上的效果
【发布时间】:2015-04-20 22:35:01
【问题描述】:

我正在尝试对我的 WP 主题中的图像应用悬停效果。它是由帖子上的特色图像创建的图像网格。

网格在 content.php 中控制

<?php
/**
 * controls main grid images
 */
?>

<article id="post-<?php the_ID(); ?>" <?php post_class('col-md-4 col-sm-4 pbox '); ?>>

    <div class = "box-ovrly">
      <h2 class="box-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
      <div class="box-meta"><?php the_category(', '); ?></div>
    </div>

    <?php
        $thumb = get_post_thumbnail_id();
        $img_url = wp_get_attachment_url( $thumb,'full' ); //get full URL to image (use "large" or "medium" if the images too big)
        $image = aq_resize( $img_url, 750, 560, true ); //resize & crop the image
    ?>

    <?php if($image) : ?>
    <a href="<?php the_permalink(); ?>"> <img class="img-responsive hover-decal" src="<?php echo $image ?>"/></a>
    <?php endif; ?> 

</article><!-- #post-## -->

我想将'box-overly' div 转换为图像顶部的叠加层,但找不到合适的 js 和 css。

我现在拥有的 css ...

.box-ovrly {
z-index: 100;
position: absolute;
top: 0px
left: 0px;
}

它将标题和类别放在图像的顶部。我希望它有一个背景来覆盖悬停时的图像,但在悬停之前根本不显示

我想要做的事情的完美例子(最终不同的背景颜色等。但我不希望图像上的任何文字直到悬停)在这个投资组合中

http://redantler.com/work/

【问题讨论】:

    标签: javascript jquery html css wordpress


    【解决方案1】:

    您可以使用纯 CSS 实现该效果。

    JSFiddle - http://jsfiddle.net/y3z4pojv/6/

    在下面的代码中,最重要的部分是.element:hover &gt; .elementHover 位。这意味着“显示.elementHover,它是.element 的孩子,当.element 被悬停时”。

    只需查看此示例中 HTML 的结构,并在您的 WordPress 代码中进行模拟即可。 (当然,为您的元素使用适当的名称)。

    测试 CSS:

    .element {
        position: relative;
        display: inline-block;
        z-index: 0;
        width: 300px;
        height: 300px;
        overflow: hidden;
    }
    .strawberries {
        background: url('http://images4.fanpop.com/image/photos/16300000/Delicious-pretty-fruit-fruit-16382128-670-562.jpg');
    }
    .watermelon {
        background: url('http://fyi.uwex.edu/safepreserving/files/2013/08/watermelon.jpg');
    }
    .pineapple {
        background: url('http://static.giantbomb.com/uploads/original/7/71129/2672509-6564604021-pinea.jpg');
    }
    .element:hover > .elementHover {
        opacity: 1;
        z-index: 1;
    }
    .elementHover {
        position: absolute;
        opacity: 0;
        z-index: -1;
        height: 100%;
        width: 100%;
        -webkit-transition: all 500ms;
        -moz-transition: all 500ms;
        transition: all 500ms;
    }
    .hoverContent {
        position: relative;
        z-index: 10;
        color: #fff;
        font-size: 200%;
        padding: 1em;
    }
    .hoverBackground {
        position: absolute;
        z-index: 5;
        width: 100%;
        height: 100%;
        opacity: 0.8;
    }
    .green {
        background: green;
    }
    .red {
        background: red;
    }
    

    测试 HTML:

    <div class="element strawberries">
        <div class="elementHover">
            <img class="hoverBackground" src="http://www.aux.tv/wp-content/uploads/2012/09/how-to-rick-roll-somebody.jpg"/>
            <span class="hoverContent">
                Hello there
            </span>
        </div>
    </div>
    <div class="element watermelon">
        <div class="elementHover">
            <div class="hoverBackground green"></div>
            <span class="hoverContent">
                Goodbye now
            </span>
        </div>
    </div>
    <div class="element pineapple">
        <div class="elementHover">
            <div class="hoverBackground red"></div>
            <span class="hoverContent">
                ...Not yet
            </span>
        </div>
    </div>
    

    请注意,悬停时您可以只使用纯色DIV 而不是IMG,您只需将IMG 标记更改为DIV 并将背景设置为.hoverBackground

    【讨论】:

    • 这在示例中似乎效果很好,而且相当简单。但是正如我所提到的,一旦我得到它的接线,我想接下来将悬停背景更改为不同的颜色以用于不同的帖子。我假设这涉及到 js,那么这种技术会很好地与之结合吗?
    • 是的,当然,您只需要添加更多类,并为每个不同的帖子指定您想要的样式。稍后我会更新 jsFiddle。
    • 看看:jsfiddle.net/y3z4pojv/5这是你想要的吗?你几乎可以用任何你想要的方式来设计它们。继续添加课程。
    • 当我将它应用到我的 wordpress 时(我复制了你的 css 并将 'box-ovrly' 的标记更改为你提供的示例,它打破了网格并且'覆盖'出现在图像之外。另一个问题是这是一个帖子循环,所以帖子是用循环创建的,所以我不能独立地对每个帖子进行硬编码
    • 嗯,如果不查看网格的样式,很难判断它是什么,但您可以尝试将 top: 0; left: 0 设置为 .hoverBackground 并将 position: absolute 设置为 .hoverContent。跨度>
    【解决方案2】:

    不得不做类似的事情,但希望这对你有用。当然,根据您的使用情况进行修改。这是一个简单的版本

    版本。 1(链接中的html,JS和CSS,JS在这里发布): http://jsfiddle.net/SnvMr/6/

    $('.effect').hover(
        function() {
            $('.effect').not(this).stop().fadeTo(500, 0.33);
            $(this).find('p').fadeIn(500);
        }, function() {
            $('.effect').stop().fadeTo(500, 1);
            $('.effect p').fadeOut(500);
        }
    );
    

    版本。 2: http://jsfiddle.net/deelite/SnvMr/12/

    【讨论】:

    • 我可以直接将它添加到functions.php中还是需要通过外部js引入。版本 2 看起来效果更好
    • 只需将其添加到您的 JS 文件和样式文件中。根据自己的喜好修改。我知道我给出的代码也有文本覆盖(当悬停在其他元素上的一个元素上时会产生淡入淡出效果),但只需从 HTML/JS/CSS 中删除这些细节。您可以通过您的函数或代码调用它,您可以调用您希望它影响的任何样式类或 id。 JS 只是为了在你使用的图像之间有一个平滑的过渡,在这种情况下是淡化的。
    • 我似乎无法让它在我的文件中工作,我创建了一个新的 js/hover-decal.js 并使用了您在 jsfiddle 中的编码
    • 您是否调用了正确的 jquery 版本?指向您的工作的链接也会有所帮助。
    • 主题要求最新的查询。不幸的是,我的工作仍在本地主机上,所以我无法在线提供它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2016-09-06
    • 1970-01-01
    • 2023-04-02
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多