ความแตกต่างระหว่างการวางตำแหน่งแบบคงที่และแบบสัมพัทธ์


89

ใน CSS การวางตำแหน่งคงที่ (ค่าเริ่มต้น) และการวางตำแหน่งสัมพัทธ์แตกต่างกันอย่างไร


21
ความแตกต่างคือคุณพิมพ์บ่อยposition: relativeและคุณไม่เคยพิมพ์position: static:)
30

คำตอบ:


169

การวางตำแหน่งแบบคงที่เป็นรูปแบบการกำหนดตำแหน่งเริ่มต้นสำหรับองค์ประกอบ ซึ่งจะแสดงในหน้าที่แสดงเป็นส่วนหนึ่งของโฟลว์ HTML ปกติ องค์ประกอบในตำแหน่งที่คงที่ไม่เชื่อฟังleft, top, rightและbottomกฎระเบียบ:

องค์ประกอบที่อยู่ในตำแหน่งคงที่เป็นไปตามโฟลว์ HTML ปกติ

ตำแหน่งสัมพัทธ์ช่วยให้คุณระบุเฉพาะเจาะจงชดเชย ( left, topฯลฯ ) ซึ่งจะสัมพันธ์กับตำแหน่งปกติขององค์ประกอบในการไหลเวียนของ HTML ดังนั้นถ้าฉันมีกล่องข้อความอยู่ในกล่องข้อความdivฉันสามารถใช้การวางตำแหน่งสัมพัทธ์บนกล่องข้อความเพื่อให้แสดงในตำแหน่งที่เฉพาะเจาะจงโดยเทียบกับตำแหน่งที่ปกติจะวางไว้ภายในdiv:

องค์ประกอบที่อยู่ในตำแหน่งที่ค่อนข้างเป็นไปตามโฟลว์ HTML แต่ให้ความสามารถในการปรับตำแหน่งเมื่อเทียบกับตำแหน่งปกติในโฟลว์ HTML

นอกจากนี้ยังมีการวางตำแหน่งแบบสัมบูรณ์ - โดยที่คุณระบุตำแหน่งที่แน่นอนขององค์ประกอบที่สัมพันธ์กับเอกสารทั้งหมดหรือองค์ประกอบที่อยู่ในตำแหน่งถัดไปที่อยู่ถัดจากโครงสร้างองค์ประกอบ :

องค์ประกอบที่อยู่ในตำแหน่งที่แน่นอนจะถูกนำออกจากโฟลว์ HTML และสามารถวางตำแหน่งที่เฉพาะเจาะจงในเอกสาร ...

และเมื่อposition: relativeใช้ a กับองค์ประกอบหลักในลำดับชั้น:

... หรือวางตำแหน่งที่สัมพันธ์กับองค์ประกอบหลักแรกในต้นไม้ HTML ที่อยู่ในตำแหน่งที่ค่อนข้าง

สังเกตว่าองค์ประกอบตำแหน่งที่แน่นอนของเราเชื่อมโยงกับองค์ประกอบที่อยู่ในตำแหน่งที่ค่อนข้างแน่นอนอย่างไร

และสุดท้ายมีการแก้ไข การวางตำแหน่งคงที่จะ จำกัด องค์ประกอบไว้ที่ตำแหน่งเฉพาะในวิวพอร์ตซึ่งจะอยู่ในตำแหน่งระหว่างการเลื่อน:

องค์ประกอบตำแหน่งคงที่จะถูกนำออกจากโฟลว์ HTML เช่นกัน แต่ไม่ถูกผูกไว้กับวิวพอร์ตและจะไม่เลื่อนไปพร้อมกับหน้า

นอกจากนี้คุณยังสามารถสังเกตพฤติกรรมที่องค์ประกอบตำแหน่งคงที่ไม่ทำให้เกิดการเลื่อนเนื่องจากไม่ถือว่าถูกผูกไว้กับวิวพอร์ต:

องค์ประกอบตำแหน่งคงที่ไม่มีผลต่อการเลื่อน

ในขณะที่องค์ประกอบที่อยู่ในตำแหน่งที่แน่นอนยังคงถูกผูกไว้กับวิวพอร์ตและจะทำให้เกิดการเลื่อน:

องค์ประกอบที่อยู่ในตำแหน่งที่แน่นอนจะยังคงได้รับผลกระทบจากขอบเขตของวิวพอร์ตเว้นแต่จะใช้โอเวอร์โฟลว์ในองค์ประกอบหลัก

.. ไม่ว่าองค์ประกอบหลักของคุณจะใช้overflow: ?ในการกำหนดลักษณะการทำงานของการเลื่อน (ถ้ามี)

ด้วยการวางตำแหน่งที่แน่นอนและตำแหน่งคงที่องค์ประกอบจะถูกนำออกจากโฟลว์ HTML


4
คำตอบที่ดี แต่ (สำหรับตำแหน่งสัมพัทธ์) ไม่ใช่ค่าชดเชยตามตำแหน่งปกติขององค์ประกอบใช่หรือไม่
Baztoune

4
ฉันเห็นด้วยกับ Baztoune คำจำกัดความนี้สำหรับองค์ประกอบที่วางตำแหน่งค่อนข้างทำให้เข้าใจผิด องค์ประกอบA staticและrelativeองค์ประกอบจะเหมือนกันยกเว้นในกรณีหลังคุณสามารถเปลี่ยนตำแหน่งโดยสัมพันธ์กับตำแหน่งเดิมไม่ใช่องค์ประกอบที่มี - นั่นคือที่absoluteมานอกจากนี้เช่นเดียวกับองค์ประกอบที่วางตำแหน่งโดยใช้ค่าอื่นนอกเหนือจากที่staticคุณสามารถz-indexใช้ได้
Ryan Williams

ฉันได้ปรับปรุงคำตอบนี้ใหม่เพื่อกำหนดตำแหน่งสัมพัทธ์และรูปภาพที่รวมไว้ให้แม่นยำยิ่งขึ้นเพื่อแสดงให้เห็นถึงประเภทตำแหน่งต่างๆ
Matthew Abbott

3
ฉันสงสัยว่าเหตุใด CSS จึงยังคงใช้งานposition: static;แทนที่จะเพียงแค่แทนที่ด้วยposition: relative;ค่าเริ่มต้น? หากใครไม่ต้องการไปยังรายการตำแหน่งอื่น ๆ กว่าtop: 0;และleft: 0;จากนั้นให้ไม่ทำมันใช่มั้ย? มีเหตุผลพื้นฐานหรือไม่ที่ทำไมposition: static;ยังต้องเป็นส่วนหนึ่งของ CSS
อัด 2208

8
@ Cram2208 เนื่องจากสัมพัทธ์ทำให้โหนดที่อยู่ในตำแหน่งสัมบูรณ์ของเด็กอยู่ในตำแหน่งที่สัมพันธ์กับพวกเขาแบบคงที่ทำให้เด็กที่อยู่ในตำแหน่งที่แน่นอนไม่สนใจตำแหน่งของพวกเขาและอยู่ในตำแหน่งที่สัมพันธ์กับองค์ประกอบตำแหน่งสัมพัทธ์ที่ใกล้ที่สุด เป็นแนวคิดสำคัญที่ต้องมี
Felype

7

คุณสามารถดูภาพรวมง่ายๆได้ที่นี่: W3School

นอกจากนี้ถ้าฉันจำได้อย่างถูกต้องเมื่อประกาศความสัมพันธ์ขององค์ประกอบโดยค่าเริ่มต้นจะอยู่ในที่เดียวกันตามที่ควร แต่คุณจะได้รับความสามารถในการจัดตำแหน่งองค์ประกอบภายในให้กับองค์ประกอบนี้อย่างแน่นอนซึ่งฉันพบว่ามีประโยชน์มาก ในอดีตที่ผ่านมา.


29
w3schools ... ฉันจะไม่ลงคะแนน แต่คุณต้องอยู่กับความอัปยศ
Myles Grey

4
ในขณะเดียวกันในปี 2017 W3Schools ก็ไม่ได้แย่อย่างที่เคยเป็นมา (มันยังไม่สมบูรณ์แบบ แต่พวกเขาให้ความสำคัญกับฟันเฟืองของชุมชนอย่างจริงจังและได้รับการปรับปรุงให้ดีขึ้น)
Priidu Neemre

ในขณะเดียวกันในปี 2018 W3Schools ก็ยังไม่แย่อย่างที่เคยเป็น แต่รู้สึกแย่สำหรับพวกเขาที่ชื่อเสียงของพวกเขาในปัจจุบันยังคงเป็นเช่นนั้นเมื่อกล่าวถึงความคิดเห็นแรกข้างต้นไปยังผู้พัฒนาคนอื่น ๆ ยังคงได้รับความคลาสสิก ... ในวันของฉัน ... W3School .... ความประทับใจครั้งแรกเฮ้ ...
redfox05

7

ในคำตอบของ "ทำไม CSS จึงยังคงใช้ position: static;" ในสถานการณ์เดียวโดยใช้ตำแหน่ง: สัมพัทธ์สำหรับพาเรนต์และตำแหน่ง: ค่าสัมบูรณ์สำหรับเด็กจำกัดความกว้างของสเกลของเด็ก ในระบบเมนูแนวนอนซึ่งคุณสามารถมีลิงก์ "คอลัมน์" ได้การใช้ "width: auto" จะใช้ไม่ได้กับผู้ปกครองญาติ ในกรณีนี้การเปลี่ยนเป็น "คงที่" จะทำให้ความกว้างเปลี่ยนแปลงได้ขึ้นอยู่กับเนื้อหาภายใน

ฉันใช้เวลาสองสามชั่วโมงสงสัยว่าทำไมฉันถึงไม่สามารถปรับเปลี่ยนคอนเทนเนอร์ได้ตามปริมาณเนื้อหาที่อยู่ภายใน หวังว่านี่จะช่วยได้!


นี่คือคำตอบ! ทุกคนบอกข้อดีเฉพาะสำหรับการวางตำแหน่งสัมพัทธ์โดยขาดประเด็นในคำถามเช่นนี้ความแตกต่าง
Bartis Áron

5

ตำแหน่งสัมพัทธ์ให้คุณใช้บน / ล่าง / ซ้าย / ขวาสำหรับการวางตำแหน่ง Static จะไม่อนุญาตให้คุณทำสิ่งนี้เว้นแต่คุณจะใช้พารามิเตอร์ระยะขอบ มีความแตกต่างระหว่าง Top และ margin-top

คุณไม่จำเป็นต้องใช้แบบคงที่มากนักเนื่องจากเป็นค่าเริ่มต้น


2

ตำแหน่งสัมพัทธ์สัมพันธ์กับการไหลปกติ ตำแหน่งสัมพัทธ์ขององค์ประกอบนั้น (พร้อมออฟเซ็ต) สัมพันธ์กับตำแหน่งที่องค์ประกอบนั้นจะเป็นปกติหากไม่ได้ย้าย


2

Matthew Abbottมีคำตอบที่ดีจริงๆ

แอบโซลูทและญาติรายการตำแหน่งเชื่อฟังtop, left, rightและbottomคำสั่ง (ชดเชย) ที่รายการคงอยู่ในตำแหน่งไม่ได้

รายการที่อยู่ในตำแหน่งค่อนข้างจะย้ายออฟเซ็ตจากจุดที่ปกติจะอยู่ใน html

รายการที่อยู่ในตำแหน่งที่แน่นอนจะย้ายออฟเซ็ตออกจากเอกสารหรือองค์ประกอบที่อยู่ในตำแหน่งถัดไปที่อยู่บนโครงสร้าง DOM


0

คงที่: องค์ประกอบตำแหน่งคงที่คือสิ่งที่เราได้รับจากค่าเริ่มต้น (ตำแหน่งปกติของวัตถุ)

สัมพัทธ์: เทียบกับตำแหน่งปัจจุบัน แต่สามารถเคลื่อนย้ายได้ หรือองค์ประกอบตำแหน่งที่สัมพันธ์กันอยู่ในตำแหน่งที่สัมพันธ์กับ ITSELF


0

คงที่และสัมพัทธ์เป็นแอตทริบิวต์ตำแหน่งสัมพัทธ์ใช้สำหรับการใช้งานจำนวนมาก ไม่ใช่สำหรับหนึ่ง แต่โปรดทราบว่าแบบคงที่และแบบสัมพัทธ์ไม่เป็นอันตรายต่อโฟลว์เอกสารปกติของ Html คงเป็นตำแหน่งเริ่มต้นที่เมื่อคุณเขียนองค์ประกอบใด ๆ ใน Html หากองค์ประกอบมีตำแหน่งสัมพัทธ์องค์ประกอบนั้นสามารถวางตำแหน่งโดยสัมพันธ์กับตำแหน่งดั้งเดิมได้ เมื่อคุณต้องการปรับองค์ประกอบจากพื้นที่ขนาดเล็กให้ใช้ตำแหน่งสัมพัทธ์เพื่อที่คุณจะได้ไม่ต้องเพิ่มระยะขอบช่องว่าง ฯลฯ หากองค์ประกอบนั้นมีตำแหน่งสัมพันธ์กันและมีองค์ประกอบลูก ที่นี่เราสามารถทำการวัดได้เหมือนกับระดับแม่ หากคุณเพิ่มความกว้าง 10% ให้กับเด็กนั่นหมายความว่า (width + padding) x10% แต่คุณไม่ได้เพิ่มคีย์เวิร์ดสัมพัทธ์คุณจะได้ widthx10% นอกเหนือจากนั้นการใช้งานที่สำคัญที่สุดของญาติคือ คุณสามารถวางตำแหน่งองค์ประกอบใดก็ได้บนสุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.