Position: absolute and parent height?

匿名 (未验证) 提交于 2019-12-03 02:11:02

问题:

I have some containers and their children are only absolute / relatively positioned. How to set containers height so their children will be inside of them?

Here's the code:

HTML

<section id="foo">     <header>Foo</header>     <article>         <div class="one"></div>         <div class="two"></div>     </article> </section>      <div style="clear:both">Clear won't do.</div> <!-- I want to have a gap between sections here -->  <section id="bar">     <header>bar</header>     <article>         <div class="one"></div><div></div>         <div class="two"></div>     </article> </section>   

CSS

article {     position: relative; }  .one {     position: absolute;     top: 10px;     left: 10px;     background: red;     width: 30px;     height: 30px; }  .two {     position: absolute;     top: 10px;     right: 10px;     background: blue;     width: 30px;     height: 30px; } 

Here's a jsfiddle. I want "bar" text to appear between 4 squares, not behind them.

http://jsfiddle.net/Ht9Qy/

Any easy fixes?

Note that I don't know height of these children, and I can't set height: xxx for containers.

回答1:

If I understand what you're trying to do correctly, then I don't think this is possible with CSS while keeping the children absolutely positioned.

Absolutely positioned elements are completely removed from the document flow, and thus their dimensions cannot alter the dimensions of their parents.

If you really had to achieve this affect while keeping the children as position: absolute, you could do so with JavaScript by finding the height of the absolutely positioned children after they have rendered, and using that to set the height of the parent.

Alternatively, just use float: left/float:right and margins to get the same positioning effect while keeping the children in the document flow, you can then use overflow: hidden on the parent (or any other clearfix technique) to cause its height to expand to that of its children.

article {     position: relative;     overflow: hidden; }  .one {     position: relative;     float: left;     margin-top: 10px;     margin-left: 10px;     background: red;     width: 30px;     height: 30px; }  .two {     position: relative;     float: right;     margin-top: 10px;     margin-right: 10px;     background: blue;     width: 30px;     height: 30px; } 


回答2:

This is a late answer, but by looking at the source code, I noticed that when the video is fullscreen, the "mejs-container-fullscreen" class is added to the "mejs-container" element. It is thus possible to change the styling based on this class.

.mejs-container.mejs-container-fullscreen {     // This rule applies only to the container when in fullscreen     padding-top: 57%; } 

Also, if you wish to make your MediaElement video fluid using CSS, below is a great trick by Chris Coyier: http://css-tricks.com/rundown-of-handling-flexible-media/

Just add this to your CSS:

.mejs-container {     width: 100% !important;     height: auto !important;     padding-top: 57%; } .mejs-overlay, .mejs-poster {     width: 100% !important;     height: 100% !important; } .mejs-mediaelement video {     position: absolute;     top: 0; left: 0; right: 0; bottom: 0;     width: 100% !important;     height: 100% !important; } 

I hope it helps.



回答3:

Here is my workaround,
In your example you can add a third element with "same styles" of .one & .two elements, but without the absolute position and with hidden visibility:

HTML

<article>    <div class="one"></div>    <div class="two"></div>    <div class="three"></div> </article> 

CSS

.three{     height: 30px;     z-index: -1;     visibility: hidden; } 


回答4:

This is another late answer but i figured out a fairly simple way of placing the "bar" text in between the four squares. Here are the changes i made; In the bar section i wrapped the "bar" text within a center and div tags.

<header><center><div class="bar">bar</div></center></header> 

And in the CSS section i created a "bar" class which is used in the div tag above. After adding this the bar text was centered between the four colored blocks.

.bar{     position: relative; } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!