Vertical aligning items in CSS which are next to each other [duplicate] - html

This question already has answers here:
Align inline-block DIVs to top of container element
(5 answers)
Closed 1 year ago.
I have 2 icons in divs and 1 link which works as a button
.A {
width: 50px;
height: 50px;
border: 1px solid black;
display: inline-flex;
justify-content: center;
align-items: center;
margin: 5px;
}
a {
text-decoration: none;
}
.B {
width: 100px;
height: 50px;
}
/* when i change font-size for example to 10px then the element moves down a bit*/
.A span {
text-transform: uppercase;
color: black;
font-size: 10px;
}
<script src="https://kit.fontawesome.com/4254229804.js" crossorigin="anonymous"></script>
<a href="#">
<div class="A">
<i class="fab fa-facebook-f"></i>
</div>
</a>
<a href="#">
<div class="A">
<i class="fab fa-youtube"></i>
</div>
</a>
<a href="#">
<div class="A B">
<span>sign up</span>
</div>
</a>
here is a link to codepen https://codepen.io/hanzus/pen/GRrMbbm
Everything is centered when a font size of span element of "sign up" link is 16px, but when I change it for example to 10px then link moves a bit down and it is not on the same line with other divs with facebook and youtube links.
How do I get these links on the same line when I change a font-size of 1 element?

Wrap in flex:
.container {
display: flex;
}
<div class="container">
<a href="#">
<div class="A">
<i class="fab fa-facebook-f"></i>
</div>
</a>
<a href="#">
<div class="A">
<i class="fab fa-youtube"></i>
</div>
</a>
<a href="#">
<div class="A B">
<span>sign up</span>
</div>
</a>
</div>
Codepen

I know I am a bit a late to the party, but it is possible to make it simpler:
.container {
display: inline-flex;
width: 300px;
height: 50px;
}
.container a {
width: 33%;
margin: 5px;
border: 1px solid black;
display:inline-flex;
justify-content:center;
align-items:center;
font-size: 16px;
}
<div class="container">
<a href="#">
<i class="fab fa-facebook-f"></i>
</a>
<a href="#">
<i class="fab fa-youtube"></i>
</a>
<a href="#">
<span>sign up</span>
</a>
</div>

You should only add "flex-direction: column;" for your CSS code.
.container{
display: flex;
flex-direction: column;
}
.A {
width:50px;
height: 50px;
border: 1px solid black;
display:inline-flex;
justify-content:center;
align-items:center;
margin: 5px;
}
a {
text-decoration:none;
}
.B {
width: 100px;
height: 50px;
}
.A span {
text-transform: uppercase;
color:black;
font-size: 10px;
}

Related

How To Make Social Icons Responsive HTML CSS

i am developing my portfolio website but i came into an error can anyone just help me.
i need to make my social icons responsive.
Here The The Image For Desktop Version.
I need To make it responsive and direction to row for mobile version. Please Help Me.
As You Can See Here The Social Icons Are Not Responsive.
index.html
```
<!-- home -->
<section class="home bd-grid" id="home">
<div class="max-width">
<div class="home-content">
<div class="text-1">Hello, Myself</div>
<div class="text-2">Piyush Shrivastava</div>
<div class="text-3">And I'm a <span class="typing"></span></div>
Download CV
</div>
</div>
<div class="social">
<ul>
<li>
<div class="circle">
<i class="fa fa-facebook-f" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-instagram" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-twitter" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-youtube" aria-hidden="true"></i>
</div>
</li>
</ul>
</div>
</section>```
Styles.css
.home{
display: flex;
flex-wrap: wrap;
background: url("/img/banner.jpg") no-repeat center;
height: 100vh;
color: #fff;
min-height: 500px;
background-size: cover;
background-attachment: fixed;
font-family: 'Ubuntu', sans-serif;
}
.home .max-width{
width: 100%;
display: flex;
}
.home .max-width .row{
margin-right: 0;
}
.home .home-content .text-1{
font-size: 27px;
}
.home .home-content .text-2{
font-size: 75px;
font-weight: 600;
margin-left: -3px;
}
.home .home-content .text-3{
font-size: 40px;
margin: 5px 0;
}
.home .home-content .text-3 span{
color: #32de84;
font-weight: 500;
}
.home .home-content a{
display: inline-block;
background: #32de84;
color: #fff;
font-size: 25px;
padding: 12px 36px;
margin-top: 20px;
font-weight: 400;
border-radius: 6px;
border: 2px solid #32de84;
transition: all 0.3s ease;
}
.home .home-content a:hover{
color: #32de84;
background: none;
}
.social{
position: absolute;
top: 35%;
right: 5%;
color: #fff;
/* background-color: #ffffff; */
}
.social ul{
list-style: none;
}
.social li{
margin-bottom: 20px;
text-align: center;
}
.circle{
background-color: transparent;
border: 2px solid white;
border-radius: 200px;
height: 35px;
width: 35px;
}
.social i{
padding-top: 7px;
height: 30px;
width: 30px;
color: #ffffff;
}
#media (max-width: 947px) {
.home .home-content .text-2 {
font-size: 60px;
}
}```
Try thinking of your problem the other way around.
Layout shifts like this are much easier to deal with when working with a 'mobile first' approach. (style the mobile version and then override at a min-width media query to style the desktop version, rather than styling the desktop perfectly and then trying to fold everything down to mobile.)
I've knocked up a quick demo of what should work for you.
This is NOT a direct replication of or fix of your existing code, just a demo of the methods you could use, but hopefully from this demo and the snippets, you should understand what is happening and be able to apply some of these methods to your own code.
The method is entirely done with flex properties.
The socials are no longer absolutely positioned and the unnecessary social wrapper div is removed.
I've added border colors and padding just to more obviously show you whats happening to the box model when you resize your browser.
To view the demo, click 'run code snippet' - but make sure to then also click the 'full page' option otherwise it'd only show you the mobile layout.
Here's the JSFiddle where I created the demo incase it's useful: CLICK TO VIEW FIDDLE
.contentWrapper {
border: 1px solid pink;
padding: 10px;
}
.mainContent {
border: 1px solid blue;
padding: 10px;
}
.social {
border: 1px solid green;
padding: 10px;
}
ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: row;
gap: 10px;
}
.circle {
background-color: red;
border: 2px solid white;
border-radius: 200px;
height: 35px;
width: 35px;
}
#media screen and (min-width: 948px) {
.myWrapper {
display: flex;
min-height: 100vh;
flex-direction: row;
}
.contentWrapper {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center
}
.mainContent {
width: calc(100% - 55px);
max-width: 1000px;
margin: 0 auto;
}
.social {
display: flex;
flex-direction: column;
justify-content: center;
}
.social ul {
display: flex;
flex: 0 0 55px;
flex-direction: column;
}
}
<section class="myWrapper">
<div class="contentWrapper">
<div class="mainContent">
<div class="text-1">Hello, Myself</div>
<div class="text-2">Piyush Shrivastava</div>
<div class="text-3">And I'm a <span class="typing"></span></div>
Download CV
</div>
</div>
<ul class="social">
<li>
<div class="circle">
<i class="fa fa-facebook-f" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-instagram" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-twitter" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-youtube" aria-hidden="true"></i>
</div>
</li>
</ul>
</section>
To make icons in row
we can do it using #media in the approach
APPROACH
Use flexbox to make your icons in a row
and use grid to make everything in a row when you are on a big screen
you can also set width and then add margin auto to make things centre but using justify-content center is better ---> not told in this answer
<!-- home -->
<section class="home bd-grid" id="home">
<div class="max-width">
<div class="home-content">
<div class="text-1">Hello, Myself</div>
<div class="text-2">Piyush Shrivastava</div>
<div class="text-3">And I'm a <span class="typing"></span></div>
Download CV
</div>
</div>
<div class="social">
<ul class="icons"> // give class icons to make it a flexbox
<li>
<div class="circle">
<i class="fa fa-facebook-f" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-instagram" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-twitter" aria-hidden="true"></i>
</div>
</li>
<li>
<div class="circle">
<i class="fa fa-youtube" aria-hidden="true"></i>
</div>
</li>
</ul>
</div>
</section>```
***css***
.icons{
display: flex;
flex-direction: column;
justify-content: center;
}
#media screen and (min-width: 800px //your mobile screen width) {
.icons {
display: flex;
justify-content:center;
}
.home{
display:grid;
width: 100vw;
gap: 20px;
text-align:center;
grid-template-column:2fr 2fr;
}

I want to place my icons in the middle of the circle [duplicate]

This question already has answers here:
How can I center text (horizontally and vertically) inside a div block?
(27 answers)
How to vertically align an image inside a div
(37 answers)
How can I vertically align elements in a div?
(28 answers)
Closed 2 years ago.
How can I place my icons in the middle of the circle, based on the following picture:
Here is my HTML code:
<footer>
<div class="footer-bg-1">
<h1 class="display-5" style="color: white">Find Me on</h1><br>
<ul class="socialnetworks">
<li>
<a href="https://www.linkedin.com/" title="LinkedIn">
<i class="fab fa-linkedin-in"></i>
</a>
</li>
<li>
<a href="https://github.com/" title="GitHub">
<i class="fab fa-github"></i>
</a>
</li>
<li>
<a href="https://twitter.com/" title="Twitter">
<i class="fab fa-twitter"></i>
</a>
</li>
</div>
</footer>
Here is my CSS code that needs to be modified to place the icons in the middle of the white circles:
ul.socialnetworks {
margin: 0;
border:15px;
padding: 0;
width: 100%;
text-align: center;
}
ul.socialnetworks > li {
display: inline-block;
}
ul.socialnetworks > li > a {
display: inline-block;
font-size: 25px;
line-height: 50px;
width: 58px;
height: 58px;
border-radius: 36px;
background-color: #313132;
box-shadow: 0px 0px 2px white;
color: white;
margin: 0 4px 3px 0;
border: 8px solid;
}
You can try something like this:
.item{
border-radius:50%;
background-color:black;
border:15px solid white;
width:50px;
height:50px;
display:inline-flex;
}
body{
background-color:black;
}
.item i{
margin-top: 25%;
margin-left: 25%;
color:white;
}
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<div class="item">
<i class="material-icons">add_task</i>
</div>
<div class="item">
<i class="material-icons">add_task</i>
</div>
<div class="item">
<i class="material-icons">add_task</i>
</div>
Icons with class .fab have parameter display: inline-block. This means that vertical-align: middle can be used.
Just add it to your css:
.fab {
vertical-align: middle;
}
ul.socialnetworks {
margin: 0;
border:15px;
padding: 0;
width: 100%;
text-align: center;
}
ul.socialnetworks > li {
display: inline-block;
}
ul.socialnetworks > li > a {
display: inline-block;
font-size: 25px;
line-height: 50px;
width: 58px;
height: 58px;
border-radius: 36px;
background-color: #313132;
box-shadow: 0px 0px 2px white;
color: white;
margin: 0 4px 3px 0;
border: 8px solid;
}
.fab {
vertical-align: middle;
}
<script src='https://kit.fontawesome.com/a076d05399.js'></script>
<footer>
<div class="footer-bg-1">
<h1 class="display-5" style="color: white">Find Me on</h1><br>
<ul class="socialnetworks">
<li>
<a href="https://www.linkedin.com/" title="LinkedIn">
<i class="fab fa-linkedin-in"></i>
</a>
</li>
<li>
<a href="https://github.com/" title="GitHub">
<i class="fab fa-github"></i>
</a>
</li>
<li>
<a href="https://twitter.com/" title="Twitter">
<i class="fab fa-twitter"></i>
</a>
</li>
</ul>
</div>
</footer>
set the line-height equal to height line-height: 58px;
ul.socialnetworks {
margin: 0;
border: 15px;
padding: 0;
width: 100%;
text-align: center;
}
ul.socialnetworks>li {
display: inline-block;
}
ul.socialnetworks>li>a {
display: inline-block;
font-size: 25px;
line-height: 58px;
width: 58px;
height: 58px;
border-radius: 36px;
background-color: #313132;
box-shadow: 0px 0px 2px white;
color: white;
margin: 0 4px 3px 0;
border: 8px solid;
}
<script src="https://kit.fontawesome.com/a076d05399.js"></script>
<footer>
<div class="footer-bg-1">
<h1 class="display-5" style="color: white">Find Me on</h1><br>
<ul class="socialnetworks">
<li>
<a href="https://www.linkedin.com/" title="LinkedIn">
<i class="fab fa-linkedin-in"></i>
</a>
</li>
<li>
<a href="https://github.com/" title="GitHub">
<i class="fab fa-github"></i>
</a>
</li>
<li>
<a href="https://twitter.com/" title="Twitter">
<i class="fab fa-twitter"></i>
</a>
</li>
</div>
</footer>

Footer with copyright and social media icons won't center vertically

Working on making my website. I'm sure this is an easy fix but I'm so stuck!
I am trying to vertically center the copyright info on the right, then the social icons on the left. But they appear to be stacked then aligned left and right.
Here's what that looks like
Please forgive the dumb question. Very new to all this, and I've done as much troubleshooting as I can. I'm hoping is a "duh" answer!
I have a footer in my index which reads like this:
#main-footer {
padding: center;
background: darken($primary-color, 10);
color: set-text-colour($primary-color);
height: 60px;
.footer_text {
text-align: right;
font-size: 17px;
}
.footer_icons {
margin-left: 5%;
text-align: center;
display: block;
width: 100px;
padding: 4px;
a {
align: left;
&:hover {
color: $secondary-color;
#include easeOut;
}
}
}
}
<footer id="main-footer">
<div class="footer_text">Copyright © 2018</div>
<div class="footer_icons">
<a href="https://www.instagram.com/beellllaa/">
<i class="fab fa-instagram fa-2x"></i>
</a>
<a href="https://www.linkedin.com/in/beellllaa/">
<i class="fab fa-linkedin fa-2x"></i>
</a>
<a href="https://www.vimeo.com/beellllaa/">
<i class="fab fa-vimeo fa-2x"></i>
</a>
</div>
</footer>
I was unable to directly use your code via codepen, so I mocked up something quick. You could quickly center vertically by using flexbox. This might require though that you use some prefixes as well. Can check it out here:
https://codepen.io/pen/?editors=1100
#main-footer {
background-color: teal;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.social {
display: flex;
}
.footer-icons {
background-color: red;
height: 10px;
width: 10px;
margin: 5px;
padding: 5px;
}
<footer id="main-footer">
<div>Copyright © 2018</div>
<div class="social">
<div class="footer-icons"></div>
<div class="footer-icons"></div>
<div class="footer-icons"></div>
</div>
</footer>
I would recommend the following:
Readjust your HTML so that your .footer_text div comes after the .footer_icons div.
Add the following lines of CSS to your #main_footer div.
display: flex;
align-items: center;
justify-content: space-between;
See the code snippet below or this codepen:
#main-footer {
padding: center;
background: darken($primary-color, 10);
color: set-text-colour($primary-color);
height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
.footer_text {
text-align: right;
font-size: 17px;
}
.footer_icons {
margin-left: 5%;
text-align: center;
display: block;
width: 100px;
padding: 4px;
a {
align: left;
&:hover {
color: $secondary-color;
#include easeOut;
}
}
}
}
<footer id="main-footer">
<div class="footer_icons">
<a href="https://www.instagram.com/beellllaa/">
<i class="fab fa-instagram fa-2x">IG</i>
</a>
<a href="https://www.linkedin.com/in/beellllaa/">
<i class="fab fa-linkedin fa-2x">LI</i>
</a>
<a href="https://www.vimeo.com/beellllaa/">
<i class="fab fa-vimeo fa-2x">VI</i>
</a>
</div>
<div class="footer_text">Copyright © 2018</div>
</footer>
$primary-color:white;
$secondary-color:white;
#main-footer {
padding: center;
background: darken($primary-color, 10);
color: set-text-colour($primary-color);
height: 60px;
line-height: 60px;
.footer_text {
font-size: 17px;
line-height:60px;
float: right;
}
.footer_icons {
margin-left: 5%;
text-align: center;
display: inline-block;
width: 150px;
padding: 4px;
a {
align: left;
padding-right:10px;
&:hover {
color: $secondary-color;
}
}
}
}
i{
font-family:'FontAwesome';
}
<footer id="main-footer">
<div class="footer_icons">
<a href="https://www.instagram.com/beellllaa/">
<i class="fa fa-instagram fa-2x"></i>
</a>
<a href="https://www.linkedin.com/in/beellllaa/">
<i class="fa fa-linkedin fa-2x"></i>
</a>
<a href="https://www.vimeo.com/beellllaa/">
<i class="fa fa-vimeo fa-2x"></i>
</a>
</div>
<div class="footer_text">Copyright © 2018</div>
</footer>
This should work. .footer_text{float:right;line-height:60px;} .footer_icons{display:inline-block;}
Codepen Link : https://codepen.io/mk_dev/pen/KxbyJp

How to center logo using flexbox?

I need to center the logo in the middle of the container and not in the middle of the space between the start div and end div. Is there any way to do it with using flexbox?
Here's a snapshot of the logo centered in the middle of the space between the two divs:
My code:
/* =======Header Start======= */
.bar-wrapper{
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: baseline;
padding-bottom: 15px;
border-bottom: 2px solid #3e3e3e !important;
}
/* =======Social Icons======= */
.social-icons-list {
padding-left: 0;
list-style: none;
}
.social-icons-list li {
display: inline-block;
margin-right: 13px;
}
.social-icons-list .fab {
width: 30px;
height: 30px;
line-height: 25px;
border: 2px solid #3e3e3e;
text-align: center;
color: #3e3e3e;
border-radius: 50%;
}
/* =======Social Icons End======= */
.search-btn a{
color: #3e3e3e;
}
.search-btn .fas{
font-size: 26px;
}
.logo img{
align-self: center;
}
<div class="container">
<div class="bar-wrapper">
<div class="social-icons">
<ul class="social-icons-list">
<li> <i class="fab fa-facebook-f"></i></li>
<li> <i class="fab fa-twitter"></i></li>
<li> <i class="fab fa-google-plus-g"></i></li>
<li> <i class="fab fa-youtube"></i></li>
<li> <i class="fab fa-instagram"></i></li>
</ul>
</div>
<div class="logo">
<img src="imgs/Logo.png" alt="logo">
</div>
<div class="search-btn">
<i class="fas fa-search"></i>
</div>
</div>
</div>
First of all, you should delete property align-self: center; on .logo img. You define spaces between the elements of flexbox by adding justify-content: space-between;, aligning makes no sense in this case.
This property incl. its value justify-content: space-between; computes the spaces between the items automatically and, actually, the spaces must be proportional. However, the widths of the elements in the flexbox are different which makes the spaces between them different as well. Try to add to each item in flexbox min-width-property and it should fix your problem.

Why isn't my flex grow working even with a defined flex basis?

I want the 3 boxes to fill the height of the screen in 1:4:1 ratio.
*{
margin:0;
padding:0;
}
.container{
display: flex;
flex-direction:column;
align-items: center;
height:100100%;
width:100%;
}
.title{
background:yellow;
flex-basis:30px;
flex-grow:1;
}
.box{
background:green;
flex-basis:120px;
flex-grow:4;
}
.buttons{
background:red;
flex-basis:30px;
flex-grow:1;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<div class="container">
<div class="title">
Random Quote Generator
</div>
<div class="box">
This is Where Author and Quote go.
</div>
<p class="blank"></p>
<div class="buttons">
<a class="button"><i class="fa fa-twitter"></i></a>
<a class=button><i class="fa fa-tumblr"></i></a>
<a class='button'><i class="fa fa-chevron-right"></i></a>
</div>
</div>
You're using percentage heights. That requires you to define a height on the parent element. It gets tricky. See here: Working with the CSS height property and percentage values
Instead, just use height: 100vh, which is much simpler and easier.
.container {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh; /* NEW */
width: 100%;
}
.title {
background: yellow;
flex: 1 0 30px;
}
.box {
background: green;
flex: 4 0 120px;
}
.buttons {
background: red;
flex: 1 0 30px;
}
* {
margin: 0;
padding: 0;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<div class="container">
<div class="title">
Random Quote Generator
</div>
<div class="box">
This is Where Author and Quote go.
</div>
<p class="blank"></p>
<div class="buttons">
<a class="button"><i class="fa fa-twitter"></i></a>
<a class=button><i class="fa fa-tumblr"></i></a>
<a class='button'><i class="fa fa-chevron-right"></i></a>
</div>
</div>