I have coded an UI from dribble design as a challenge and completed it but I think The CSS I wrote is really bad. I am a beginner. How can I improve my CSS?. One of the main problems is that I am using position: absolute
for positioning everything. I want it to be responsive.
This is the dribble design I was trying to code
This is what I coded looks (on my machine)
*
{
margin: 0;
padding: 0;
outline: none;
}
body
{
font-family: 'Montserrat', sans-serif;
}
.dash-container
{
position: absolute;
width: 100%;
height: 100%;
min-width: 700px;
overflow: hidden;
}
.left-side {
position: absolute;
width: 25%;
height: 100%;
float: left;
/*background-color: rgb(236, 235, 235, 0.4);
background-color: rgb(110, 145, 255 , 0.1);*/
background: white;
margin-right: 10px;
}
.right-side {
position: absolute;
width: 80%;
height: 100%;
right: 0;
background-color: rgb(164, 171, 195, 0.2);
}
.logo {
position: absolute;
/*color: #6FE3FF; */
color: #3bccf6;
font-size: 2.2em;
font-weight: 900;
top: 20px;
left: 50px;
letter-spacing: 1px;
}
.profile-pic{
position:absolute;
top: 90px;
left: 40px;
}
.profile-pic img {
border-radius: 100%;
width: 50px;
height: 50px;
}
.profile-name .profile-job-title{
position: absolute;
display: block;
}
.profile-name{
position: absolute;
top: 99px;
left: 102px;
font-weight: bold;
font-size: 0.9em;
color:gray;
}
.profile-job-title{
position: absolute;
top: 118px;
left: 102px;
font-size: 0.65em;
color: grey;
font-weight: lighter;
}
.sidebar-options {
position: absolute;
top: 200px;
left: 40px;
color: gray;
font-weight: lighter;
}
.sidebar-options ul li {
font-size: 13px;
line-height: 45px;
list-style: none;
}
.sidebar-options ul li.active {
color: #6FE3FF;
}
.sidebar-options ul li i{
position: relative;
left: 85px;
float: right;
top: 15px;
}
.add-project-btn {
position: absolute;
top: 380px;
left: 0px;
width: 185px;
font-size: 0.9em;
text-align: center;
height: 40px;
color: white;
/*background-color: rgb(7, 104, 104); */
border: none;
border-radius: 50px;
background-image: linear-gradient(to right, rgb(87, 193, 219) 0%, #2FC7F5 51%, rgb(28, 189, 230) 100%);
}
.header {
display: block;
position: absolute;
float: left;
background: white;
top: 0px;
height: 70px;
width: 100%;
}
.fa-search{
position: absolute;
font-size: 16px;
top: 32px;
color: lightgray;
left: 30px;
cursor: pointer;
}
input::placeholder {
color: lightgray;
}
input{
position: absolute;
background-color: white;
width: 45%;
height: 30px;
top: 25px;
left: 65px;
font-size: 18px;
border-radius: 50px;
border: none;
font-family: 'Montserrat', sans-serif;
color: gray;
}
.header-profile-pic{
position:absolute;
top: 22px;
left: 550px;
}
.header-profile-pic img {
border-radius: 100%;
width: 35px;
height: 35px;
cursor: pointer;
}
.green-dot .fa-circle {
position: absolute;
color: #00ff00;
top: 51px;
left: 555px;
font-size: 8px;
}
.header-name {
position: absolute;
color: rgb(3, 3, 3,0.6);
top: 31px;
left: 595px;
font-family: 'Montserrat', sans-serif;
font-size: 0.87em;
font-weight: lighter;
}
.dropdown {
position: absolute;
color: rgb(3, 3, 3,0.6);
top: 32px;
left: 699px;
font-size: 0.87em;
cursor: pointer;
}
.message {
position: absolute;
color: rgb(3, 3, 3,0.6);
top: 32px;
left: 770px;
font-size: 1em;
}
.red-dot-1 {
position: absolute;
color:#ff0000;
top: 28px;
left: 782px;
font-size: 5px;
}
.notify {
position: absolute;
color: rgb(3, 3, 3,0.6);
top: 32px;
left: 840px;
font-size: 1em;
}
.red-dot-2 {
position: absolute;
color: #ff0000;
top: 28px;
left: 850px;
font-size: 5px;
}
.burger {
position: absolute;
color: rgb(3, 3, 3,0.6);
top: 32px;
right: 60px;
font-size: 1em;
}
.dashboard-heading h1 {
position: absolute;
color: rgb(128, 128, 128, 1);
top: 100px;;
left: 100px;
font-size: 1.2em;
}
.blue-rect .fa-tachometer-alt {
position: absolute;
color: white;
background-image: linear-gradient(to right, rgb(87, 193, 219) 0%, #2FC7F5 51%, rgb(28, 189, 230) 100%);
padding: 10px 10px 10px 10px;
border-radius: 10px;
top: 93px;
left: 50px;
font-size: 1em;
}
.card-1 .card-icon {
position: absolute;
font-size: 1.5em;
top: 20px;
left: 40px;
}
.card-1 .card-title {
position: absolute;
font-size: 0.9em;
top: 60px;
left: 40px;
}
.card-1 .card-price {
position: absolute;
font-size: 1.4em;
top: 90px;
left: 40px;
}
.card-1 .card-footer {
position: absolute;
font-size: 0.9em;
top: 130px;
left: 40px;
}
.card-1 .card-background-up {
position: absolute;
height: 130px;
width: 130px;
top: 0px;
left: 220px;
z-index: 10;
}
.card-1 .card-background-down {
position: absolute;
height: 135px;
width: 135px;
top: 80px;
left: 197px;
z-index: 10;
}
.card-2 .card-background-up {
position: absolute;
height: 130px;
width: 130px;
top: 0px;
left: 220px;
z-index: 10;
}
.card-2 .card-background-down {
position: absolute;
height: 135px;
width: 135px;
top: 80px;
left: 197px;
z-index: 10;
}
.card-3 .card-background-up {
position: absolute;
height: 130px;
width: 130px;
top: 0px;
left: 220px;
z-index: 10;
}
.card-3 .card-background-down {
position: absolute;
height: 135px;
width: 135px;
top: 80px;
left: 197px;
z-index: 10;
}
.card-2 .card-icon {
position: absolute;
font-size: 1.5em;
top: 20px;
left: 40px;
}
.card-2 .card-title {
position: absolute;
font-size: 0.9em;
top: 60px;
left: 40px;
}
.card-2 .card-price {
position: absolute;
font-size: 1.4em;
top: 90px;
left: 40px;
}
.card-2 .card-footer {
position: absolute;
font-size: 0.9em;
top: 130px;
left: 40px;
}
.card-3 .card-icon {
position: absolute;
font-size: 1.5em;
top: 20px;
left: 40px;
}
.card-3 .card-title {
position: absolute;
font-size: 0.9em;
top: 60px;
left: 40px;
}
.card-3 .card-price {
position: absolute;
font-size: 1.4em;
top: 90px;
left: 40px;
}
.card-3 .card-footer {
position: absolute;
font-size: 0.9em;
top: 130px;
left: 40px;
}
.card-1 {
background: linear-gradient(#c694f9 0%, #ab64f4 100%);
position: absolute;
top: 150px;
left: 50px;
border-radius: 10px;
height: 25vh;
width: 23vw;
color: white;
}
.card-2 {
background: linear-gradient(#6aa5e3 0%, #6866e9 100%);
position: absolute;
top: 150px;
left: 440px;
border-radius: 10px;
height: 25vh;
width: 23vw;
color: white;
}
.card-3 {
background: linear-gradient(#feb683 0%, #ff8993 100%);
position: absolute;
top: 150px;
left: 830px;
border-radius: 10px;
height: 25vh;
width: 23vw;
color: white;
}
.cards {
display: inline-block;
}
.table-container {
background-color: white;
border-radius: 10px;
position: absolute;
top: 365px;
left: 50px;
height: 45%;
width: 92%;
}
.table-container .table-title {
color: rgb(29, 27, 27, 0.6);
font-size: 1.1em;
position: absolute;
top: 20px;
left: 42px;
}
.table {
position: absolute;
top:60px ;
left: 40px;
width: 90%;
text-align: left;
height: 77%;
font-size: 0.9em;
color: black;
}
td, th {
border: none;
text-align: left;
padding: 5px;
}
tr:nth-child(even) {
background-color: rgba(171, 240, 240, 0.2);
}
.pending {
background: linear-gradient(#c694f9 0%, #ab64f4 100%);
border-radius: 5px;
color: white;
text-align: center;
}
.approved {
background: linear-gradient(#6aa5e3 0%, #6866e9 100%);
border-radius: 5px;
color: white;
text-align: center;
}
.rejected {
background: linear-gradient(#feb683 0%, #ff8993 100%);
border-radius: 5px;
color: white;
text-align: center;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
<title>Dashboard</title>
</head>
<body>
<!-- container -->
<div class="container">
<!--dash-container-->
<div class="dash-container">
<!--left-side-->
<div class="left-side">
<div class="logo">
blueBox
</div>
<div class="profile-pic">
<img src="profile.jpg" />
</div>
<div class="profile-name">
Gourav Thakur
</div>
<div class="profile-job-title">
Project Manager
</div>
<!--sidebar options-->
<div class="sidebar-options">
<ul>
<li class="active">
Dashboard
<i class="fas fa-home"></i>
</li>
<li>
UI Elements
<i class="fab fa-elementor"></i>
</li>
<li>
Components
<i class="fab fa-slack"></i>
</li>
<li>
Forms stuff
<i class="fab fa-wpforms"></i>
</li>
<li>
Data table
<i class="fas fa-database"></i>
</li>
<li>
Icons
<i class="fas fa-tv"></i>
</li>
<li>
Sample Page
<i class="fas fa-pager"></i>
</li>
<li>
Extra
<i class="fas fa-gopuram"></i>
</li>
</ul>
<button class="add-project-btn">Add Project</button>
</div>
<!--end of sidebar-options-->
</div>
<!--end of left-side -->
<!--right-side-->
<div class="right-side">
<!-- header-->
<div class="header">
<span class="search">
<i class="fa fa-search"></i>
<span class="search-box">
<input type="text" name="search" id="search" placeholder="Search Project"></input>
</span>
</span>
<span class="header-profile-pic">
<img src="profile.jpg" alt=""/>
</span>
<span class="green-dot">
<i class="fas fa-circle"></i>
</span>
<span class="header-name">
Gourav Thakur
</span>
<span class="dropdown">
<i class="fa fa-angle-down"></i>
</span>
<span class="message">
<i class="fa fa-envelope"></i>
</span>
<span class="red-dot-1">
<i class="fa fa-circle"></i>
</span>
<span class="notify">
<i class="fa fa-bell"></i>
</span>
<span class="red-dot-2">
<i class="fa fa-circle"></i>
</span>
<span class="burger">
<i class="fa fa-bars"></i>
</span>
</div>
<!--end of header-->
<!-- main-content -->
<div class="main-content">
<div class="dashboard-heading">
<div class="blue-rect">
<i class="fas fa-tachometer-alt"></i>
</div>
<h1>Dashboard</h1>
</div>
<!-- card -->
<div class="cards">
<div class="card-1">
<span class="card-icon">
<i class="fas fa-dollar-sign"></i>
</span>
<h1 class="card-title">Stock Total</h1>
<h1 class="card-price">$150000</h1>
<h1 class="card-footer">Increased by 60%</h1>
<img class="card-background-up" src="circle.png"/>
<img class="card-background-down" src="circle.png"/>
</div>
<div class="card-2">
<span class="card-icon">
<i class="fas fa-database"></i>
</span>
<h1 class="card-title">Total Profit</h1>
<h1 class="card-price">$25000</h1>
<h1 class="card-footer">Increased by 30%</h1>
<img class="card-background-up" src="circle.png"/>
<img class="card-background-down" src="circle.png"/>
</div>
<div class="card-3">
<span class="card-icon">
<i class="fa fa-flag"></i>
</span>
<h1 class="card-title">Unique Visitors</h1>
<h1 class="card-price">250000</h1>
<h1 class="card-footer">Increased by 80%</h1>
<img class="card-background-up" src="circle.png"/>
<img class="card-background-down" src="circle.png"/>
</div>
</div>
<!-- end of card-->
<!--table-->
<div class="table-container">
<h1 class="table-title">Standard Table Design</h1>
<table class="table">
<tr>
<th>Name</th>
<th>Email</th>
<th>User Type</th>
<th>Joined</th>
<th>Status</th>
</tr>
<tr>
<td>Mike Band</td>
<td>[email protected]</td>
<td>Admin</td>
<td>25 Apr, 2018</td>
<td class="pending">Pending</td>
</tr>
<tr>
<td>Kevin Pietersen</td>
<td>[email protected]</td>
<td>Editor</td>
<td>10 Aug, 2018</td>
<td class="approved">Approved</td>
</tr>
<tr>
<td>Andrew Strauss</td>
<td>[email protected]</td>
<td>Editor</td>
<td>20 Dec, 2019</td>
<td class="approved">Approved</td>
</tr>
<tr>
<td>Ross Taylor</td>
<td>[email protected]</td>
<td>Admin</td>
<td>13 Sep, 2018</td>
<td class="rejected">Rejected</td>
</tr>
<tr>
<td>Mike Hussey</td>
<td>[email protected]</td>
<td>Subscriber</td>
<td>05 Oct, 2018</td>
<td class="pending">Pending</td>
</tr>
</table>
</div>
<!--end of table-->
</div>
<!--end of main content-->
</div>
<!--end of right-side-->
</div>
<!--end of dash-container-->
</div>
<!--End of container-->
</body>
</html>