Home > Article > Web Front-end > A new beginning for div+css web layout design (9)
The introduction to floating is almost finished, here are some screenshots for reference
The following will introduce absolute positioning
Set to absolute positioning The element box is completely removed from the document flow and positioned relative to its containing block, which may be another element in the document or the initial containing block. The space previously occupied by the element in normal document flow is closed, as if the element did not exist. The element generates a block-level box after positioning, regardless of what type of box it originally generated in the normal flow.
Absolute positioning makes the position of the element independent of the document flow, so it does not occupy space. This is different from relative positioning, which is actually considered part of the normal flow positioning model because the element's position is relative to its position in the normal flow.
Let’s put aside the concept. Simply put
Absolute positioning means that margin and float are no longer needed for positioning, but positioning based on coordinates
Where is the starting point of the coordinates, it is the browser The point in the upper left corner
<html> <head> <style type="text/css"> body{ margin:0; padding:0; } #a{ width:500px; height:500px; border:solid; margin-left:50px; } #b{ width:100px; height:100px; border:soild; background:green; position: absolute; left:30px; top: 20px; } </style> <head> <body> <div id="a"> <div id="b"></div> </div> </body> </html>can be seen that the green is not positioned according to its parent div, but the position of the upper left corner of the browser box
But what happens if the parent div also defines absolute positioning or relative positioning?
<html> <head> <style type="text/css"> body{ margin:0; padding:0; } #a{ width:500px; height:500px; border:solid; margin-left:50px; position: absolute; } #b{ width:100px; height:100px; border:soild; background:green; position: absolute; left:30px; top: 20px; } </style> <head> <body> <div id="a"> <div id="b"></div> </div> </body> </html>Then he will be positioned according to the upper left corner of the parent div (the parent layer defines position: relative; is also valid)
In other words, if an absolute definition is It makes no sense for a positioned layer to be contained by a non-absolute or relatively positioned layer. It is equivalent to a completely independent div and is not constrained by non-absolute or relatively positioned layers.
In fact, absolute positioning is better than absolute positioning Margin positioning is much more fun. Margin positioning needs to use the surrounding divs as reference objects, while absolute positioning only needs to adjust the coordinates according to the upper left corner.
Absolute positioning is separated from the text flow. It can go to any area, even that area. There is already a div occupying it
<html> <head> <style type="text/css"> body{ margin:0; padding:0; } #a{ width:500px; height:500px; border:solid; margin-left:50px; position: relative; } #b{ width:100px; height:100px; border:soild; background:green; position: absolute; left:30px; top: 20px; } #c{ width:100px; height:100px; border:soild; background:red; } </style> <head> <body> <div id="a"> <div id="c"></div> <div id="b"></div> </div> </body> </html>You can see that it covers the ordinary div, ignoring the existence of the ordinary div
So will it also cover the floating div?
<html> <head> <style type="text/css"> body{ margin:0; padding:0; } #a{ width:500px; height:500px; border:solid; margin-left:50px; position: relative; } #b{ width:100px; height:100px; border:soild; background:green; position: absolute; left:30px; top: 20px; } #c{ width:200px; height:200px; border:soild; background:red; float:left; margin:10px; } #d{ width:100px; height:100px; border:soild; background:blue; } </style> <head> <body> <div id="a"> <div id="c"></div> <div id="d"></div> <div id="b"></div> </div> </body> </html>Blue is a normal div, red is a floating div, and green is an absolutely positioned div
It can be seen that the absolutely positioned div is at the highest level and can cover all
That is to say, ordinary divs follow the flow pattern on the ground.
Floating divs follow the flow pattern in the air. One is an airplane on the ground and the other is an airplane in the air.
Then the absolutely positioned div is equivalent to an airship. It flies higher than an airplane and can move freely
Now let’s see what happens when two absolutely positioned divs meet together
<html> <head> <style type="text/css"> body{ margin:0; padding:0; } #a{ width:500px; height:500px; border:solid; margin-left:50px; position: relative; } #b{ width:100px; height:100px; border:soild; background:green; position: absolute; left:30px; top: 20px; } #c{ width:100px; height:100px; border:soild; background:red; position: absolute; left:60px; top: 20px; } </style> <head> <body> <div id="a"> <div id="c"></div> <div id="b"></div> </div> </body> </html>You can see, Green covers red, which means that two absolute divs will not have flow mode, so using margin is invalid
They treat each other as if they do not exist, and do not care which area is occupied
Why is it green? Covering red, not red covering green?
Because here
Another way is to use the z-index attribute, The higher the z-index level, the higher it will fly. If not set, it will default to 0
<html> <head> <style type="text/css"> body{ margin:0; padding:0; } #a{ width:500px; height:500px; border:solid; margin-left:50px; position: relative; } #b{ width:100px; height:100px; border:soild; background:green; position: absolute; left:30px; top: 20px; } #c{ width:100px; height:100px; border:soild; background:red; position: absolute; left:60px; top: 20px; z-index:1; } </style> <head> <body> <div id="a"> <div id="c"></div> <div id="b"></div> </div> </body> </html>This way, you can determine which of them is in which without considering the order in which the absolutely positioned divs appear. The above