Html 在产品图像上添加悬停功能
我正在尝试添加一个功能,当光标悬停在集合视图中的产品图像上时,它会显示另一个产品图片 每当我查看带有下面代码的页面时,产品图像都会转移到容器底部,并且还覆盖了它们下面的标题/价格 我可以纠正什么使图片保持原来的对齐状态,并且只使用悬停效果 谢谢大家! 以下是我目前在product-card-grid.liquid中的内容--Html 在产品图像上添加悬停功能,html,css,shopify,liquid,liquid-layout,Html,Css,Shopify,Liquid,Liquid Layout,我正在尝试添加一个功能,当光标悬停在集合视图中的产品图像上时,它会显示另一个产品图片 每当我查看带有下面代码的页面时,产品图像都会转移到容器底部,并且还覆盖了它们下面的标题/价格 我可以纠正什么使图片保持原来的对齐状态,并且只使用悬停效果 谢谢大家! 以下是我目前在product-card-grid.liquid中的内容-- 你的CSS中有很多东西,但是如果我正确地理解了情况,你希望达到中的效果,对吗 在CSS中,绝对将两个图像放置在一个div中(使用top:0px和left:0px),并通过将
你的CSS中有很多东西,但是如果我正确地理解了情况,你希望达到中的效果,对吗 在CSS中,绝对将两个图像放置在一个div中(使用
top:0px
和left:0px
),并通过将鼠标悬停在父对象上更改堆栈中顶部图像的不透明度
HTML:
编辑:根据要求使用网格实施
HTML:
上面的例子使用flexbox创建了一个简单的网格,它将使用我原来文章中的(稍微修改过的).reveal
div。如果您不熟悉flexbox语法,我强烈推荐一个来自Wes Bos的很棒的语法
请注意,网格仅在图像具有设置的像素宽度时“开箱即用”,尽管您可以通过一点媒体查询魔术轻松支持不同的图像大小。让它与以下内容一起工作 在CSS中,我使用了@media(hover:hover){},这样用户就不必双击手机上的图像就可以进入产品页面 CSS: 将product-card-grid.liquid HTML/liquid更改为以下内容:
{% unless grid_image_width %}
{%- assign grid_image_width = '600x600' -%}
{% endunless %}
<div class="grid-view-item{% unless product.available %} product-price--sold-out grid-view-item--sold-out{% endunless %}">
<a class="grid-view-item__link {% if product.images.size > 1 %} has-secondary{% endif %}" href="{{ product.url | within: collection }}">
<img class="grid-view-item__image" src="{{ product.featured_image.src | img_url: grid_image_width }}" alt="{{ product.featured_image.alt }}">
{% if product.images.size > 1 %}
<img class="secondary" src="{{ product.images.last | img_url: grid_image_width }}" alt="{{ product.images.last.alt | escape }}">
{% endif %}
</a>
</div>
<div class="h4 grid-view-item__title">
<a href="{{ product.url | within: collection }}"> {{ product.title }} </a>
</div>
{% if section.settings.show_vendor %}
<div class="grid-view-item__vendor">{{ product.vendor }}</div>
{% endif %}
<div class="grid-view-item__meta">
<a href="{{ product.url | within: collection }}"> {% include 'product-price', variant: product %} </a>
</div>
{%除非网格\图像\宽度%}
{%-assign grid_image_WITH='600x600'-%}
{%end除非%}
{%if section.settings.show_vendor%}
{{product.vendor}}
{%endif%}
您确定问题不是来自宽度:100%;身高:100%为.reveal.hidden
指定的代码>?通过阅读这篇文章,它似乎会拉伸要显示的图像。这接近于我所需要的,但它会导致网格变得混乱。我更新了我的帖子,加入了一个如何在网格上下文中使用该技术的示例。不过,它严重依赖flexbox,因此如果您计划使用它,请确保您熟悉语法。:)那太好了!非常感谢你!
/* ===============================================
// Reveal module
// =============================================== */
.reveal .hidden { display: block !important; visibility: visible !important;}
.product:hover .reveal img { opacity: 1; }
.reveal { position: relative; }
.reveal .hidden {
position: absolute;
z-index: -1;
top: 0;
width: 100%;
height: 100%;
opacity: 0;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.reveal:hover .hidden {
z-index: 100000;
opacity: 1;
}
.reveal .caption {
position: absolute;
top: 0;
display: table;
width: 100%;
height: 100%;
background-color: white; /* fallback for IE8 */
background-color: rgba(255, 255, 255, 0.7);
font: 13px/1.6 sans-serif;
text-transform: uppercase;
color: #333;
letter-spacing: 1px;
text-align: center;
text-rendering: optimizeLegibility;
}
.reveal .hidden .caption .centered {
display: table-cell;
vertical-align: middle;
}
@media (min-width: 480px) and (max-width: 979px) {
.reveal .caption {
font-size: 11px;
}
}
<div class='reveal'>
<img src='image_src' class='bottom'>
<img src='image_src' class='top'>
</div>
.top, .bottom {
position: absolute;
opacity: 1;
top: 0px;
left: 0px;
}
.frame:hover .top {
opacity: 0;
}
<div class='grid'>
<div class='reveal'>
<img src='image_src' class='bottom'>
<img src='image_src' class='top'>
</div>
<div class='reveal'>
<img src='image_src' class='bottom'>
<img src='image_src' class='top'>
</div>
</div>
.grid {
display: flex;
flex-wrap: wrap; /*makes the grid "responsive"*/
}
.reveal {
display: flex;
flex: 1 1 200px; /*last value must be picture width*/
height:200px; /* picture height*/
margin: 20px; /*aesthetic only*/
position: relative;
}
.top, .bottom {
position: absolute;
opacity: 1;
top: 0px;
left: 50%; /*centers pictures inside flex children (.reveal divs)*/
transform: translate(-50%, 0); /*see above*/
}
.reveal:hover .top {
opacity: 0;
}
/* ===============================================
// Reveal module
// =============================================== */
@media (hover:hover) {
.has-secondary.grid-view-item__link img.secondary{
display:none;
}
}
@media (hover:hover) {
.has-secondary.grid-view-item__link:hover img.secondary{
display:block;
}
}
@media (hover:hover) {
.has-secondary.grid-view-item__link:hover img.grid-view-item__image{
display:none;
}
}
@media screen and (min-width:767px){
.has-secondary.grid-view-item__link img.secondary{
display:none;
}
.has-secondary.grid-view-item__link:hover img.secondary{
display:block;
}
.has-secondary.grid-view-item__link:hover img.grid-view-item__image{
display:none;
}
}
@media screen and (max-width:767px){
.has-secondary.grid-view-item__link img.secondary{
display:none;
}
}
{% unless grid_image_width %}
{%- assign grid_image_width = '600x600' -%}
{% endunless %}
<div class="grid-view-item{% unless product.available %} product-price--sold-out grid-view-item--sold-out{% endunless %}">
<a class="grid-view-item__link {% if product.images.size > 1 %} has-secondary{% endif %}" href="{{ product.url | within: collection }}">
<img class="grid-view-item__image" src="{{ product.featured_image.src | img_url: grid_image_width }}" alt="{{ product.featured_image.alt }}">
{% if product.images.size > 1 %}
<img class="secondary" src="{{ product.images.last | img_url: grid_image_width }}" alt="{{ product.images.last.alt | escape }}">
{% endif %}
</a>
</div>
<div class="h4 grid-view-item__title">
<a href="{{ product.url | within: collection }}"> {{ product.title }} </a>
</div>
{% if section.settings.show_vendor %}
<div class="grid-view-item__vendor">{{ product.vendor }}</div>
{% endif %}
<div class="grid-view-item__meta">
<a href="{{ product.url | within: collection }}"> {% include 'product-price', variant: product %} </a>
</div>