CSS + jQuery:沿容器的矩形缩放、居中和旋转图像

CSS + jQuery: scale, center and rotate image along its container's rectangle

我想对 CSS(和 jQuery,如有必要)进行一些棘手的转换。

我想达到的目标:

结果将如下所示:

CSS/jQuery 专家可以帮我解决这个问题吗?非常感谢!

结果应该是静态的,还是 animated/responsive,取决于 screen/box 大小?

position: absolute;
top: 50%;
left: 50%;
translate3d(-50%, -50%, 0);
transform: rotate(66deg) translate3d(-50%, -50%, 0);
transform-origin: 0% 0%;

旋转: transform: rotate(66deg);

中心点: transform-origin: 0% 0%;

居中绝对容器:

position: absolute;
top: 50%;
left: 50%;
translate3d(-50%, -50%, 0);

静态示例: http://codepen.io/anon/pen/NGwozM

:)

我制作了一个脚本,该脚本实际计算元素如何适合各种可能的尺寸。当您有一个元素 .fitChildren 时,它将适合所有具有 rotation 属性的子元素。

查看 this Fiddle

它接受长文本,也支持填充。

这是JavaScript

function fit () {
  $('.fitChildren').each(function(){
    var p = $(this)
    var pw = p.width()
    var ph = p.height()
    p.children('[rotation]').each(function(){
      var c = $(this)
      var cw = c.data('width')
      var ch = c.data('height')
      var ta = c.data('tan')
      var co = c.data('cos')
      var wi = pw / ((cw + (ch * ta)) * co * 2)
      var he = ph / ((ch + (cw * ta)) * co * 2)
      c.css({'transform':'translate(-50%,-50%)rotate('+c.data('angle')+'deg)scale('+(wi<he?wi:he)+')'})
    })
  })
}
$(function(){
  $('.fitChildren > [rotation]').each(function(){
    var t = $(this)
    var a = t.attr('rotation') % 360
    var rad = Math.abs(a) % 180
    if(rad > 90)rad = 180 - rad
    rad *= (Math.PI / 180)
    t.data({angle:a,tan:Math.tan(rad),cos:Math.cos(rad),width:t.outerWidth()/2,height:t.outerHeight()/2})
  })
  fit()
})
$(window).on('resize',function(){fit()})

脚本首先为具有 rotation 属性的所有元素创建内部数据。该对象存储五个属性:

  • 角度[rotation]
  • 角度正切
  • 角度余弦
  • 元素宽度
  • 元素高度

然后当文档准备好并且发生调整大小时,将调用 fit(),它将遍历所有元素并将它们放入其父元素中。

希望对您有所帮助