How to shrinkwrap horizontally centered div - html

I have a layout like this:
<container div>
<header></header>
<footer>
<div>
<nav>
<ul>
<li></li>
</ul>
</nav>
<div>
</footer>
</container div>
The footer is a centered sticky footer. I want to add social media icons, but I don't want to specify a specific width.
How do I shrinkwrap the footer div without losing it's centered position?
If I add inline:block to the div css, the centering gets lost and it is aligned to the left side of the browser window.

If you add an inline-block to the inner div you will lose the centering, but you can solve this if you add a text-align: center to the footer.
Another solution is to use a CSS3 transform. (You have used one in the header).
When you use percents in a CSS transform the percent is related to the element itself instead to the element's container. Look at the next snippet:
html {
height: 100%;
}
body {
height: 100%;
margin: 0;
position: relative;
}
ul {
height: 30px;
line-height: 30px;
margin: 0;
padding: 0;
}
ul li {
display: inline-block;
list-style: none;
}
footer#social {
background: #F00;
bottom: 0;
left: 50%;
padding: 0 10px;
position: absolute;
transform: translateX(-50%);
width: auto;
}
<footer id="social">
<div id="socmed">
<nav id="social" class="socialIndex">
<ul>
<li>mail </li>
<li>linkedin</li>
<li>telephone</li>
</ul>
</nav>
</div>
</footer>

Simply use 'inline-block', like this:
footer > div {display: inline-block;}

Related

Why am I getting scroll bars on element in some browsers?

I have a header element, containing a logo (floated left) and another div (floated right) and a hidden nav element. On the open_menu div on older PCs I am getting vertical scroll bars. As if one or two pixels are not fitting. It is as if the child div open_menu has a height greater than its parent the header and this is why the scroll bars appear. But this isn't the case, so why is this happening?
HTML and CSS:
header {
line-height: 71px;
border-bottom: 1px solid;
overflow: auto;
}
.logo {
float: left;
width: 137px;
height: 71px;
}
.open_menu {
float: right;
font-size: 22px;
cursor: pointer;
}
nav {
display: none;
position: absolute;
top: 72px;
bottom: 0;
left: 0;
right: 0;
z-index: 102;
}
<header>
<div class="logo">
<img src="resources/logo.svg" alt="xyz">
</div>
<div class="open_menu" onclick="myFunction()">Menu</div>
<nav>
<ul>
<li>Work</li>
<li>About</li>
<li>Services</li>
<li>Contact</li>
</ul>
</nav>
</header>
As explained in https://www.w3schools.com/howto/howto_css_clearfix.asp don't use overflow: auto for clearfix. Try the other way.
The solution is to move the line-height from the header to the child div (open_menu). Hence the height of the header is determined by the child div.

Header container in navigation is not visible

I'm having an issue with the header.main-header element. Header is not visible in viewport. I inserted a height value to make it visible. Can someone help me and explain the reason why it's not visible when there is no height inserted.
.main-header {
background: yellow;
padding: 0 3em;
position: absolute;
width: 100%;
top: 0;
height: 85px;
}
ul {
padding: 0;
list-style: none;
}
.main-nav {
position: relative;
}
.nav-left {
float: left;
}
.nav-right {
float: right;
}
.middle {
position: absolute;
left: 50%;
transform: translate(-50%,0);
}
.nav-right li {
display: inline-block;
}
<header class="main-header">
<nav class="main-nav">
<ul class="nav-left">
<li>Try Dropbox Business</li>
</ul>
<div class="middle">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/Dropbox_logo_%28September_2013%29.svg/200px-Dropbox_logo_%28September_2013%29.svg.png" alt="Dropbox Logo" />
</div>
<ul class="nav-right">
Download the app
<li>Sign in</li>
</ul>
</nav>
</header>
Here's my work in Codepen:
http://codepen.io/marcvs/pen/Gjwdov?editors=1100
Also, regarding the positioning of the elements inside the nav, I tried my best to position the elements from left/center/middle. But the right side of the navbar is extending to the right and it gives a bottom scroll bar. What is the best technique to postion the elements?
Kindly give me tips to improve my work. Thank you.
You don't need to add so much style to accomplish that header:
Start by looking at your main-header tag. If the main header's width is 100% of the page, the child block nav will also be 100%.
Now, using percentages, make your menu fit the header. there are 3 children within the nav so you could set each width to 1/3 of the width and that should make them fit. Just keep in mind that borders and padding count (Try 30% width for each, having them with float:left on all 3 of the children).
You need to put clear after last ul where is float:right;
Because you have float, and parent element doesn't have height when float is there.
So after last ul put div class="clear" with css .clear {clear:both;}
Or if you are using bootstrap you have class clearfix. pun in nav class="main-nav clearfix"

Navigation position fixed - impossible to align to the right

I'm being unable to align the navigation to the right side while it's positioned fixed.
I read previous threads and I implemented what was suggested but despite of that I'm not able to make it stay within the main container and to be aligned to the right.
It either doesn't move at all (with float: right) or goes out of the container.
<div class="container">
<nav id="site-navigation" class="main-navigation" role="navigation">
<div class="nav-positioning">
<div class="menu-primary-navigation-container">
<ul id="primary-menu" class="menu nav-menu">
<li></li>
<li></li>
<li></li>
</ul>
</div>
</div>
</nav><!-- #site-navigation -->
</div>
.container {
max-width: 1280px;
margin-left: auto;
margin-right: auto;
padding: 30px;
box-sizing: border-box;
}
header .main-navigation {
position: fixed;
padding: 20px 0;
z-index: 3;
width: auto;
}
.main-navigation {
clear: both;
display: block;
}
The problem occurs within this site: www.oktawiakata.com
login: login
password: superstrongpassword
Thanks a lot in advance for your hints!
I'm not able to make it stay within the main container and to be aligned to the right.
With position:fixed the position of your element will be relative to the browser window, so it's not exactly correct to say that it will stay within the main container in CSS terms.
If you want it to stay within the main container, you should use position: absolute
#main-container{
position: relative;
}
#navigation{
position: absolute;
right: 0;
}
UPDATE:
Use this code for a navigation bar like the example provided on your comment:
HTML
<div id="navigation-bar">
<div class="navigation-content">
<ul class="navigation-menu">
<!-- Your <li> elements here -->
</ul>
</div>
</div>
CSS
#navigation-bar{
position: fixed;
top: 0;
right: 0;
left: 0;
height: auto;
padding: 15px 0px;
}
#navigation-bar .navigation-content{
width: 1280px;
margin: auto;
text-align: right
}
#navigation-bar .navigation-content ul{
// Your list styles ...
}
When your element is positioned as a fixed element, then you need to change right value to 0px;
#someContainerCSS{
position: fixed;
right : 0px;
}
That should do the work.

Navbar fixed at the top of div

I've tried many technics and I can't seem to fix this issue.
I would like my menu to always stay at the top of it's parent div. I've made a Codepen of my layout.
Here's the html of my menu and it's parents:
<div id="main-wrapper" class="background-yellow">
<!-- center column -->
<div id="center-wrapper">
<nav id="navbar">
<div id="navbar-wrapper">
<ul id="main-nav">
<li>Édito</li>
<li>Programme</li>
<li>Participants</li>
<li>Situation</li>
<li>À propos</li>
<li>Infos</li>
<li>Newsletter</li>
</ul>
</div>
</nav>
</div>
</div>
And here's their css:
#main-wrapper {
width: 100%;
height: 100%;
}
#center-wrapper {
position: absolute;
left: 30%;
width: 40%;
height: 100%;
}
#navbar {
position: absolute;
width: 100%;
height: 100px;
}
#navbar-container {
position: fixed;
z-index: 666;
}
#main-nav {
margin: 0;
padding: 0;
list-style: none;
text-align: center;
}
#main-nav li {
display: inline-block;
margin: 10px;
}
--EDIT--
Managed to fix the problem, thanks to Zac.Ledyard, now I need #navbar to be 100% of it's parent div, that is #center-wrapper.
Thanks in advance guys.
One of your CSS id selectors is named wrong. Change #navbar-container to #navbar-wrapper
#navbar-wrapper {
position: fixed;
z-index: 666;
}
The method is simple.
Position:relative for a parent element
Position:absolute for a child element
That way the child element always binds to the top of it's parent element.
Any absolute positioned element has a position in the coordinates of the nearest relative positioned parent ( if none are present - the document itself )
It's really unclear from your page code what's going on there , and what you're trying to achieve.
To bind an element to the top of the -page- ( not to scroll with it ) you need to use position:fixed

Vertically aligned image

I have this big logo on the home page which should be aligned to center. I managed to center it horizontally, but not vertically. The only solution I could think of was setting the top-margin to 20% but it seems that this is not a good solution for a responsive design. What could be the proper solution to this?
Here is the HTML:
<section id="home">
<div class="container">
<img id="logo2" class="img-responsive" src="img/logo2.png" >
</div> <!--end container-->
</section> <!--end home-->
And here's the CSS:
#logo2 {
margin: 0 auto;
margin-top: 20%;
}
And here is the link to the home page itself: http://skiest.ragne.me/.
Thank you for your help.
If you have a declared height for the element, you can use absolute positioning on it by wrapping it in a parent container:
.parent {
margin: auto;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
text-align: center;
height: 100px; /* Or whatever height it is */
}
.child {
display: inline-block;
}
I think you should add to #home style "display:table;" and to "container" class "display:table-cell;vertical-align:middle;". For more flexible add "width:100%;height:100%" to #home
You can do this via CSS:
.container {
line-height: 200px;
}
.container img {
vertical-align: middle;
}