开发者

Break out of parent div's

When i have a div with position: absolute, and in it is another div with position: absolute the inner div will position in the frame given through the outer (wrapper) div. Now i want to create a class (css) called error_message that positions itself exactly in the center middle of the site, indi开发者_JAVA技巧fferent from where the it is called, so i need it to break out of every div wrapped around the error_message div.. how do i do this?


i had a similar problem with positioning a hoover-text centered below a floated image button list.

for me the solution was using the "fixed" value for the "position" property

position: fixed

then you can position your error message from top left of the body again. i use another wrapper div to position all hoover texts center center.

Break out of parent div's

found the solution here:

CSS nested Div with position absolute?

the code is not the code from the picture you see, the picture is just for illustration.

stylesheet in less format (see http://lesscss.org/)

<style>
    .button
    {
        float: left;
        position: relative;

        a
        {
            &:hover, &:focus
            {
                .titlePos
                {
                    .title
                    {
                        display: block;
                    }
                }
            }
            .titlePos
            {
                position: fixed;
                top:50%;
                left:50%;
                width: 400px;
                margin-left: -200px;

                .title
                {
                    position:relative;
                    display: none;
                    top: 130px;
                    text-align: center;
                }
            }
        }
</style>

html:

<div id="wrapper">
    <div id="content">
        <ul>
            <li>
                <div class="button">
                    <a href="#" >
                        <div class="buttonImage">
                            <img />
                        </div>
                        <div class="titlePos">
                            <div class="title">Button Hoover Text1</div>
                        </div>
                    </a>
                </div>
            </li>
            <li>
                <div class="button">
                    <a href="#" >
                        <div class="buttonImage">
                            <img />
                        </div>
                        <div class="titlePos">
                            <div class="title">Button Hoover Text2</div>
                        </div>
                    </a>
                </div>
            </li>
            <li>
                <div class="button">
                    <a href="#" >
                        <div class="buttonImage">
                            <img />
                        </div>
                        <div class="titlePos">
                            <div class="title">Button Hoover Text3</div>
                        </div>
                    </a>
                </div>
            </li>
            <li>
                <div class="button">
                    <a href="#" >
                        <div class="buttonImage">
                            <img />
                        </div>
                        <div class="titlePos">
                            <div class="title">Button Hoover Text4</div>
                        </div>
                    </a>
                </div>
            </li>
        </ul>
    </div>
</div>


You should try using css's position:fixed property, instead of position:absolute, for the error div. position:fixed will position an element based on the browser window, with no regard for where it falls in the DOM. If you want it to be centered in the window, regardless of window size, you could make the fixed-position div cover the entire screen (left: 0, right: 0, etc). and then text-align the error message inside of it.


I'm not sure why would you want that div to break out of parent div. Maybe try working on a fresh html structure for those?

http://haslayout.net/css-tuts/Horizontal-Centering and http://haslayout.net/css-tuts/Vertical-Centering

These should help you out!


I think the only way to have a div break out of all parent divs is to have an absolute positioning on all of them, which will obviously create its own set of problems.

Why not simply have a pre-defined, hidden div as a direct child of the body, instead of wrapping it in the markup. You can then easily position it as you want, and insert the error messages in it with the help of jQuery. An obvious advantage to this method is that you would only have to write this div once, and dynamically insert the error message into it. I would even suggest having a look at jQuery UI which allows you to easily create dialogs, both normal and modal, besides tons of other features.


UPDATE

Since JS is not allowed, an easy way to do this would indeed be displaying the div only if there was an error. So the PHP code would be ...

if (isset($error)) {
    echo '<div class="show_error">' . $error . '</div>';
}

... and the CSS class for it would be ...

.show_error {
    width: 400px; // error element's width
    height: 200px; // error element's height
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -100px; // minus half the height
    margin-left: -200px; // minus half the width
}

Of course, you can further style the error div as you wish, but these are needed to position it dead-center.

Hope this helps !


I have found a solid CSS solution here:

https://front-back.com/how-to-make-absolute-positioned-elements-overlap-their-overflow-hidden-parent/

Let’s add another parent and move the position:relative one level up (or, in your context, you could maybe simply use an existing upper parent).

HTML

<div class="grand-parent">
  <div class="parent">
    <div class="child"></div>
  </div>
</div>

CSS

.grand-parent {
  position: relative;
}
.parent {
  /*position: relative;*/
  overflow: hidden;
}
.child {
  position: absolute; 
  top: -10px; 
  left: -5px;
}

Result:

Break out of parent div's

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜