2010-09-20 186 views

回答

106

如果您只在圖像上定義了一個尺寸,圖像寬高比將始終保留。

問題是圖像比您更喜歡的更大/更高?

您可以將它放在設置爲圖像所需的最大高度/寬度的DIV中,然後設置overflow:hidden。那會超出你想要的任何東西。

如果圖像的寬度和高度都是100%:auto,並且您認爲它太高,那是因爲縱橫比被保留。您需要裁剪或更改寬高比。

請提供一些關於您具體嘗試完成的內容的更多信息,我會盡力提供更多幫助!

---編輯根據反饋---

你熟悉的max-widthmax-height屬性?你可以隨時設置它們。如果你沒有設置任何最小值,並且設置了最大高度和寬度,那麼你的圖像將不會被扭曲(高寬比將被保留),並且它不會大於任何維度最長並達到其最大值的值。

+13

如果圖像比它寬,我會使用height = 100%和width = auto,如果圖像比寬高,我會使用width = 100%,height = auto。我根本就不知道這是什麼情況?通過最大高度/寬度裁剪會工作 - 但如果有一種方法不是 - 我寧願使用它... – 2010-09-20 16:15:13

+2

那麼,你是在設計一個流體或固定寬度的佈局?如果您使用的是固定寬度佈局,則始終可以將寬度設置爲100%,並且圖像可以適當縮放,但可能會非常高。您是否試圖在一段文字中放置圖像,或將其用作橫幅或作爲背景?如果您可以顯示您打算使用它的頁面或描述環境,我可以幫助您更多。請參閱上面的編輯。 – Andrew 2010-09-21 01:20:34

+0

在我的img上使用max-height允許我在約束圖像的同時保持其寬高比 – northamerican 2014-07-17 14:11:03

43

通過將CSS max-width屬性設置爲100%,圖像將填充其父項元素的寬度,但不會呈現大於其實際大小的寬度,從而保留分辨率。

height屬性設置爲auto可以保持圖像的高寬比,使用此技術可以覆蓋靜態高度並使圖像在所有方向上按比例彎曲。

img { 
    max-width: 100%; 
    height: auto;  
} 
+1

還設置'height'爲'auto'會導致圖像浮動時迴流 – 2013-03-15 12:05:34

62

幾年後,尋找相同的要求,我找到了一個使用background-size的CSS選項。

它應該在現代瀏覽器(IE9 +)中工作。

<div id="container" style="background-image:url(myimage.png)"> 
</div> 

而且款式:

#container 
{ 
    width: 100px; /*or 70%, or what you want*/ 
    height: 200px; /*or 70%, or what you want*/ 
    background-size: cover; 
    background-position: center; 
    background-repeat: no-repeat; 
} 

參考:http://www.w3schools.com/cssref/css3_pr_background-size.asp

而且演示:http://www.w3schools.com/cssref/playit.asp?filename=playcss_background-size

+1

理想的解決方案,這可悲的是IE8不支持:( – japrescott 2014-06-19 08:27:14

+0

noiceeeee !!!!!! – scniro 2016-05-25 15:16:41

+0

這是理想的解決方案,但是如果您在傳送帶上執行此操作,則會導致圖像在每次滑動後都會變成空白屏幕 – kloddant 2017-06-06 19:24:28

2

這是我想出了一個非常簡單的解決方案如下孔卡的鏈接後,並看着背景大小。它將圖像向上吹,然後將其集中在外部容器中,而不是縮放它。

<style> 
#cropcontainer 
{ 
    width: 100%; 
    height: 100%; 
    background-size: 140%; 
    background-position: center; 
    background-repeat: no-repeat; 
} 
</style> 

<div id="cropcontainer" style="background-image: url(yoururl); /> 
+0

好的智能解決方案!有了額外的40%的補償長寬比,謝謝! – Sascha 2016-07-09 17:23:39

+0

你也可以使用'background-size:contains;'將圖片放入背景中。 – 2017-03-28 19:04:12

3

最好在應該考慮寬高比的尺寸上使用自動。如果不設置其他屬性爲自動,大多數瀏覽器現在假設你要尊重寬高比,但不是所有的人(IE10在Windows Phone 8不,例如)

width: 100%; 
height: auto; 
0

使用JQuery等等,因爲CSS是一個普遍的誤解(關於簡單設計目標的無數問題和討論表明了這一點)。

CSS不可能做你看起來希望的東西:圖像的寬度應爲100%,但如果這個寬度導致高度過大,則應使用最大高度 - 當然,應保持正確的比例。

-1

我想這就是你要找的東西,我一直在找我的自我,但後來我又記得它,因爲我找到了代碼。

background-repeat: repeat-x; 
background-position: top; 
background-size:auto; 
background-attachment: fixed; 

數字進化正在進行中。

14

有同樣的問題。對我來說,問題是,height屬性也已經在別處定義的,固定的,就像這樣:

.img{ 
    max-width: 100%; 
    max-height: 100%; 
    height: inherit !important; 
} 
+1

這很棒,很多 – 2016-12-07 16:03:51

1

不跳進一個老問題,但...

#container img { 
     max-width:100%; 
     height:auto !important; 
} 

即使這是如果您使用的是像WordPress這樣的CMS來爲您設置高度和寬度的CMS,則此功能非常適用,因爲您在高度上使用!重要覆蓋。

3

其中一個答案包括background-size:包含 css聲明,我非常喜歡它,因爲它直觀地陳述了你想要做什麼以及瀏覽器是做什麼的。

不幸的是,遲早你會需要申請一個影子,這不幸的是不能很好地與背景圖像解決方案發揮。

假設您有一個容器,其容量爲響應,但它具有明確界定最小和最大寬度和高度的邊界。

.photo { 
    max-width: 150px; 
    min-width: 75px; 
    max-height: 150px; 
    min-height: 75px; 
} 

和容器具有必須意識到所述容器的高度的像素的以避免得到該溢出或裁剪非常高的圖像一個img。

img還應該定義100%的最大寬度,以便首先允許渲染較小的寬度,其次是基於參數的百分比。 ;

.photo > img { 
    max-width: 100%; 
    max-height: 150px; 
    -webkit-box-shadow: 0 0 13px 3px rgba(0,0,0,1); 
    -moz-box-shadow: 0 0 13px 3px rgba(0,0,0,1); 
    box-shadow:   0 0 13px 3px rgba(0,0,0,1); 
} 

注意,它有一個很好的陰影)

在此小提琴享受活例如:http://jsfiddle.net/pligor/gx8qthqL/2/

+0

乾杯 - 正是我想要的 – Eli 2015-09-01 20:38:14

2

我使用這個用於與高度的矩形容器和寬度固定的,但用的圖像不同的尺寸。

img { 
    max-width: 95%; 
    max-height: 15em; 
    width: auto !important; 
} 
8

簡單的解決方案:

min-height: 100%; 
min-width: 100%; 
width: auto; 
height: auto; 
margin: 0; 
padding: 0; 

順便說一句,如果你想中心在父DIV容器,你可以添加這些CSS屬性:

position: absolute; 
top: 50%; 
left: 50%; 
transform: translate(-50%, -50%); 

它應該按預期工作:)

+0

upvoted the first第二部分不適合我... :( – 2017-03-19 08:52:51

+0

只是一個問題 - 我如果圖像大於容器的100%,則會溢出並需要滾動條或裁剪。不確定,如何實現這一點,仍然限制容器的最大尺寸。如果設置最大寬度和高度,則不再保留寬高比。 – JustAMartin 2017-10-20 11:30:49

9

簡單優雅的工作解決方案:

img { 
    width: 600px; /*width of parent container*/ 
    height: 350px; /*height of parent container*/ 
    object-fit: contain; 
    position: relative; 
    top: 50%; 
    transform: translateY(-50%); 
} 
+1

感謝您提醒我有關「適合對象」的問題。正是我需要的。 – 2016-12-01 16:33:56

+5

這是一個理想的解決方案,但不幸的是,截至2017年3月28日,IE和Edge的任何版本都不支持'object-fit'。 – 2017-03-28 19:02:01

-1

這是不可能沒有JS,所以我寫小劇本:

var resize_images; 

resize_images = function(resize) { 
    var images, resize_process, resize_single; 
    if (resize == null) { 
    resize = false; 
    } 
    resize_single = function(that) { 
    if (that.height() <= 200) { 
     return that.css({ 
     'width': 'auto', 
     'height': '100%' 
     }); 
    } else { 
     return that.css({ 
     'width': '100%', 
     'height': 'auto' 
     }); 
    } 
    }; 
    resize_process = function(that) { 
    that.css({ 
     'width': 'auto', 
     'height': 'auto' 
    }); 
    resize_single(that); 
    return resize_single(that); 
    }; 
    images = $('.image img'); 
    return images.each(function() { 
    if (resize) { 
     return resize_process($(this)); 
    } else { 
     return $(this).on('load', function() { 
     return resize_process($(this)); 
     }).each(function() { 
     if(this.complete) $(this).trigger('load'); 
     }); 
    } 
    }); 
}; 

resize_images(); 

$(window).resize(function() { 
    return resize_images(true); 
}); 

CoffeeScript

而且SCSS:

.image { 
    position: relative; 
    overflow: hidden; 
    width: 50%; 
    height: 200px; 
    float: left; 

    img { 
    position: absolute; 
    left: 50%; 
    top: 50%; 
    -webkit-transform: translate(-50%, -50%); 
    -ms-transform: translate(-50%, -50%); 
    transform: translate(-50%, -50%); 
    } 
} 

你仍然必須堅持寬度或高度父塊。如果代碼的大小小於父塊大小,則此代碼將高檔圖像。

jsfiddle.net

-1

試試這個

background-size: 100% 100%; 
    background-image: url("PATH_TO_IMAGE"); 
    background-repeat: no-repeat; 
相關問題