任意の画像が与えられた場合、画像の中心から正方形を切り取り、特定の正方形内に表示します。
この質問はこれに似ています:CSSで画像のサイズを変更してトリミングした画像を表示しますが、画像のサイズがわからないため、余白を設定できません。
任意の画像が与えられた場合、画像の中心から正方形を切り取り、特定の正方形内に表示します。
この質問はこれに似ています:CSSで画像のサイズを変更してトリミングした画像を表示しますが、画像のサイズがわからないため、余白を設定できません。
回答:
1つの解決策は、トリミングされた寸法に合わせてサイズ調整された要素内で中央揃えされた背景画像を使用することです。
.center-cropped {
width: 100px;
height: 100px;
background-position: center center;
background-repeat: no-repeat;
}
<div class="center-cropped"
style="background-image: url('http://placehold.it/200x200');">
</div>
img
タグのこのバージョンはimg
タグを保持するため、画像を保存するためにドラッグまたは右クリックする機能を失うことはありません。不透明度のトリックについては、パーカーベネットの功績です。
.center-cropped {
width: 100px;
height: 100px;
background-position: center center;
background-repeat: no-repeat;
overflow: hidden;
}
/* Set the image to fill its parent and make transparent */
.center-cropped img {
min-height: 100%;
min-width: 100%;
/* IE 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
/* IE 5-7 */
filter: alpha(opacity=0);
/* modern browsers */
opacity: 0;
}
<div class="center-cropped"
style="background-image: url('http://placehold.it/200x200');">
<img src="http://placehold.it/200x200" />
</div>
object-fit
/-position
CSS3画像仕様は定義object-fit
とobject-position
一緒の画像コンテンツのスケールと位置をより細かく制御を可能にするプロパティimg
要素。これらを使用すると、目的の効果を得ることができます。
.center-cropped {
object-fit: none; /* Do not scale the image */
object-position: center; /* Center the image within the element */
height: 100px;
width: 100px;
}
<img class="center-cropped" src="http://placehold.it/200x200" />
background-size: cover;
して、元のアスペクト比を維持しながら、divを適切に縮小または塗りつぶすことができます。
img
、SEO のalt
ant title
属性は失われるます。
object-fit: cover;
、もう少しセマンティックに感じられるimgタグを直接する。
私は純粋なCSSソリューションを探していました img
タグ(背景画像の方法ではない)。
私はCSSで作物のサムネイルの目標を達成するためのこの素晴らしい方法を見つけました:
.thumbnail {
position: relative;
width: 200px;
height: 200px;
overflow: hidden;
}
.thumbnail img {
position: absolute;
left: 50%;
top: 50%;
height: 100%;
width: auto;
-webkit-transform: translate(-50%,-50%);
-ms-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);
}
.thumbnail img.portrait {
width: 100%;
height: auto;
}
@Nathan Redblurの回答に似ていますが、縦向きの画像も使用できます。
私にとっては魅力のように機能します。画像について知っておく必要があるのは、.portrait
クラスを設定するために画像が縦長か横長かだけです。そのため、この部分には少しJavascriptを使用する必要がありました。
これを試してください:画像の切り取り寸法を設定し、CSSで次の行を使用します。
object-fit: cover;
img
タグあり、なしの例background-image
このソリューションはimg
タグを保持するため、ドラッグまたは右クリックして画像を保存する機能を失うことなくbackground-image
、CSSで中央揃えとトリミングを行う必要がありません。
非常に高い画像を除いて、アスペクト比を細かく維持します。(リンクを確認してください)
マークアップ
<div class="center-cropped">
<img src="http://placehold.it/200x150" alt="" />
</div>
CSS
div.center-cropped {
width: 100px;
height: 100px;
overflow:hidden;
}
div.center-cropped img {
height: 100%;
min-width: 100%;
left: 50%;
position: relative;
transform: translateX(-50%);
}
@Russと@Alexの回答を使用してangularjsディレクティブを作成しました
2014年以降は興味深いかもしれません:P
html
<div ng-app="croppy">
<cropped-image src="http://placehold.it/200x200" width="100" height="100"></cropped-image>
</div>
js
angular.module('croppy', [])
.directive('croppedImage', function () {
return {
restrict: "E",
replace: true,
template: "<div class='center-cropped'></div>",
link: function(scope, element, attrs) {
var width = attrs.width;
var height = attrs.height;
element.css('width', width + "px");
element.css('height', height + "px");
element.css('backgroundPosition', 'center center');
element.css('backgroundRepeat', 'no-repeat');
element.css('backgroundImage', "url('" + attrs.src + "')");
}
}
});
これを試して:
#yourElementId
{
background: url(yourImageLocation.jpg) no-repeat center center;
width: 100px;
height: 100px;
}
ことを覚えておいてくださいwidth
とheight
あなたのDOM要素は、(ブロックのように、要素を表示されたレイアウトを持っている場合にのみ動作しますdiv
かimg
)。そうでない場合(スパンなど)、display: block;
CSSルールに追加します。CSSファイルにアクセスできない場合は、要素にインラインでスタイルをドロップします。
画像を中央にトリミングできる別の方法があります。
.thumbnail{position: relative; overflow: hidden; width: 320px; height: 640px;}
.thumbnail img{
position: absolute; top: -999px; bottom: -999px; left: -999px; right: -999px;
width: auto !important; height: 100% !important; margin: auto;
}
.thumbnail img.vertical{width: 100% !important; height: auto !important;}
必要なのは、垂直画像に「vertical」クラスを追加することだけです。次のコードで実行できます。
jQuery(function($) {
$('img').one('load', function () {
var $img = $(this);
var tempImage1 = new Image();
tempImage1.src = $img.attr('src');
tempImage1.onload = function() {
var ratio = tempImage1.width / tempImage1.height;
if(!isNaN(ratio) && ratio < 1) $img.addClass('vertical');
}
}).each(function () {
if (this.complete) $(this).load();
});
});
注:「!important」は、imgタグの可能な幅、高さの属性を上書きするために使用されます。