Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to make div center horizontally with fixed position? [duplicate]

Tags:

html

css

center

I want div to be center horizontally, css code is this:

<style type="text/css">
#footer{
    position: fixed;
    bottom: 20px;
    background-color: red;
    width:500px;
            margin: auto;/*left:auto; right:auto;*/
}
</style>

and html code:

<body>
<div id="footer">hello world</div>
</body>

I think there is no need to explain my css code, it is almost self-explanatory, but the div is not center horizontally, is there any way to make this? Thanks in advance.

like image 893
hiway Avatar asked Apr 17 '13 11:04

hiway


People also ask

How do I make a div centered horizontally?

To center a div horizontally on a page, simply set the width of the element and the margin property to auto. That way, the div will take up whatever width is specified in the CSS and the browser will ensure the remaining space is split equally between the two margins.

How do I center a div with position fixed?

Set the top and left properties to 50% to center the left-top corner of the <div>. Set the margin-top and margin-left properties to the negative half of the height and width of the <div>.

How do you center something horizontally?

Center the text horizontally between the side margins Select the text that you want to center. On the Home tab, in the Paragraph group, click Center .


2 Answers

Try this

#footer{
    position: fixed;
    bottom: 20px;
    background-color: red;
    width:80%;
    margin: 0 0 0 -40%;
    left:50%;
}

JS Fiddle Example

The point to be noted here is, the negative margin-left of exactly half value of width and set the left 50 % of the body

like image 70
Sachin Avatar answered Oct 26 '22 02:10

Sachin


If you're working with modern browsers you can use the flexbox layout module: http://caniuse.com/#feat=flexbox.

Flexbox documentation: developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes
Note: Can't post more than two links due to my rep.


JSFiddle.

(Using a footer tag instead of a div#footer as it's simpler.)

<div id="footer-container">
  <footer>hello world</footer>
<div>
#footer-container {
  bottom: 20px;
  position: fixed;

  display: flex;
  justify-content: center;
  width: 100%;
}

footer {
  width: 500px;

  background-color: red;
}

justify-content: center; 'centers' #footer-container's children, which is just the footer element in this case.

This is very similar to Nick N.'s solution, except that you don't have to reset the text-align property on the footer, and that this is probably the non-'trick' way that you wanted.

The accepted solution is slightly off because the footer's width in that case is variable (80%) instead of at 500px.


To other readers, if your parent is a form element, and the child is an input element, use flex: 1; on the input (child) element, and use max-width: 500px; instead of width: 500px;. Using flex: 1; should make the input element expand to fill the form element's width, which it might not otherwise do.

like image 32
xd1le Avatar answered Oct 26 '22 02:10

xd1le