заполнение и margin
Пример
<div class="parent">
<div class="child"></div>
</div>
<style>
.parent {
width: 100px;
height: 150px;
margin: 2px;
padding: 1px;
border: 1px solid red;
}
.child {
margin: 10%;
padding: 10%;
border: 1px dashed blue;
}
</style>
padding: 10%
Child Padding = (Parent Width) * 10%
Высота элемента
<div class="parent">
<div class="child"></div>
</div>
<style>
.parent {
width: 100px;
height: 150px;
border: 1px solid red;
}
.child {
height: 10%;
border: 1px dashed blue;
}
</style>
В данном примере высота вложенного элемента пропорциональна высоте родителя:
Child Height = (Parent Height) * 10%
Основные правила
margin и padding в процентах рассчитываются по ширине родительского элемента. Высота (height) в процентах рассчитывается по высоте родительского элемента.
Эксперимент: Создание адаптивного виджета
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Card</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
<link rel="stylesheet" href="card.css">
</head>
<body>
<div class="row">
<div class="offset-md-3 col-md-6">
<div class="card">
<div class="outer-circle">
<div class="inner-circle"></div>
</div>
</div>
</div>
</div>
</body>
</html>
<style>
.card {
height: 300px;
background-color: #ffffff;
box-shadow: 0 20px 57px 0 rgba(51, 51, 51, 0.1);
border: none;
margin: 4%;
}
.outer-circle {
width: 100px;
height: 100px;
background: linear-gradient(to right, rgba(237, 114, 152, 0.4), rgba(236, 136, 113, 0.4));
margin: 0 auto;
border-radius: 50%;
}
.inner-circle {
width: 90px;
height: 90px;
background: linear-gradient(to right, rgb(237, 114, 152), rgb(236, 136, 113));
padding: 10px;
margin: 0 auto;
transform: translateY(6%);
border-radius: 50%;
}
</style>
Результат
Что должно получиться
Волшебство padding
padding-bottom
<style>
.card {
background-color: #ffffff;
box-shadow: 0 20px 57px 0 rgba(51, 51, 51, 0.1);
border: none;
padding-bottom: 100%;
position: relative;
}
.outer-circle {
width: 20%;
height: 20%;
background: linear-gradient(to right, rgba(237, 114, 152, 0.4), rgba(236, 136, 113, 0.4));
margin: 0 auto;
border-radius: 50%;
position: absolute;
left: 40%;
}
.inner-circle {
width: 90%;
height: 90%;
background: linear-gradient(to right, rgb(237, 114, 152), rgb(236, 136, 113));
border-radius: 50%;
position: absolute;
left: 5%;
top: 5%;
}
</style>
padding-bottom