iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
自我挑戰組

大二萌新的學習紀錄系列 第 4

Day 4 : HTML – 別動!你就停在那裡!CSS position定位屬性是什麼?

  • 分享至 

  • xImage
  •  

這裡想和大家介紹一下CSS position到底是什麼
以防大家和我一樣幹了蠢事 (詳情可看Day 2)


position是一個定位屬性,你想要它定位在哪,它就會在那一動也不動
就跟當兵一樣,班長叫你罰站你就罰站 (誤
如果沒有用position,就沒辦法使用top、bottom、left、right控制元素 (很重要!!!)

Position大致上分成5種:

  1. static (預設定位)
  2. relative (相對定位)
  3. absolute (絕對定位)
  4. fixed (固定定位)
  5. sticky (滾動式沾黏定位)

那到底該怎麼使用它們呢?
別急,莫荒莫害怕!讓我和各位娓娓道來

1. Static (預設定位)
Static不會被「指定」定位在某個地方,而是照著頁面預設的寬度自動排版
它也不受top、bottom、left、right的控制
但如果在前面加上marginpadding是可以的喔!(ex:margin-top、padding-left)

讓我們看以下範例

HTML:

<div class="position_static font">
    <p>static:今天天氣晴,是個適合烤肉的好日子R~</p>
</div>

CSS:

.font {
    padding-left:3%;
    font-size:30px;
}
.position_static {
    position:static;
    border:solid 5px rgb(117, 175, 24);
    height:150px;
}

結果如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20210918/20141088VjSPINMLG2.png


2. relative (相對定位)
relative本質上和static是一樣的,但差異在於它可以受top、bottom、left、right控制
所以如果你沒有給它額外的屬性控制,它就會看起來和static一模一樣

讓我們看以下範例

HTML:

<div class="position_relative box_1 font">
    <p>relative_box_1:今天天氣晴,是個適合烤肉的好日子R~</p>
</div>
 <div class="position_relative box_2 font">
     <p>relative_box_2:今天天氣晴,是個適合烤肉的好日子R~</p>
 </div>
<div class="position_relative box_3 font">
    <p>relative_box_3:今天天氣晴,是個適合烤肉的好日子R~</p>
</div>

CSS:

.position_relative{
    position:relative;
    border:solid 5px rgb(117, 175, 24);
    height:150px;
    margin:1% auto;
}

結果如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20210918/20141088tKnEUmkL78.png

那我如果在box_2加上一些屬性去控制它

CSS:

.box_2 {
    top:50px;
    left:5%;
}

它就會依照原本的位置「相對地」偏移
https://ithelp.ithome.com.tw/upload/images/20210918/201410883CSSUukmHr.png


3. absolute (絕對定位)
absolute在position是一個很有趣的東西
它會依據「上層容器」去定位,且那個容器要有設置relative
如果設置static,它會直接依<body></body>去定位

因為static是「不可定位元素」,而absolute的上層必須是「可定位元素」(很重要!!!)
所以通常都會在absolute外面再包一層relative
再用top、bottom、left、right控制

讓我們看以下範例

HTML:

<div class="position_relative_container font">
    <p>relative:今天天氣晴,是個適合烤肉的好日子R~</p>
    <div class="position_absolute font">
        <p>absolute:今天天氣晴,是個適合烤肉的好日子R~</p>
    </div>
</div>

CSS:

.position_relative_container {
    position:relative;
    border:solid 5px rgb(117, 175, 24);
    width:800px;
    height:600px;
}
.position_absolute {
    position:absolute;
    border:solid 5px rgb(233, 91, 48);
    width:350px;
    height:175px;
    right:0;
    bottom:125px;
}

結果如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20210918/20141088u00M4nOGK5.png


4. fixed (固定定位)
fixed它會依照你瀏覽器視窗去定位
所以不管你頁面滾動到哪,它都會陰魂不散的,定在那一動也不動

讓我們看以下範例

HTML:

<div class="position_fixed font">
    <p>fixed:今天天氣晴,是個適合烤肉的好日子R~</p>
</div>

CSS:

.position_fixed {
    position:fixed;
    border:solid 5px rgb(117, 175, 24);
    height:200px;
    right:0;
    bottom:0;
}

結果如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20210918/20141088nOqz6VNDSd.png


5. sticky (滾動式沾黏定位)
sticky和fixed有點相似,但又不太像
sticky要視窗滾動至「超過它」才會起作用,沒有超過就會和一般的box一樣

記得要設置top,設置其他的(bottem、left、right)都不會起作用 (很重要!!!)
可以把它想像成便利貼,只有最上面有黏性,其餘地方都是懸空的

讓我們看以下範例

HTML:

<div class="box font">
    <p>box_1:今天天氣晴,是個適合烤肉的好日子R~</p>
</div>
<div class="position_sticky font">
    <p>sticky:今天天氣晴,是個適合烤肉的好日子R~</p>
<div>
<div class="box font">
    <p>box_2:今天天氣晴,是個適合烤肉的好日子R~</p>
</div>
<div class="box font">
    <p>box_3:今天天氣晴,是個適合烤肉的好日子R~</p>
</div>
<div class="box font">
    <p>box_4:今天天氣晴,是個適合烤肉的好日子R~</p>
</div>

CSS:

.box {
    border:solid 5px rgb(117, 175, 24);
    height:250px;
    margin:2% auto;
}
.position_sticky {
    position:sticky;
    border:solid 5px rgb(233, 91, 48);
    height:175px;
    top:20px;
}

在還沒滾動前長這樣
https://ithelp.ithome.com.tw/upload/images/20210918/201410885K1rALbN3I.png

往下滾動且超過它時,它會固定在頁首,且距離20px(因為有設定top:20)
https://ithelp.ithome.com.tw/upload/images/20210918/20141088MhdUbPAitK.png


Position大致上就這樣
希望大家看完後能對position更加的了解

再次呼籲,position是用來定位元素,它僅適合將元素「固定」在你想要的地方
不是拿來排版的!!!!! 切記!!!!!
要排版請用Flex和grid,易操作且排版效果極佳(現今網頁大多都用這兩個屬性排版)


上一篇
Day 3 : HTML - 快速打出HTML的代碼,超好用的Emmet語法!
下一篇
Day 5 : HTML - 網頁排版超強神器,CSS Flex到底是什麼?
系列文
大二萌新的學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言