CSS width與min-width與max-width

 

一、CSS中的width

CSS中的width屬性是用來設定一個元素的寬度,

其值可為auto(預設值,browser將會自動計算寬度)、px、%,

另外值得注意的是,CSS中的min-width與max-width屬性是可以與width屬性作用同時存在的,

將會在第二點做舉例。

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        img {
            width: 100%;
            height: auto;
        }
    </style>
</head>
<body>

    <img src="http://www.w3schools.com/css/img_chania.jpg" width="460px" height="345px">
    <p>Resize the browser window to see how the image wil scale when the width is less than 460px.</p>

</body>
</html>

如上例,width屬性為100%代表元素的寬度會等於browser視窗的寬度(父層皆無padding與margin),

正確來說應該是width屬性為100%代表元素的寬度會等於父層的寬度。

CSS的width屬性為100%代表元素的寬度將會覆寫原本img tag內的html width="460px"屬性

 

額外一提,width:100%與margin屬性一起設定的話是不會互相影響是不相干的,

可能有人會認為如果margin屬性再加上去,

則寬度會自動包含margin調整成browser視窗的寬度,

img {
    width: 100%;
    height: auto;
    margin: 0 20%;
}

但實際上是錯的,例如未加margin: 0 20%前,width: 100%等於browser視窗的寬度為400px,

加上margin後則整個父層的寬度會是400px再加上左右20%的margin為400+400*0.2*2=560px,

並會出現X卷軸喔。

 

二、max-width

承上例,我們藉由使用max-width來讓圖片縮放的比例較好看一點

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        img {
            max-width: 100%;
            height: auto;
        }
    </style>
</head>
<body>

    <img src="http://www.w3schools.com/css/img_chania.jpg" width="460" height="345">
    <p>Resize the browser window to see how the image wil scale when the width is less than 460px.</p>

</body>
</html>

設置max-width屬性為100%的意思是,圖片的寬度可以依browser視窗寬度等比例的縮小,但是放大時,

最多只能放大到圖片所設定大小,與browser視窗寬度100%寬度而已。

例如:

max-width設定成80%,html width屬性為460,圖片最多只能放大到460,與browser視窗寬度的80%而已。

 

三、保持長寬比(aspect ratio)

有時為了美觀,也要有保持適當的長寬比技術,範例如下。

 

1、長寬比為1 : 1

<!DOCTYPE html>
<html>
<head>
    <style>
        .container {
            background-color: red;
            width: 100%;
            padding-top: 100%; /* 1:1 Aspect Ratio */
        }
    </style>
</head>
<body>

    <h2>Maintain Aspect Ratio 1:1</h2>
    <p>Resize the window to see the effect.</p>

    <div class="container">

    </div>

</body>
</html>

 

2、長寬比為1 : 2

<!DOCTYPE html>
<html>
<head>
    <style>
        .container {
            background-color: red;
            width: 100%;
            padding-top: 50%; /* 1:2 Aspect Ratio */
        }
    </style>
</head>
<body>

    <h2>Maintain Aspect Ratio 1:2</h2>
    <p>Resize the window to see the effect.</p>

    <div class="container">

    </div>

</body>
</html>

 

由以上範例可知,主要是固定設定「width:100%」與動態設定「padding-top」屬性,來保持長寬比,

例如做長寬比1 : 1時,則padding-top要往下推100%;做長寬比1 : 2時(也就是長寬比為0.5 : 1時),則padding-top只要往下推50%。

那為何這樣就可以達到保時長寬比?我也不曉得,這還蠻不直覺的。

 

3、長寬比為 100 : 56.25

為什麼要用padding-top屬性就可以達到保時長寬比?我想應該是div tag的關係吧,

因為div tag是塊級元素,並沒有特定的高?

現在這個例子是iframe tag是個行內元素

<!DOCTYPE html>
<html>
<head>
    <style>
        iframe {
            background-color: red;
            width: 100%;
            padding-top: 56.25%;
        }
    </style>
</head>
<body>
    <h2>Maintain Aspect Ratio 100:56.25</h2>
    <p>Resize the window to see the effect.</p>
    <iframe width="560" height="315" src="https://www.youtube.com/embed/X0QzdblXcR0" frameborder="0" allowfullscreen></iframe>
</body>
</html>

畫面為

你會發現真的有往下推56.25%,但你的iframe卻是在56.25%之後,這樣很怪耶。

 

改法如下,這樣就比較直覺了。

<!DOCTYPE html>
<html>
<head>
    <style>
        iframe {
            background-color: red;
            width: 100vw;
            height: 56.25vw;
        }
    </style>
</head>
<body>
    <h2>Maintain Aspect Ratio 100:56.25</h2>
    <p>Resize the window to see the effect.</p>
    <iframe width="560" height="315" src="https://www.youtube.com/embed/X0QzdblXcR0" frameborder="0" allowfullscreen></iframe>
</body>
</html>

畫面為