RSolberg
RSolberg

Reputation: 26972

Position DIV above Input Box without changing position of Input Box

I'd like to add a DIV above an input box (textbox) without changing the rendered position of the textbox. This DIV will be shown/hid when the textbox has focus or not... What is the proper CSS formatting for this DIV to show directly above the textbox without causing the textbox to shift down?

    <td>
        <div class="someclass">images</div>
        <input type="text" maxlength="2" class="timebox" />
    </td>

EDIT
I modified the CSS to follow the solution below (from Ben Blank) and the DIV is now rendering in the top left of the screen and not the table cell...

.inputbanner
{
    position: absolute;
    display: none;
    width: 30px;
    top: 0;
    left: 0;
}

Upvotes: 9

Views: 27058

Answers (3)

user2002907
user2002907

Reputation:

If I understand correctly the question is how to show/hide an element without the other elements on the screen moving as a result.

To achieve this, don't use the display property, use the visibility property instead. When an element is invisible it still occupies the space it would occupy if it were visible.

(See https://developer.mozilla.org/en-US/docs/Web/CSS/visibility )

visibility:hidden;

Upvotes: 0

Ben Blank
Ben Blank

Reputation: 56572

You simply need to position your <div> absolutely:

div.someclass {
    position: absolute;
    top: 0;
    left: 0;
}

Absolutely positioned elements are entirely outside the "flow" of HTML and so do not affect the rendering of other elements. The example above places the <div> at the top-left corner of its parent; you can move it by changing the values of the top and left properties. Negative values are allowed, if you need them, and you can also use bottom or left if you prefer. Setting both top and bottom but not a height can be used to stretch your <div> vertically based on the height of its parent (and similarly for left, right, and width).

The <div>'s parent needs to establish "context", usually done by adding "position: relative", but it isn't safe to apply that style to table cells. Instead, you should wrap the contents of your cell with an outer <div>:

<td>
    <div class="outerclass">
        <div class="someclass">images</div>
        <input type="text" maxlength="2" class="timebox" />
    </div>
</td>

Then apply position to that new <div>:

div.outerclass {
    position: relative;
}

Upvotes: 20

brettkelly
brettkelly

Reputation: 28205

You need to place it inside another div that's position:relative (and that is where you want this div to appear). Your current CSS will position it 0px from the top/left (which is the top left corner of the screen).

Upvotes: 4

Related Questions