web-dev-qa-db-ja.com

CSSを使って長方形の画像を正方形に「切り取る」にはどうすればいいですか?

私は実際にCSSで画像を修正することは不可能であることを知っています、それが私が引用でクロップを入れる理由です。

私がやりたいのは、長方形の画像を撮影し、CSSを使用して画像をまったく歪ませることなく正方形に見えるようにすることです。

私は基本的にこれを有効にしたいです。

enter image description here

これに:

enter image description here

134
novicePrgrmr

IMGタグに含める必要がないと仮定して...

HTML:

<div class="thumb1">
</div>

CSS:

.thumb1 { 
  background: url(blah.jpg) 50% 50% no-repeat; /* 50% 50% centers image in div */
  width: 250px;
  height: 250px;
}

.thumb1:hover { YOUR HOVER STYLES HERE }

編集:divはどこかにリンクする必要がある場合はちょうどそのようにHTMLとスタイルを調整します。

HTML:

<div class="thumb1">
<a href="#">Link</a>
</div>

CSS:

.thumb1 { 
  background: url(blah.jpg) 50% 50% no-repeat; /* 50% 50% centers image in div */
  width: 250px;
  height: 250px;
}

.thumb1 a {
  display: block;
  width: 250px;
  height: 250px;
}

.thumb1 a:hover { YOUR HOVER STYLES HERE }

これはまた反応するように修正することができることに注意してください。例えば、%幅や高さなど。

70
Michael

ラッパーdivやその他の無駄なコードを含まない純粋なCSSソリューション。

img {
  object-fit: cover;
  width:230px;
  height:230px;
}
332
Vision Hive
  1. あなたのイメージをdivに入れてください。
  2. あなたのdivに明示的な二乗寸法を与えます。
  3. DivのCSSオーバーフロープロパティをhidden(overflow:hidden)に設定します。
  4. 想像をdivの中に入れてください。
  5. 利益.

例えば:

<div style="width:200px;height:200px;overflow:hidden">
    <img src="foo.png" />
</div>
51
j08691

背景サイズを使用して:カバー - http://codepen.io/anon/pen/RNyKzB

CSS:

.image-container {
  background-image: url('http://i.stack.imgur.com/GA6bB.png');
  background-size:cover;
  background-repeat:no-repeat;
  width:250px;
  height:250px;
}  

マークアップ:

<div class="image-container"></div>
31
Philip Nuzhnyy

私は実際に最近この同じ問題に遭遇し、わずかに異なるアプローチで終わりました(私は背景画像を使うことができませんでした)。イメージの方向性を判断するには、わずかなjQueryが必要です(代わりにプレーンなJSを使用することもできます)。

私は それについてのブログ記事 をあなたがもっと説明に興味を持っているけれどもコードがかなり単純であるなら書きました:

HTML:

<ul class="cropped-images">
  <li><img src="http://fredparke.com/sites/default/files/cat-portrait.jpg" /></li>
  <li><img src="http://fredparke.com/sites/default/files/cat-landscape.jpg" /></li>
</ul>

CSS:

li {
  width: 150px; // Or whatever you want.
  height: 150px; // Or whatever you want.
  overflow: hidden;
  margin: 10px;
  display: inline-block;
  vertical-align: top;
}
li img {
  max-width: 100%;
  height: auto;
  width: auto;
}
li img.landscape {
  max-width: none;
  max-height: 100%;
}

jQuery:

$( document ).ready(function() {

    $('.cropped-images img').each(function() {
      if ($(this).width() > $(this).height()) {
        $(this).addClass('landscape');        
      }
    });

});
14
FreddyBushBoy

私は同様の問題を抱えており、背景画像に「妥協」することはできませんでした。私はこれを思いつきました。

<div class="container">
    <img src="http://lorempixel.com/800x600/nature">
</div>

.container {
    position: relative;
    width: 25%; /* whatever width you want. I was implementing this in a 4 tile grid pattern. I used javascript to set height equal to width */
    border: 2px solid #fff; /* just to separate the images */
    overflow: hidden; /* "crop" the image */
    background: #000; /* incase the image is wider than tall/taller than wide */
}

.container img {
    position: absolute;
    display: block;
    height: 100%; /* all images at least fill the height */
    top: 50%; /* top, left, transform trick to vertically and horizontally center image */
    left: 50%;
    transform: translate3d(-50%,-50%,0);
}

//assuming you're using jQuery
var h = $('.container').outerWidth();
$('.container').css({height: h + 'px'});

お役に立てれば!

例: https://jsfiddle.net/cfbuwxmr/1/

2
Zach Botterman

.testimgクラスを使用して、内側の画像に正方形の寸法を持つdivを使用します。

.test {
width: 307px;
height: 307px;
overflow:hidden
}

.testimg {
    margin-left: -76px

}

または画像の背景を持つ四角いdiv。

.test2 {
width: 307px;
height: 307px;
    background: url(http://i.stack.imgur.com/GA6bB.png) 50% 50%
}

ここにいくつかの例があります: http://jsfiddle.net/QqCLC/1/

更新されたSO画像センター

.test {
  width: 307px;
  height: 307px;
  overflow: hidden
}

.testimg {
  margin-left: -76px
}

.test2 {
  width: 307px;
  height: 307px;
  background: url(http://i.stack.imgur.com/GA6bB.png) 50% 50%
}
<div class="test"><img src="http://i.stack.imgur.com/GA6bB.png" width="460" height="307" class="testimg" /></div>

<div class="test2"></div>
1
tech292

CSSを使用する:オーバーフロー:

.thumb {
   width:230px;
   height:230px;
   overflow:hidden
}

画像がレスポンシブ幅のコンテナ内にある場合:

HTML

<div class="img-container">
  <img src="" alt="">
</div>

CSS

.img-container {
  position: relative;

  &::after {
    content: "";
    display: block;
    padding-bottom: 100%;
  }

  img {
    position: absolute;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }
}
0
JKL