圖片布局css


  • 對於平時項目開發中,經常要展示圖片。什么水平居中顯示,垂直居中顯示,水平或垂直居中顯示...我們的發際線就是這樣往后退的。
  • 接下來要講的就是對於各種圖片布局的css實現(這里針對的是img標簽的不會使用到background)

1.最簡單的水平居中

  <style>
    .exa1{
      width: 500px;
      height: 300px;
      margin: 0 auto;
      border: 1px solid #f00;
    }
    .exa1 img {
      display: block;
      width: 300px;
      margin: 0 auto;
    }
  </style>
</head>
<body>
  <h5>1.水平居中</h5>
  <div class="exa1">
    <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1513482866&di=b7de9d07063752ad42c09826014e5a8d&imgtype=jpg&er=1&src=http%3A%2F%2Fpic1.5442.com%2F2015%2F0305%2F07%2F001.jpg" alt="">
  </div>
</body>
</html>

效果如下:
水平居中

2.垂直居中(這里介紹兩種)

第一種:

在圖片父元素添加一個偽類before,利用vertical-align: middle的特性讓圖片垂直居中,不過感覺不是很方便

<style>
	.exa2{
		width: 500px;
		height: 300px;
		margin: 0 auto;
		border: 1px solid #f00;
	}
	.exa2::before{
		content: "";
		display: inline-block;
		height: 300px;
		vertical-align: middle;
	}
	.exa2 img {
		width: 300px;
		vertical-align: middle;
	}
</style>

<div class="exa2">
    <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1513482866&di=b7de9d07063752ad42c09826014e5a8d&imgtype=jpg&er=1&src=http%3A%2F%2Fpic1.5442.com%2F2015%2F0305%2F07%2F001.jpg" alt="">
  </div>
第二種:

我比較推薦第二種使用css3的新屬性,不要跟我說兼容,我不管。。。。
這里主要用到transform的translateY它可以讓元素基於它本身移動,而且參數能填寫自身的百分百,看代碼好了

<style>
	.exa2{
		width: 500px;
		height: 300px;
		margin: 0 auto;
		border: 1px solid #f00;
	}
	.exa2 img {
		position: relative;			// 這里通過定位,也可以選擇用absolute,看自己需要移動相對容器50%,在向上移動自身的50%,就達到垂直居中的效果了
		top: 50%;
		transform: translateY(-50%);
	}
</style>

<div class="exa2">
    <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1513482866&di=b7de9d07063752ad42c09826014e5a8d&imgtype=jpg&er=1&src=http%3A%2F%2Fpic1.5442.com%2F2015%2F0305%2F07%2F001.jpg" alt="">
  </div>

效果如下:
垂直居中

垂直水平居中

這個我想通過上面說的應該也能猜到怎么實現了

.exa2 img {
      width: 300px;
      position: relative;
      top: 50%;
      left: 50%;
      transform: translate(-50%,-50%);
    }

就是加個left和translateX,其它都一樣,如果要用垂直居中的第一種方法在父元素增加text-alegn:center;效果是一樣的。代碼就不貼了。
效果如下:
垂直水平居中


  • ps: 上面說到都是圖片在位置上的轉換,其實還有一種更簡單的方法,就是object-position屬性,用這個輕松簡單快捷搞定所有你要的布局,可是它有一個之名缺點就是,IE下全方位不支持。如果不用兼容IE的建議直接懟這個。

用法:
object-position:value, value;
value可以是'center', 'left', 'bottom', 'right'或者是百分百,px;


圖片自適應寬度或高度100%

可能項目中會有這種情況,容器大小是固定的,可是圖片的尺寸確不同的。
這里就可以用到object-fit了在通過垂直水平居中就可以達到很好的效果了(同樣這里也是不兼容大IE的)。下面是object-fit的值:

  • fill

被替換的內容的大小,以填補該元素的內容框:對象的具體對象的大小是元素的使用寬度和高度。

  • contain

被替換的內容的大小,為自身寬高比不變,適應該元素的內容框的大小:它的具體對象的大小被解析為對元素的使用寬度和高度的含有約束。

  • cover

被替換的內容的尺寸卻使元件的整個內容框,以保持其長寬比其具體的對象的大小被解析為針對元素的使用的寬度和高度的蓋約束。

  • none

被替換的內容的尺寸卻使元件的整個內容框,以保持其長寬比其具體的對象的大小被解析為針對元素的使用的寬度和高度的蓋約束。

  • scale-down

內容的尺寸仿佛none或contain指定了,取將導致更小的具體對象的大小。

用法:

img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

如果想要兼容性好點可以用下面的方法,不過缺點就是圖片的自身尺寸要比容器大才行:

  <style>
    .exa1{
      width: 500px;
      height: 400px;
      margin: 0 auto;
      border: 1px solid #f00;
    }
    .exa1 img {
      display: block;
      max-width: 100%;
      max-height: 100%;
      position: relative;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
  </style>
</head>
<body>
  <h5>圖片自適應寬度或高度100%</h5>
  <div class="exa1">
    <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1513482866&di=b7de9d07063752ad42c09826014e5a8d&imgtype=jpg&er=1&src=http%3A%2F%2Fpic1.5442.com%2F2015%2F0305%2F07%2F001.jpg" alt="">
  </div>

</body>
</html>

效果圖如下:

圖片要鋪滿整個容器,但是不能變形

這里只能用到object-fit的cover;不過有兼容性問題。

img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

效果如下:
鋪滿


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM