100% height Sidebar and a Footer who wont stay below it - html

I need help with a combination of a sticky footer, and a content area that has a sidebar.
Here's a code snippet:
html, body {
height: 100%;
}
/* Force Footer to Stay Down */
#outtermost-wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -50px;
}
.container-fluid {
max-width: 960px;
padding: 0;
margin: 0;
border: 1px dotted pink;
}
#page-header {
border: 3px dotted blue;
}
.chart-nav {
border: 2px solid green;
}
#page-content {
border: 3px dashed green;
}
.chart-sidebar-wrapper {
width: 145px;
}
.faux-sidebar-wrapper {
background-color: #E8E8E8;
min-height: 100px;
position: absolute;
top: 55px; /* Top Nav + Chart Nav Heights (ESTIMATED FOR THIS EXAMPLE)*/
bottom: 50px; /* Footer Height */
width: 100%;
}
nav.navbar-default {
margin-bottom: 50px;
width: 100%;
}
.faux-sidebar {
margin: 0 0 0 155px;
padding: 0;
position: relative;
height: 100%;
background-color: #F8F8F8;
border-left: 1px solid fuschia;
min-height: 100px;
}
.footer-push {
clear: both;
border: 3px solid pink;
height: 50px;
}
#page-footer {
width: 100%;
height: 50px;
border: 3px solid red;
}
<div id="outtermost-wrapper">
<div id="page-header" class="container-fluid">
HEADER - Blue Dotted - Stays at the top
</div>
<div id="page-content" class="container-fluid">
<div class="chart-nav">
SUB HEADER - Green Solid - Stays at the top
</div>
<div class="faux-sidebar-wrapper">
<div class="chart-sidebar-wrapper">
<nav class="navbar-default navbar-static-side">
<ul class="nav metismenu">
<li>Menu Item</li>
<li>Menu Item</li>
<li>Menu Item</li>
</ul>
</nav>
</div>
<div class="faux-sidebar">
<div class="row main">
<div>Actual Page Content with Widgets and What Not</div>
</div>
</div>
</div>
<div class="footer-push"></div>
</div>
</div>
<div id="page-footer" class="container-fluid">
FOOTER - Red Solid - Stay below the and not lift off the bottom of the page for short content.
</div>
It looks something like this,
My problem is that I need the sidebar (see the hyperlinks) to stretch all the way to the footer (Its supposed to have a thin border on the right) and I also need the footer to not lift up off the bottom of the window when the content is short.
P.S. I'm using bootstrap if that helps.
Please help, thank you.

Here is a layout that I think represents what you're going for - check out the jsFiddle link and resize the page. You can see that for short content, the footer lays at the bottom of the page. For longer content, the content pushes the footer down past the bottom of the page and the page scrolls.
Solution adapted from the code in this article. The only caveat is that for this solution to work, the footer needs to have a fixed height (in this case 60px).
JSFiddle: https://jsfiddle.net/2gcxvjms/
Live Demo:
html, body {
margin:0;
padding:0;
height:100%;
}
#container {
min-height:100%;
position:relative;
}
#header {
background:#ff0;
padding:10px;
}
#subheader {
padding: 10px;
background: lightblue;
}
#body {
padding-bottom:60px;
overflow: auto;
/* Height of the footer */
}
#footer {
position:absolute;
bottom:0;
width:100%;
height:60px;
/* Height of the footer */
background:#6cf;
}
/* other non-essential CSS */
#header p, #header h1 {
margin:0;
padding:10px 0 0 10px;
}
#footer p {
margin:0;
padding:10px;
}
#c1 {
float: left;
width: 50%;
}
#c2 {
float: left;
width: 50%;
height: 100%;
}
<div id="container">
<div id="header">
<h1>Header 1 Text</h1>
</div>
<div id="subheader">
<h2>Header 2 Text</h2>
</div>
<div id="body">
<div id="c1">
Column 1 Text<br />
Column 1 Text<br />
Column 1 Text<br />
Column 1 Text<br />
Column 1 Text<br />
Column 1 Text<br />
</div>
<div id="c2">
Column 2 Text<br />
Column 2 Text<br />
Column 2 Text<br />
Column 2 Text<br />
Column 2 Text<br />
Column 2 Text<br />
</div>
</div>
<div id="footer">
Footer Text
</div>
</div>

Here's a version of your layout using navbars fixed to the top and a fixed-sidebar so your main-content scrolls under everything. Then you can layer the sidebar and footer to either be over or under one another. Right now it looks attached but the CSS is easily changed so one could cover the other.
The sidebar is hidden on viewports under 360px but can be restored by removing to media query.
Hope it helps.
body,
html {
position: relative;
margin-top: 125px;
margin-bottom: 50px;
}
.navbar.navbar-custom {
border-radius: 0px;
border: none;
background: #337ab7;
border-bottom: 1px solid #ff0;
}
.navbar-custom .upper-nav {
font-size: 20px;
padding: 9px 20px;
height: 50px;
color: #337ab7;
background-color: #fff;
}
.navbar-custom .upper-nav img {
margin-top: 0px;
}
.navbar-custom .navbar-nav {
margin-right: 30px;
}
.navbar-custom .nav-buttons {
border-radius: 0px;
background: none;
border: none;
color: #337ab7;
}
.navbar.navbar-custom .btn-group .dropdown-menu > li > a {
color: #fff;
}
.navbar.navbar-custom .btn-group .dropdown-menu > li > a:hover {
color: #444;
}
.navbar.navbar-custom .navbar-nav > li > a {
color: #fff;
border: none;
}
.navbar.navbar-custom .navbar-brand {
color: #fff;
}
.navbar.navbar-custom .dropdown-menu {
background: #266080;
}
.navbar-custom .navbar-nav .open .dropdown-menu > li > a,
.navbar-custom .navbar-nav .open .dropdown-menu {
color: #fff;
border: none;
}
.navbar-custom .navbar-nav .open .dropdown-menu > li >a:hover,
.navbar-custom .navbar-nav .open .dropdown-menu:hover {
color: #fff;
border: none;
}
.navbar.navbar-custom .navbar-toggle,
.navbar.navbar-custom .navbar-toggle:focus,
.navbar.navbar-custom .navbar-toggle:hover {
background: none;
outline: none;
box-shadow: none;
border: none;
color: #fff;
}
.sidebar-fixed {
margin-top: 100px;
padding: 5px 18px;
position: fixed;
width: 200px;
height: 100%;
top: 0;
left: 0;
background: #337ab7;
border-right: 1px solid #ff0;
z-index: 1500;
}
ul.sidebar-list {
list-style: none;
display: inline;
text-align: left;
}
ul.sidebar-list > li {
font-size: 18px;
padding-bottom: 25px;
}
ul.sidebar-list > li > a {
color: #fff;
text-decoration: none;
}
.main-content .well {
background-color: transparent;
border: 3px solid #428bca;
border-radius: 0px;
text-align: center;
font-size: 25px;
}
.main-content {
margin-left: 200px;
}
.footer {
vertical-align: center;
position: fixed;
bottom: 0;
width: 100%;
height: 50px;
background-color: #337ab7;
padding: 12px 0;
z-index: 3100;
}
ul.footer-nav > li {
margin-top: 5px;
list-style: none;
vertical-align: center;
text-align: right;
}
ul.footer-nav > li > a {
text-decoration: none;
color: #fff;
}
#media (max-width: 768px) {
.navbar-custom .navbar-nav {
margin-right: 0;
}
.navbar-custom .navbar-nav > li > a {
color: #fff;
}
.sidebar-fixed {
margin-top: 104px;
width: 100px;
}
.main-content {
margin-left: 100px;
padding: 0;
}
ul.sidebar-list > li {
font-size: 14px;
padding-bottom: 25px;
}
.navbar-custom .navbar-collapse {
margin-left: 100px;
border: none;
}
}
#media (max-width: 360px) {
.sidebar-fixed {
display: none;
}
.main-content {
margin-left: 0;
padding: 0;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<div class="container-fluid">
<nav class="navbar navbar-default navbar-fixed-top navbar-custom" role="navigation">
<div class="upper-nav">
<img src="http://placehold.it/150x30/337ab7/fff?text=Logo" alt="" />
<div class="btn-group pull-right">
<button type="button" class="btn btn-default dropdown-toggle nav-buttons" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="glyphicon glyphicon-user" </span>
</button>
<ul class="dropdown-menu">
<li>Action
</li>
</ul>
</div>
<div class="btn-group pull-right">
<button type="button" class="btn btn-default dropdown-toggle nav-buttons" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="glyphicon glyphicon-inbox" </span>
</button>
<ul class="dropdown-menu">
<li>Action
</li>
</ul>
</div>
<div class="btn-group pull-right">
<button type="button" class="btn btn-default dropdown-toggle nav-buttons" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="glyphicon glyphicon-off" </span>
</button>
<ul class="dropdown-menu">
<li>Action
</li>
</ul>
</div>
</div>
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="glyphicon glyphicon-plus"></span>
</button> <a class="navbar-brand" href="#">Home</a>
</div>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown"> Menu Item <span class="caret"></span>
<ul class="dropdown-menu">
<li>Menun Item 1
</li>
<li>Menun Item 2
</li>
</ul>
</li>
<li class="dropdown"> Menu Item <span class="caret"></span>
<ul class="dropdown-menu">
<li>Menun Item 1
</li>
<li>Menun Item 2
</li>
</ul>
</li>
<li class="dropdown"> Menu Item <span class="caret"></span>
<ul class="dropdown-menu">
<li>Menun Item 1
</li>
<li>Menun Item 2
</li>
</ul>
</li>
</ul>
</div>
</nav>
</div>
<div class="container-fluid">
<div class="sidebar-fixed">
<ul class="sidebar-list">
<li> About
</li>
<li> Contact
</li>
<li> Products
</li>
<li> Blog
</li>
</ul>
</div>
<div class="main-content">
<div class="container-fluid">
<div class="well"> Bootstrap 3
</div>
<p>Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux
de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce
à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.Le Lorem Ipsum est simplement du faux texte employé dans la composition
et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a
pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum,
et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem I</p>
<p>Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux
de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce
à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.Le Lorem Ipsum est simplement du faux texte employé dans la composition
et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a
pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum,
et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem I</p>
<p>Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux
de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce
à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.Le Lorem Ipsum est simplement du faux texte employé dans la composition
et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a
pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum,
et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem I</p>
</div>
</div>
</div>
<footer class="footer">
<div class="container">
<ul class="footer-nav">
<li>Copyright © 2015
</li>
</ul>
</div>
</footer>

So from my comments I made a very simple version to show how little code is needed to achieve what you want
Edit:
Updated my code sample to a snippet instead of a fiddle.
And this sample can be upgraded to use flex with a few changes of the html/css.
html,
body { height: 100%; margin: 0 }
body, .main-inner {
display: table;
width: 100%;
height: 100%
}
.page-row {
display: table-row;
height: 1px;
}
.page-row-expanded { height: 100%; }
.item1, .item2 {
width: 29%;
box-sizing: border-box;
display: table-cell;
height: 100%
}
.item2 {
width: 70%;
}
.header-inner, .footer-inner, .item1, .item2 {
border: 1px solid black
}
<header class="page-row">
<div class="header-inner">
<h1>Site Title</h1>
</div>
</header>
<header class="page-row">
<div class="header-inner">
<h1>Sub Site Title</h1>
</div>
</header>
<main class="page-row page-row-expanded">
<div class="main-inner">
<div class="item1">
Menu
</div>
<div class="item2">
Sample <br>
Content <br>
</div>
</div>
</main>
<footer class="page-row">
<div class="footer-inner">
<p>Copyright, blah blah blah.</p>
</div>
</footer>

Related

Make image align with paragraph text in padding

This is what it looks like, and the arrow kind of shows where I wish for the image to be.
my html code
<section class="box2">
<h1 class="underline"><b>Husk dit helbred!</b></h1>
<p>Projekt arbejde er vigtigt, men ikke lige så vigtigt som dit helbred! Husk at drikke vand, at spise noget og at tage en masse pauser. Du bliver mere produktiv, hvis du skaber et sundt forhold til dit studie arbejde og helbred. Det var alt fra mig, held og lykke med jeres mange fremtide projekter!</p>
<img src="images/emilybillede.jpg" alt="">
my css code
.underline {
text-decoration: underline;
}
.box2 img{
position: right;
width: 200px;
height: 200px;
}
.box2 {
margin: 0 auto;
margin-right: 20%;
margin-left: 20%;
margin-top: 20px;
background-color: rgb(255, 255, 255);
padding: 15px;
height: 50%;
}
p {
width: 300px;
}
I tried float as well but that takes it out of the padding.
I also tried vertical align
You could achieve it in several ways, using float, flex or position for example.
Here an example with float
.underline {
text-decoration: underline;
clear: both;
}
.box2 img {
float: right;
}
.box2 {
width: 100%;
}
p {
width: 300px;
float: left;
}
<section class="box2">
<h1 class="underline"><b>Husk dit helbred!</b></h1>
<p>Projekt arbejde er vigtigt, men ikke lige så vigtigt som dit helbred! Husk at drikke vand, at spise noget og at tage en masse pauser. Du bliver mere produktiv, hvis du skaber et sundt forhold til dit studie arbejde og helbred. Det var alt fra mig, held
og lykke med jeres mange fremtide projekter!</p>
<img src="https://www.filterforge.com/more/help/images/size200.jpg" alt="">
</section>
With floats the document order must be reversed. If you don't like that, consider using flexbox instead, with the paragraph and the image being children in a flex row.
Here are both options demonstrated.
.underline {
text-decoration: underline;
}
.box2 img {
width: 200px;
height: 200px;
margin-left: 10px;
}
img.float-right {
float: right;
}
.box2 {
margin: 0 auto;
margin-right: 20%;
margin-left: 20%;
margin-top: 20px;
background-color: rgb(255, 255, 255);
padding: 15px;
height: 50%;
}
p.sized {
width: 300px;
}
.flex-row {
display: flex;
}
.flex-row p:first-child {
margin-top: 0;
}
<section class="box2">
<h1 class="underline"><b>Husk dit helbred!</b></h1>
<img src="https://via.placeholder.com/200" alt="" class="float-right">
<p class="sized">Projekt arbejde er vigtigt, men ikke lige så vigtigt som dit helbred! Husk at drikke vand, at spise noget og at tage en masse pauser. Du bliver mere produktiv, hvis du skaber et sundt forhold til dit studie arbejde og helbred. Det var alt fra mig, held
og lykke med jeres mange fremtide projekter!</p>
</section>
<section class="box2">
<h1 class="underline"><b>Husk dit helbred!</b></h1>
<div class="flex-row">
<p>Projekt arbejde er vigtigt, men ikke lige så vigtigt som dit helbred! Husk at drikke vand, at spise noget og at tage en masse pauser. Du bliver mere produktiv, hvis du skaber et sundt forhold til dit studie arbejde og helbred. Det var alt fra mig,
held og lykke med jeres mange fremtide projekter!</p>
<img src="https://via.placeholder.com/200" alt="">
</div>
</section>
You can use the (flexbox) on the parent of the childrens then use (justify-content: space between), like the example below:
.underline {
text-decoration: underline;
}
.box2 img {
position: right;
width: 200px;
height: 200px;
}
.box2 {
margin: 0 auto;
margin-right: 20%;
margin-left: 20%;
margin-top: 20px;
background-color: rgb(255, 255, 255);
padding: 15px;
height: 50%;
display:flex;
justify-content: space-between;
}
p {
width: 300px;
}
<section class="box2">
<div>
<h1 class="underline"><b>Husk dit helbred!</b></h1>
<p>Projekt arbejde er vigtigt, men ikke lige så vigtigt som dit helbred! Husk at drikke vand, at spise noget og at tage en masse pauser. Du bliver mere produktiv, hvis du skaber et sundt forhold til dit studie arbejde og helbred. Det var alt fra mig, held
og lykke med jeres mange fremtide projekter!</p>
</div>
<img src="https://via.placeholder.com/200" alt="">
</section>
Use float, not position. Use this CSS. I hope it will help you.
.underline {
text-decoration: underline;
}
.box2 img {
float: right;
width: 200px;
height: 200px;
}
.box2 {
margin: 0 auto;
margin-right: 20%;
margin-left: 20%;
margin-top: 20px;
background-color: rgb(255, 255, 255);
padding: 15px;
height: 50%;
}
p {
width: 300px;
float: left;
}
.underline {
text-decoration: underline;
grid-column: 1/3;
grid-row: 1/2;
}
.box2 img {
width: 200px;
height: 200px;
grid-column: 2/3;
grid-row: 2/3;
}
.box2 {
margin: 20px 20%;
background-color: rgb(255, 255, 255);
padding: 15px;
display: grid;
grid-template-columns: min(1fr, 300px) 1fr;
grid-template-rows: min-content min-content;
gap: 15px;
box-shadow: 0 0 100px rgba(0, 0, 0, .1);
}
p {
text-indent: 2em;
margin: 0;
grid-column: 1/2;
grid-row: 2/3;
}
<section class="box2">
<h1 class="underline"><b>Husk dit helbred!</b></h1>
<p>Projekt arbejde er vigtigt, men ikke lige så vigtigt som dit helbred! Husk at drikke vand, at spise noget og at tage en masse pauser. Du bliver mere produktiv, hvis du skaber et sundt forhold til dit studie arbejde og helbred. Det var alt fra mig, held
og lykke med jeres mange fremtide projekter!</p>
<img src="https://via.placeholder.com/100" alt="">
</section>
All I had to do was move my img above the p, example:
so instead of this:
<h1 class="underline"><b>Husk dit helbred!</b></h1>
<p>Projekt arbejde er vigtigt, men ikke lige så vigtigt som dit helbred! Husk at drikke vand, at spise noget og at tage en masse pauser. Du bliver mere produktiv, hvis du skaber et sundt forhold til dit studie arbejde og helbred. Det var alt fra mig, held og lykke med jeres mange fremtide projekter!</p>
<img src="images/emilybillede.jpg" alt="">
It had to look like this:
<h1 class="underline"><b>Husk dit helbred!</b></h1>
<img src="images/emilybillede.jpg" alt="">
<p>Projekt arbejde er vigtigt, men ikke lige så vigtigt som dit helbred! Husk at drikke vand, at spise noget og at tage en masse pauser. Du bliver mere produktiv, hvis du skaber et sundt forhold til dit studie arbejde og helbred. Det var alt fra mig, held og lykke med jeres mange fremtide projekter!</p>

Align each text correctly with It's respective image

I want to make a list of fish with their respective descriptions aligned with their image. As you can see, "Saumon" is roughly aligned with it's image, but "Truite" isn't at all, so much that it's with a wrong image. How can I align it correctly with all window sizes? Thank you in advance.
Here is my code
<img class="imgfish" src="/images/saumon.png" alt="Saumon" />
<h3 class="titlefish">Saumon</h3>
<p>
Le saumon est un poisson gras à la chair rosée, de la même famille que la
truite ou l'omble. Il nait et se reproduit en eau douce, mais vit dans
l'océan. Il existe plus de 60 sortes de saumon et il a été le poisson le
plus consommé sur terre depuis la préhistoire.
</p>
<img class="imgfish" src="/images/truite.png" alt="Saumon" />
<h3 class="titlefish">Truite</h3>
<p>
La truite est un poisson que l’on pêche dans les rivières et les lacs.
Elle appartient à la famille de salmonidés qui comprend entre autres, le
saumon, le touladi, l’omble chevalier. La truite est une excellente source
d’acides gras omégas-3, reconnus pour limiter l’apparition de certains
cancers et certaines maladies cardio-vasculaires.
</p>
CSS
.imgfish {
float: left;
clear: left;
width: 400px;
padding-top: 0rem;
border-radius: 15px;
max-width: 40vw;
margin: 30px;
}
.titlefish {
margin-bottom: 1rem;
}
And here are the results
As I mention in the comment you need to use "grid layout".
body{
display: flex;
justify-content: center;
align-items: center;
}
#container {
display: grid;
grid-template-columns: 0.5fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
gap: 0px 0px;
grid-template-areas:
"a b"
"c d"
"e f";
row-gap: 5px;
width: 80%;
height: 100%;
}
img{
max-width: 400px;
max-height: 400px;
}
#container:nth-child(1){
/*First Image*/
grid-area: a;
}
#container:nth-child(2){
/*Description of first image*/
grid-area: b;
}
<div id="container">
<img class="imgfish" src="https://images.unsplash.com/photo-1633885096653-53ea6830e77a?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80" alt="Saumon" />
<div class="description">
<h3 class="titlefish">Saumon</h3>
<p>
Le saumon est un poisson gras à la chair rosée, de la même famille que la
truite ou l'omble. Il nait et se reproduit en eau douce, mais vit dans
l'océan. Il existe plus de 60 sortes de saumon et il a été le poisson le
plus consommé sur terre depuis la préhistoire.
</p>
</div>
<img class="imgfish" src="https://images.unsplash.com/photo-1633884941685-dd89adc11ab8?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80" alt="Saumon" />
<div class="description">
<h3 class="titlefish">Truite</h3>
<p>
La truite est un poisson que l’on pêche dans les rivières et les lacs.
Elle appartient à la famille de salmonidés qui comprend entre autres, le
saumon, le touladi, l’omble chevalier. La truite est une excellente source
d’acides gras omégas-3, reconnus pour limiter l’apparition de certains
cancers et certaines maladies cardio-vasculaires.
</p>
</div>
<img class="imgfish" src="https://images.unsplash.com/photo-1633884941685-dd89adc11ab8?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80" alt="Saumon" />
<div class="description">
<h3 class="titlefish">Something else</h3>
<p>
La truite est un poisson que l’on pêche dans les rivières et les lacs.
Elle appartient à la famille de salmonidés qui comprend entre autres, le
saumon, le touladi, l’omble chevalier. La truite est une excellente source
d’acides gras omégas-3, reconnus pour limiter l’apparition de certains
cancers et certaines maladies cardio-vasculaires.
</p>
</div>
You should post your code to have a specific answer.
You could put the image and its description within the same parent div, you could use a table, etc. It depends on your current code.

html css aligning elements in a div

I am using CSS3 and HTML5 with Sublime and I am trying to align perfectly three elements inside a div but I don't know how to do that. The elements are located in the second div and they are a button and two images.
h1 {
margin-left: 510px;
}
div {
column-count: 2;
padding-left: 50px padding-right: 50px;
}
button {
background-color: red;
width: 100px;
height: 70px;
margin-left: 50px;
margin-top: 50px;
}
/*
div img {
margin-left: 735px;
width:304px;
height:228px;
visibility:hidden;
} */
#myImageId {
margin-left: 35px;
width: 304px;
height: 228px;
visibility: visible;
}
#myImageId2 {
margin-left: 35px;
width: 304px;
height: 228px;
visibility: visible;
}
<h1>Lorem Ipsum</h1>
<br>
<div>
<h3>Cos’è Lorem Ipsum?</h3>
Lorem Ipsum è un testo segnaposto utilizzato nel settore della tipografia e della stampa. Lorem Ipsum è considerato il testo segnaposto standard sin dal sedicesimo secolo, quando un anonimo tipografo prese una cassetta di caratteri e li assemblò per preparare
un testo campione. È sopravvissuto non solo a più di cinque secoli, ma anche al passaggio alla videoimpaginazione, pervenendoci sostanzialmente inalterato. Fu reso popolare, negli anni ’60, con la diffusione dei fogli di caratteri trasferibili “Letraset”,
che contenevano passaggi del Lorem Ipsum, e più recentemente da software di impaginazione come Aldus PageMaker, che includeva versioni del Lorem Ipsum.
<br>
<h3>Perchè lo utilizziamo?</h3>
È universalmente riconosciuto che un lettore che osserva il layout di una pagina viene distratto dal contenuto testuale se questo è leggibile. Lo scopo dell’utilizzo del Lorem Ipsum è che offre una normale distribuzione delle lettere (al contrario di
quanto avviene se si utilizzano brevi frasi ripetute, ad esempio “testo qui”), apparendo come un normale blocco di testo leggibile. Molti software di impaginazione e di web design utilizzano Lorem Ipsum come testo modello. Molte versioni del testo sono
state prodotte negli anni, a volte casualmente, a volte di proposito (ad esempio inserendo passaggi ironici).
</div>
<br>
<div>
<button type="button" onclick="showImage()">Show/Hide image!</button>
<img src="http://random-ize.com/lorem-ipsum-generators/lorem-ipsum/lorem-ipsum.jpg" alt="Lorem" id="myImageId">
<img src="http://www.metal-archives.com/images/1/5/5/0/15500_logo.jpg" alt="Lorem2" id="myImageId2">
</div>
I think that with a display flex you can fix it.
Adding a
display: flex;
to the container, the items inside him will fit the container perfectly.
I recommend to see the compatibility in http://caniuse.com/#search=flex
and checking this article by Sean Fioritto
Here's my codepen with an example of how flexbox works in your case http://codepen.io/buenopw/pen/qaJYWN
I suggest you to create container or wrapper class instead of edit the properties of tags, specially div, h1 which is very common across the whole page.
please have a look at
https://plnkr.co/edit/ShRKKsPHd8vcBTqW25L1?p=preview
if you want them to fit the width of the page, then those children elements should not have fixed size.

How to center vertically the text within a multiple div

I've been trying hard for the past hours to switch from the left column to the right one. I mean, I'm trying to center vertically the text div inside the grey div.
I would love to get some of your help. I've read a lot of tutorials and forum answer but didn't get the expected result yet.
Any advice is more than welcome :)
HTML Code :
.box-key-message{
height: 240px;
position: relative;
background-color: #eeeeee;
border-radius: 10px;
}
.box-key-message div {
display:inline-block;
vertical-align:middle;
padding: 20px;
text-align: justify;
}
.box-key-message span {
font-weight:bold;
font-size:16px;
color: #D5420F;
}
<div class="col-lg-4 col-lg-offset-1">
<div class="box-key-message">
<div>
<span> Gratuit</span>
<br /><br />
Notre service, qui vous permet d’accéder à des centaines d’étudiants, est complètement gratuit pour vous.
<br /><br />
Vous ne rémunérez que l’étudiant. Un acompte de 15% vous sera demandé au moment de la mise en relation. Le reste sera payé une fois tous les succès de votre mission atteints !
</div>
</div>
<br /><br />
<div class="box-key-message">
<div>
<span>Simple et Rapide</span>
<br /><br />
Remplissez cette page en 5 minutes pour publier une mission à tous nos étudiants.
<br /><br />
Vous recevrez alors le CV des étudiants intéressés par votre mission. Une fois l’étudiant sélectionné, la mission commence.
</div>
</div>
<br /><br />
<div class="box-key-message">
<div>
<span>Sans engagement</span>
<br /><br />
Les étudiants des Grandes Ecoles qui vous répondent sont qualifiés, motivés, disponibles et réactifs.
<br /><br />
Si malgré tout aucun profil ne vous correspond, vous n’avez aucune obligation de recruter un étudiant et poster la mission aura été gratuit.
</div>
</div>
<br /><br />
<div class="box-key-message">
<div>
<span>Et pour payer l’étudiant ?</span>
<br /><br />
L’étudiant vous facturera la prestation en direct à la fin de la mission.
</div>
</div>
</div>
You could use the inner div as a table-cell, then vertical-align works on it.
I also improved your HTML, instead of using two line breaks, it's better to use paragraphs or margin.
<div class="col-lg-4 col-lg-offset-1">
<div class="box-key-message">
<div>
<span> Gratuit</span>
<p>Notre service, qui vous permet d’accéder à des centaines d’étudiants, est complètement gratuit pour vous.</p>
<p>Vous ne rémunérez que l’étudiant. Un acompte de 15% vous sera demandé au moment de la mise en relation. Le reste sera payé une fois tous les succès de votre mission atteints !</p>
</div>
</div>
<div class="box-key-message">
<div>
<span>Simple et Rapide</span>
<p>Remplissez cette page en 5 minutes pour publier une mission à tous nos étudiants.</p>
<p>Vous recevrez alors le CV des étudiants intéressés par votre mission. Une fois l’étudiant sélectionné, la mission commence.</p>
</div>
</div>
<div class="box-key-message">
<div>
<span>Sans engagement</span>
<p>Les étudiants des Grandes Ecoles qui vous répondent sont qualifiés, motivés, disponibles et réactifs.</p>
<p>Si malgré tout aucun profil ne vous correspond, vous n’avez aucune obligation de recruter un étudiant et poster la mission aura été gratuit.</p>
</div>
</div>
<div class="box-key-message">
<div>
<span>Et pour payer l’étudiant ?</span>
<p>L’étudiant vous facturera la prestation en direct à la fin de la mission.</p>
</div>
</div>
</div>
.box-key-message {
height: 240px;
background-color: #eeeeee;
border-radius: 10px;
margin-bottom: 2em;
display: table;
}
.box-key-message div {
display: table-cell;
vertical-align:middle;
padding: 20px;
text-align: justify;
}
.box-key-message span {
font-weight:bold;
font-size:16px;
color: #D5420F;
}
DEMO
Just use display: table; table-layout: fixed; for the parent div and display: table-cell; vertical-align: middle; for every child. See how it works below. You probably also will need to specify width: 100% to both of them.
.box-key-message{
height: 240px;
position: relative;
background-color: #eeeeee;
border-radius: 10px;
display: table;
table-layout: fixed;
}
.box-key-message div {
display:inline-block;
vertical-align:middle;
padding: 20px;
text-align: justify;
display: table-cell;
vertical-align: middle;
width: 100%;
}
.box-key-message span {
font-weight:bold;
font-size:16px;
color: #D5420F;
}
<div class="col-lg-4 col-lg-offset-1">
<div class="box-key-message">
<div>
<span> Gratuit</span>
<br /><br />
Notre service, qui vous permet d’accéder à des centaines d’étudiants, est complètement gratuit pour vous.
<br /><br />
Vous ne rémunérez que l’étudiant. Un acompte de 15% vous sera demandé au moment de la mise en relation. Le reste sera payé une fois tous les succès de votre mission atteints !
</div>
</div>
<br /><br />
<div class="box-key-message">
<div>
<span>Simple et Rapide</span>
<br /><br />
Remplissez cette page en 5 minutes pour publier une mission à tous nos étudiants.
<br /><br />
Vous recevrez alors le CV des étudiants intéressés par votre mission. Une fois l’étudiant sélectionné, la mission commence.
</div>
</div>
<br /><br />
<div class="box-key-message">
<div>
<span>Sans engagement</span>
<br /><br />
Les étudiants des Grandes Ecoles qui vous répondent sont qualifiés, motivés, disponibles et réactifs.
<br /><br />
Si malgré tout aucun profil ne vous correspond, vous n’avez aucune obligation de recruter un étudiant et poster la mission aura été gratuit.
</div>
</div>
<br /><br />
<div class="box-key-message">
<div>
<span>Et pour payer l’étudiant ?</span>
<br /><br />
L’étudiant vous facturera la prestation en direct à la fin de la mission.
</div>
</div>
</div>
You can use display: table; width:100%; on .box-key-message, and display: table-cell on the div within it in. You want to use the table css hack because tables support vertical-align: middle while regular divs do not.
HTML:
<div class="row">
<div class="col-lg-4 col-lg-offset-1">
<div class="box-key-message">
<div>
<p><strong> Gratuit</strong></p>
<p>Notre service, qui vous permet d’accéder à des centaines d’étudiants, est complètement gratuit pour vous.</p>
<p>Vous ne rémunérez que l’étudiant. Un acompte de 15% vous sera demandé au moment de la mise en relation. Le reste sera payé une fois tous les succès de votre mission atteints !</p>
</div>
</div>
<div class="box-key-message">
<div>
<p><strong>Simple et Rapide</strong></p>
<p>Remplissez cette page en 5 minutes pour publier une mission à tous nos étudiants.</p>
<p>Vous recevrez alors le CV des étudiants intéressés par votre mission. Une fois l’étudiant sélectionné, la mission commence.</p>
</div>
</div>
<div class="box-key-message">
<div>
<p><strong>Sans engagement</strong></p>
<p>Les étudiants des Grandes Ecoles qui vous répondent sont qualifiés, motivés, disponibles et réactifs.</p>
<p>Si malgré tout aucun profil ne vous correspond, vous n’avez aucune obligation de recruter un étudiant et poster la mission aura été gratuit.</p>
</div>
</div>
<div class="box-key-message">
<div>
<p><strong>Et pour payer l’étudiant ?</strong></p>
<p>L’étudiant vous facturera la prestation en direct à la fin de la mission.</p>
</div>
</div>
</div>
</div>
CSS:
.box-key-message{
height: 240px;
display:table;
background-color: #eeeeee;
border-radius: 10px;
margin-bottom: 20px;
width: 100%;
}
.box-key-message div {
display:table-cell;
vertical-align: middle;
padding: 20px;
text-align: justify;
}
.box-key-message strong {
font-size:16px;
color: #D5420F;
}
As a sidenote, you overused break tags a little too much. You can get the spacing you want for the content inside the .box-key-message divs by using paragraph tags around your content. To separate out the box-key-message blocks so they won't touch each other, you can add a margin-bottom: 20px; (or whatever spacing you prefer) to .box-key-message in your css.
See this codepen for an example.

How can I put a "+" below each table?

I have this site:
http://dl.dg-site.com/produits-game/
Under each table I want to put a "+" as in this example
http://www.delumine.ch/produits-et-gamme.html
This is my code:
http://jsfiddle.net/xcn8fg94/
CODE HTML:
<div id="tabel_1">
<p id="title_first">Qualité</p>
<p id="content_first">Le souci de qualité de nos installations, de standards européens, est au coeur de notre activité. C’est pourquoi nous choisissons des partenaires de qualité et de savoir-faire, tels que Philips, Bosch, Zanussi.</p>
<div id="image_first"></div>
</div>
<div id="tabel_2">
<p id="title_first">Qualité</p>
<p id="content_first">Le souci de qualité de nos installations, de standards européens, est au coeur de notre activité. C’est pourquoi nous choisissons des partenaires de qualité et de savoir-faire, tels que Philips, Bosch, Zanussi.</p>
<div id="image_first"></div>
</div>
<div id="tabel_3">
<p id="title_first">Qualité</p>
<p id="content_first">Le souci de qualité de nos installations, de standards européens, est au coeur de notre activité. C’est pourquoi nous choisissons des partenaires de qualité et de savoir-faire, tels que Philips, Bosch, Zanussi.</p>
<div id="image_first"></div>
</div>
<div id="tabel_4">
<p id="title_first">Qualité</p>
<p id="content_first">Le souci de qualité de nos installations, de standards européens, est au coeur de notre activité. C’est pourquoi nous choisissons des partenaires de qualité et de savoir-faire, tels que Philips, Bosch, Zanussi.</p>
<div id="image_first"></div>
</div>
Code CSS:
#tabel_1,#tabel_2,#tabel_3,#tabel_4{width:210px;height:540px;
display:inline-block;
background: #FFFFFF;
vertical-align:top;
border: 2px solid #264572;
margin-left: 10px;}
I tried to add <p>+<p> under each table but not working.
Can you help me to solve this problem please?
Thanks in advance!
Make a margin below the divs (margin-bottom)
Make the div positioned absolute, so that the p containing the + can be positioned absolute
Create the p , with class bottom
Give them the correct dimension and position
#tabel_1,#tabel_2,#tabel_3,#tabel_4{width:210px;height:540px;
display:inline-block;
background: #FFFFFF;
vertical-align:top;
border: 2px solid #264572;
margin-left: 10px;
margin-bottom: 50px;
position: relative;
}
.bottom {
position: absolute;
top: 100%;
left: 0px;
right: 0px;
width: 1em;
margin: auto;
font-size: 40px;
font-weight: bolder;
}
<div id="tabel_1">
<p id="title_first">Qualité</p>
<p id="content_first">Le souci de qualité de nos installations, de standards européens, est au coeur de notre activité. C’est pourquoi nous choisissons des partenaires de qualité et de savoir-faire, tels que Philips, Bosch, Zanussi.</p>
<div id="image_first"></div>
<p class="bottom">+</p>
</div>
<div id="tabel_2">
<p id="title_first">Qualité</p>
<p id="content_first">Le souci de qualité de nos installations, de standards européens, est au coeur de notre activité. C’est pourquoi nous choisissons des partenaires de qualité et de savoir-faire, tels que Philips, Bosch, Zanussi.</p>
<div id="image_first"></div>
<p class="bottom">+</p>
</div>
<div id="tabel_3">
<p id="title_first">Qualité</p>
<p id="content_first">Le souci de qualité de nos installations, de standards européens, est au coeur de notre activité. C’est pourquoi nous choisissons des partenaires de qualité et de savoir-faire, tels que Philips, Bosch, Zanussi.</p>
<div id="image_first"></div>
<p class="bottom">+</p>
</div>
<div id="tabel_4">
<p id="title_first">Qualité</p>
<p id="content_first">Le souci de qualité de nos installations, de standards européens, est au coeur de notre activité. C’est pourquoi nous choisissons des partenaires de qualité et de savoir-faire, tels que Philips, Bosch, Zanussi.</p>
<div id="image_first"></div>
<p class="bottom">+</p>
</div>
you probably wouldnt use the + as in what is on your keyboard. check out icon websites like http://fortawesome.github.io/Font-Awesome/. through font-awesome they have different sizes and they are very easy to use.
for the full icon list go here: http://fortawesome.github.io/Font-Awesome/icons/
I'd use a :after selector for that and set an icon as the background. Currently not on my pc, so no example sorry.