# Images / 圖片及多媒體設定
:::warning
檔案名稱:sass / element / <span class="focus2">_image.scss</span>
:::
1. **<span class="focus">[圖片形狀](#item-1):arrow_down:</span>**
2. **<span class="focus">[設定圖片外框比例](#item-2):arrow_down:</span>**
3. **<span class="focus">[設定圖片object-fit屬性](#item-3):arrow_down:</span>**
4. **<span class="focus">[使用Lazyload延遲載入](#item-4):arrow_down:</span>**
5. **<span class="focus">[Picturefill 搭配 Lazyload](#item-5):arrow_down:</span>**
---
圖片在網頁上需要設定的細節非常多,HyUI提供以下快速設定:
## <span style="font-size:2em;margin-right:.2em;color:#21BAFF;" id="item-1">01. </span>圖片形狀
直接在<span class="focus3">img</span>加上所需要的<span class="focus3">class</span>立即產生效果
<iframe height="450" style="width: 100%;" scrolling="no" title="" src="https://codepen.io/u00hyui/embed/RwVwqmy?defaultTab=result&theme-id=dark" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/u00hyui/pen/RwVwqmy">
</a> by u00hyui (<a href="https://codepen.io/u00hyui">@u00hyui</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
```html=
<img src="..." >
<img src="..." class="img_circle">
<img src="..." class="img_rounded"> //可用變數控制導角數值
```
---
## <span style="font-size:2em;margin-right:.2em;color:#21BAFF;" id="item-2">02. </span>設定圖片外框比例
在單圖的部分也可在SASS設定比例,<span class="focus3">任何比例</span>都可以,<span class="focus3">1:1</span>、<span class="focus3">4:3</span>、<span class="focus3">16:9</span> 為常見比例,設定方法請在<span class="focus3">img</span>父層標籤設定<span class="focus3">@include aspect-ratio(寬度值,高度值)</span>即可,如以下範例:
<iframe height="430" style="width: 100%;" scrolling="no" title="設定圖片外框比例" src="https://codepen.io/u00hyui/embed/OJmJdam?defaultTab=result&theme-id=dark" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/u00hyui/pen/OJmJdam">
設定圖片外框比例</a> by u00hyui (<a href="https://codepen.io/u00hyui">@u00hyui</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
```html=
<div class="img-container1"><img src="..." alt="..."></div>
<div class="img-container2"><img src="..." alt="..."></div>
<div class="img-container3"><img src="..." alt="..."></div>
```
### SCSS設定
```css=
.img-container1{
@include aspect-ratio(1,1); //設定比例 1:1
}
.img-container2{
@include aspect-ratio(4,3); //設定比例 4:3
}
.img-container3{
@include aspect-ratio(16,9); //設定比例 16:9
}
```
---
## <span style="font-size:2em;margin-right:.2em;color:#21BAFF;" id="item-3">03. </span>設定圖片object-fit屬性
因外框已設定比例,但內含之圖片往往不盡然與外框比例相符,針對不同圖片呈現需求可於<span class="focus3">img</span>標籤中設定不同的classname給予不同之圖片效果,包括<span class="focus3">none</span>、<span class="focus3">contain</span>、<span class="focus3">fill</span>、<span class="focus3">cover</span>,屬性與<span class="focus3">object-fit</span>之css設定相同。
<iframe height="430" style="width: 100%;" scrolling="no" title="設定圖片object-fit屬性" src="https://codepen.io/u00hyui/embed/BaRabLY?defaultTab=result&theme-id=dark" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/u00hyui/pen/BaRabLY">
設定圖片object-fit屬性</a> by u00hyui (<a href="https://codepen.io/u00hyui">@u00hyui</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
```html=
<div class="img-container1"><img src="..." alt="..." class="cover"></div>
<div class="img-container2"><img src="..." alt="..." class="cover"></div>
<div class="img-container3"><img src="..." alt="..." class="cover"></div>
```
### 嵌入iframe的結構完全如上述圖片設定
<iframe height="430" style="width: 100%;" scrolling="no" title="嵌入iframe的結構" src="https://codepen.io/u00hyui/embed/MWmWxmd?defaultTab=result&theme-id=dark" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/u00hyui/pen/MWmWxmd">
嵌入iframe的結構</a> by u00hyui (<a href="https://codepen.io/u00hyui">@u00hyui</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
```html=
<div class="img-container1"><iframe src="..."></iframe></div>
<div class="img-container2"><iframe src="..."></iframe></div>
<div class="img-container3"><iframe src="..."></iframe></div>
```
### 不同object-fit效果
<iframe height="360" style="width: 100%;" scrolling="no" title="不同object-fit效果" src="https://codepen.io/u00hyui/embed/LYyYazR?defaultTab=result&theme-id=dark" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/u00hyui/pen/LYyYazR">
不同object-fit效果</a> by u00hyui (<a href="https://codepen.io/u00hyui">@u00hyui</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
### 圖片比例,以object-fit css做設定
```html=
<div class="img-container"><img src="..." class="none" ></div>
<div class="img-container"><img src="..." class="contain" ></div>
<div class="img-container"><img src="..." class="fill" ></div>
<div class="img-container"><img src="..." class="cover" ></div>
```
## JQuery設定:round_pushpin:
```javascript=
/*--------------------------------------------------------*/
/////設定img 在IE9+ SAFARI FIREFOX CHROME 可以object-fit/////
/*--------------------------------------------------------*/
var userAgent, ieReg, ie;
userAgent = window.navigator.userAgent;
ieReg = /msie|Trident.*rv[ :]*11\./gi;
ie = ieReg.test(userAgent);
if (ie) {
$(".img-container").each(function() {
var imgUrl = $(this).find('img').attr('data-src');
var $container = $(this);
$container.has('.none').addClass('ie-object-none');
$container.has('.none').css('backgroundImage', 'url(' + imgUrl + ')');
$container.has('.cover').addClass('ie-object-cover');
$container.has('.cover').css('backgroundImage', 'url(' + imgUrl + ')');
$container.has('.fill').addClass('ie-object-fill');
$container.has('.fill').css('backgroundImage', 'url(' + imgUrl + ')');
$container.has('.contain').addClass('ie-object-contain');
$container.has('.contain').css('backgroundImage', 'url(' + imgUrl + ')');
});
}
```
---
## <span style="font-size:2em;margin-right:.2em;color:#21BAFF;" id="item-4">04. </span>使用Lazyload延遲載入
<iframe height="650" style="width: 100%;" scrolling="no" title="圖片形狀" src="https://codepen.io/u00hyui/embed/gOWOyLZ?defaultTab=result&theme-id=dark" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/u00hyui/pen/gOWOyLZ">
圖片形狀</a> by u00hyui (<a href="https://codepen.io/u00hyui">@u00hyui</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
```html=
<div class="img-container">
<img data-src="..." alt="圖片說明" class="lazy">
<noscript><img src="..."></noscript> <!-- 關閉js無障礙用-->
</div>
```
:::warning
請注意 :warning: slick套件本身有lazyload設定,請參考 [slider.htm](/Rd3leLQ0S3KGfHlJ3oS8ag)
:::
## JQuery設定:round_pushpin:
頁面如有<span class="focus3">img</span>class有設定<span class="focus3">lazy</span>皆會套用lazyload的效果。
```javascript=
/*-----------------------------------*/
////////////// lazy load //////////////
/*-----------------------------------*/
if ($("img.lazy").length > 0) {
$("img.lazy").show().lazyload({
placeholder: 'images/basic/placeholder.gif',
effect: "fadeIn",
fadeTime: 600
});
}
```
---
## <span style="font-size:2em;margin-right:.2em;color:#21BAFF;" id="item-5">05. </span>Picturefill 搭配 Lazyload
<iframe height="380" style="width: 100%;" scrolling="no" title="" src="https://codepen.io/u00hyui/embed/ExmxJow?defaultTab=result&theme-id=dark" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/u00hyui/pen/ExmxJow">
</a> by u00hyui (<a href="https://codepen.io/u00hyui">@u00hyui</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
### 建議縮圖標準
<table>
<thead>
<tr>
<th>media尺寸</th>
<th>圖片建議寬度尺寸</th>
</tr>
</thead>
<tbody>
<tr>
<td>source media="(min-width: 1200px)</td>
<td><span style="color:red">1960</span></td>
</tr>
<tr>
<td>source media="(min-width: 992px)</td>
<td><span style="color:red">1200</span></td>
</tr>
<tr>
<td>source media="(min-width: 576px)</td>
<td><span style="color:red">900</span></td>
</tr>
<tr>
<td>source media="(max-width: 575px)</td>
<td><span style="color:red">600</span></td>
</tr>
</tbody>
</table>
```html=
<picture>
<source media="(min-width: 1200px)" srcset="images/demo/01.jpg">
<source media="(min-width: 992px)" srcset="images/demo/02.jpg">
<source media="(min-width: 576px)" srcset="images/demo/03.jpg">
<source media="(max-width: 575px)" srcset="images/demo/04.jpg">
<img data-src="images/demo/01.jpg" class="lazy">
<noscript><img src="images/demo/01.jpg"></noscript>
<!-- img都以最大圖為標準 -->
</picture>
```
:::warning
請注意 :warning:
* noscript為必要加上的設定,因為data-src和data-oringinal並沒有把src路徑顯示,圖會出不來。
* 請先跟工程師確認能否產生縮圖以及確定斷點。
:::
<span class="focus3">sourece media</span>的部分可調整斷點數值,目前是使用hyUI預設的[斷點](https://),<span class="focus3">srcset</span>在製作時可用[https://placeholder.com/](https://placeholder.com/) 產生最佳的圖像大小。 特別注意的是:在不支援<span class="focus3">picture</span>或是關閉無障礙時,<span class="focus3">img</span>的<span class="focus3">data-src</span>以及<span class="focus3">noscript</span>的<span class="focus3">src</span>都帶入最大尺寸的圖像尤佳。
### 範例:
```html=
<picture>
<source media="(min-width: 1200px)" srcset="大尺寸">
<source media="(min-width: 992px)" srcset="中尺寸">
<source media="(min-width: 576px)" srcset="小尺寸">
<source media="(max-width: 575px)" srcset="超小尺寸">
<img data-src="大尺寸" class="lazy">
<noscript><img src="大尺寸"></noscript>
</picture>
```
<style>
/* 顏色設定 <span class="blue"></span>*/
.title{
font-size: 26px; color: #fff;
background:#00469C; display:inline-block;
padding: 10px 20px 10px 30px;
border-radius: 4px;
}
.sub-title{ font-size: 20px; color: #00469C; }
.box{
padding: 1em 2em;
background:#f5f5f5;
margin: 10px 0;
border: solid 1px #aaa;
}
.focus { color: #B20050; }
.focus2 {
color: #222;
border: solid 1px #c8c8c8;
display: inline-block;
padding: 2px 10px; margin: 0 4px;
border-radius: 4px;
background: #fff;
}
.focus3{
display: inline-block;
background: #f1f1f1;
padding: 0.1em 0.8em;
border: 1px solid #f1f1f1;
margin: 0px 5px;
line-height: 1.35em;
border-radius: 4px;
color: #B20050;
margin-top: 2px;
font-size: 15px;
font-weight: bold;
}
.link{ font-size: 20px; color: #B20050;}
.ui-infobar{ max-width:95%; }
.markdown-body{ max-width:95%; }
</style>