【问题标题】:css transform scale keep onscreencss变换比例保持在屏幕上
【发布时间】:2017-08-22 03:23:52
【问题描述】:

我在 bootstrap 3 个面板中显示了一系列图像(大屏幕每行 3 个)。

当您单击图像时,我对其进行了设置,以便它应用一个在图像上执行“缩放(2)”的 CSS 类,这一切正常,但我希望这些图像可见并自行缩放在屏幕上。

第 1 列中的图像在左侧稍微偏离屏幕,第 3 列中的图像在右侧稍微偏离屏幕,第 2 列中的图像大部分都很好。

理想情况下,我希望它们缩放到视口本身的中心,或者至少根本不渲染到屏幕外。

CSS:

  .zoom {      
    -webkit-transition: all 0.35s ease-in-out;    
    -moz-transition: all 0.35s ease-in-out;    
    transition: all 0.35s ease-in-out;     
    cursor: -webkit-zoom-in;      
    cursor: -moz-zoom-in;      
    cursor: zoom-in;  
  }   

  .zoom-click {
    -ms-transform: scale(2);
    -moz-transform: scale(2);  
    -webkit-transform: scale(2);  
    -o-transform: scale(2);  
    transform: scale(2); 
    position:relative;
    z-index:100; 
    border: 2px solid DarkRed; 
  }

点击图片后,它会添加/删除“缩放点击”类。

我尝试过使用“平移”和“缩放”,但它与图像本身相关,也尝试过使用“变换原点”。

**更新:** 创建了一个 jsfiddle 来展示它目前的状态(减去实际创建每个“主图像面板”面板的 knockoutjs 代码。

https://jsfiddle.net/tczh1sxq/2/

【问题讨论】:

  • 悬停时,图像应该显示在 div 之外?或者我可以放大 div 吗?
  • 图像从当前位置弹出并缩放到当前大小的 2 倍。此外,它仅在您单击图像时发生,而不是在您悬停时发生。
  • 我已经用新的提琴手更新了我的答案。检查一次。

标签: html css image transform


【解决方案1】:

想通了。有时我似乎总是对更复杂的 CSS 感到困难。

无论如何,通过以下方式修复它:

  #images > div .zoom-click { transform-origin: top; }
  #images > div:nth-child(3n+0) .zoom-click { transform-origin: top right; }
  #images > div:nth-child(3n+1) .zoom-click { transform-origin: top left; }

如果我能让它真正进入视口的中心就好了,但这已经足够了,现在看起来更整洁了,因为它不在屏幕边缘。

【讨论】:

  • 这是我昨天推荐的,伙计!
  • 确实你做到了,但因为我当时没有做过 jsfiddle 来展示我所做的事情,所以你的建议对我来说没有多大意义,特别是因为它不在正确的元素(这是我的错,不是你的)。问题是我无法将您原来的答案标记为答案,因为它现在都是在 JS 中完成的。
【解决方案2】:

这可能会有所帮助,

.zoom-click
{
  position: absolute;
  height: 50%;
  width: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
}

} 你可以使用任何你想要的高度/宽度。如果图像包含在任何定位元素中,您可以使用 position: fixed 并且它仍然可以工作

【讨论】:

    【解决方案3】:

    只是一个想法试图解决您的问题。我根据子元素索引值使用了不同的 tranform-origin,例如 nth-child,

    $('.child').click(function(){
        var index = $(this).index()+1;
        if((index%3)==1){
            $(this).find('img').css({
            'transform': 'scale(2)',
            'transform-origin': 'top left'
          });
        }
        else if((index%3)==2){
            $(this).find('img').css({
            'transform': 'scale(2)',
            'transform-origin': 'top'
          });
        }
        else if((index%3)==0){
            $(this).find('img').css({
            'transform': 'scale(2)',
            'transform-origin': 'top right'
          });
        }
      });
    

    查找此fiddler 以供参考。

    【讨论】:

    • 即使我没有“行”div,这仍然有效吗?从技术上讲,我并没有严格限制它,我只是用“col-md-4”将 div 扔到屏幕上,然后让 Bootstrap 根据屏幕宽度确定它可以在屏幕上放多少。虽然这是一个选项,但我可以将每 3 个 div 包装在一个 row-div 中,因为我知道系统的这个特定部分永远不会在移动设备上查看。
    • 那么你可以通过使用nth-child元素来实现它。在我的答案中找到更新提琴手。
    猜你喜欢
    • 1970-01-01
    • 2013-11-01
    • 2015-09-04
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2011-11-26
    • 2015-02-17
    • 2012-11-09
    相关资源
    最近更新 更多