Возникла проблема в создании разметки на HTML.
Пытаюсь сделать визитку, чтоб при изменении ширины браузера все поля изменялись пропорционально, а текст не выходил за пределы своего блока.
Типа так:
Вот мой код:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Документ без названия</title>
<style>
.container {
width: 100%;
height: 100%;
border: 1px dashed #000;
}
.visitka {
width: 470px;
height: 250px;
border: 1px dashed #000;
overflow: hidden;
}
.visitka_photo {
width: 40%;
border: 1px dashed #000;
}
.visitka_name {
width: 45%;
border: 1px dashed #000;
overflow: hidden;
}
.visitka_phone {
width: 45%;
border: 1px dashed #000;
overflow: hidden;
}
.visitka_s {
width: 11%;
border: 1px dashed #000;
overflow: hidden;
}
.visitka_param1 {
width: 28%;
border: 1px dashed #000;
overflow: hidden;
}
.visitka_param2 {
width: 28%;
border: 1px dashed #000;
overflow: hidden;
}
.visitka_param3 {
width: 57%;
border: 1px dashed #000;
overflow: hidden;
}
</style>
</head>
<body>
<div id="container" class="container">
<div class="visitka">
<div class="visitka_photo">
<h2>photo</h2>
</div>
<div class="visitka_name">
<h2>name</h2>
</div>
<div class="visitka_phone">
<h2>phone</h2>
</div>
<div class="visitka_s">
<h2>s</h2>
</div>
<div class="visitka_param1">
<h2>param1</h2>
</div>
<div class="visitka_param2">
<h2>param2</h2>
</div>
<div class="visitka_param3">
<h2>param3</h2>
</div>
</div>
</div>
</body>
</html>
Вопрос: как сделать подобную визитку?
.container{
}
.visitka{
display:flex;
border:1px solid;
}
.visitka_data{
flex-grow:1;
border:1px solid;
}
.data{
display:flex;
}
.data_contacts{
flex-grow:1;
}
.data_contacts div{
border:1px solid;
}
.data_s{
border:1px solid;
}
.params_two{
display:flex;
}
.params_two div{
flex-grow:1;
border:1px solid;
}
<div class='container'>
<div class='visitka'>
<div class='visitka_photo'>
<img src='' height=100 width=100>photo
</div>
<div class='visitka_data'>
<div class='data'>
<div class='data_contacts'>
<div>
name
</div>
<div>
phone
</div>
</div>
<div class='data_s'>
div s
</div>
</div>
<div class='visitka_params'>
<div class='params_two'>
<div>
div param 1
</div>
<div>
div param 2
</div>
</div>
<div class='params_three'>
<div>
div param 3
</div>
</div>
</div>
</div>
</div>
</div>
Почитайте про flexbox
, с данной помощью очень легко верстать.
Вариант с table
:
* {
box-sizing: border-box;
}
html,
body {
padding: 0;
margin: 0;
}
.card {
border: 1px solid #ccc;
text-align: center;
font-family: monospace;
table-layout: fixed;
max-width: 500px;
width: 100%;
margin: 1rem auto;
}
.card-photo img {
max-width: 100%;
display: block;
}
td {
vertical-align: middle;
border: 1px solid #ccc;
}
<table class="card">
<tbody>
<tr>
<td rowspan="5" width="40%">
<div class="card-photo">
<img src="https://images.unsplash.com/photo-1519058082700-08a0b56da9b4?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=eefa9be00575de989c32ab5dbe1315a9&auto=format&fit=crop&w=600&q=60" alt="">
</div>
</td>
</tr>
<tr>
<td colspan="3" width="80%">
<div class="card-name">
Card Name
</div>
</td>
<td rowspan="2" width="20%" height="33.33%">
<div class="card-s">
Card S
</div>
</td>
</tr>
<tr>
<td colspan="3" width="80%">
<div class="card-name">
Card Phone
</div>
</td>
</tr>
<tr>
<td colspan="2" width="50%" height="33.33%">
<div class="card-param">
Card Param 1
</div>
</td>
<td colspan="2" width="50%" height="33.33%">
<div class="card-param">
Card Param 2
</div>
</td>
</tr>
<tr>
<td colspan="4" width="60%" height="33.33%">
<div class="card-param">
Card Param 3
</div>
</td>
</tr>
</tbody>
</table>
Вариант с flex
:
* {
box-sizing: border-box;
}
html,
body {
padding: 0;
margin: 0;
}
.d-flex {
display: flex;
}
.align-items-stretch {
align-items: stretch;
}
.card {
border: 1px solid #ccc;
text-align: center;
font-family: monospace;
max-width: 500px;
width: 100%;
margin: 1rem auto;
}
.card div {
border: 1px solid #ccc;
}
.card div>span {
display: block;
position: relative;
top:50%;
transform:translateY(-50%);
}
.card-photo img {
max-width: 100%;
display: block;
}
.col-40 {
width: 40%;
flex-grow: 0;
flex-shrink: 0;
}
.col-60 {
width: 60%;
flex-grow: 0;
flex-shrink: 0;
}
.col-80 {
width: 80%;
flex-grow: 0;
flex-shrink: 0;
}
.col-100 {
width: 100%;
flex-grow: 0;
flex-shrink: 0;
}
.col-20 {
width: 20%;
flex-grow: 0;
flex-shrink: 0;
}
.col-50 {
width: 50%;
flex-grow: 0;
flex-shrink: 0;
}
.y-2 {
height: 50%;
}
.y-3 {
height: 33.333%;
}
<div class="card">
<div class="d-flex align-items-stretch">
<div class="card-photo col-40">
<img src="https://images.unsplash.com/photo-1519058082700-08a0b56da9b4?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=eefa9be00575de989c32ab5dbe1315a9&auto=format&fit=crop&w=600&q=60" alt="">
</div>
<div class="card-body col-60">
<div class="d-flex y-3 align-items-stretch">
<div class="card-info col-80">
<div class="y-2">
<span>Card Name</span>
</div>
<div class="y-2">
<span>Card Phone</span>
</div>
</div>
<div class="card-s col-20">
<span>Card S</span>
</div>
</div>
<div class="d-flex y-3 align-items-stretch">
<div class="card-param col-50">
<span>Card Param 1</span>
</div>
<div class="card-param col-50">
<span>Card Param 2</span>
</div>
</div>
<div class="d-flex y-3">
<div class="card-param col-100">
<span>Card Param 3</span>
</div>
</div>
</div>
</div>
</div>
Вариант с grid
:
* {
box-sizing: border-box;
}
html,
body {
padding: 0;
margin: 0;
}
.card div {
border: 1px solid #ccc
}
.card {
border: 1px solid #ccc;
text-align: center;
font-family: monospace;
display: grid;
grid-column-gap: 2px;
grid-row-gap: 2px;
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 2;
grid-template-columns: 40% 20% 10% 10% 20%;
grid-template-rows: auto auto auto;
}
.card-photo {
grid-row: 1 / 5;
grid-column: 1 / 2;
}
.card-name {
grid-column: 2 / 5;
}
.card-phone {
grid-row: 2 / 3;
grid-column: 2 / 5;
}
.card-s {
grid-row: 1 / 3;
grid-column: 5 / 6;
}
.card-photo img {
max-width: 100%;
display: block;
}
.card-param-1 {
grid-column: 2 / 4;
grid-row: 3 / 4;
}
.card-param-2 {
grid-column: 4 / 6;
grid-row: 3 / 4;
}
.card-param-3 {
grid-column: 2 / 6;
grid-row: 4 / 5;
}
.card div>span {
display: block;
position: relative;
top:50%;
transform:translateY(-50%);
}
<div class="card">
<div class="card-photo">
<img src="https://images.unsplash.com/photo-1519058082700-08a0b56da9b4?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=eefa9be00575de989c32ab5dbe1315a9&auto=format&fit=crop&w=600&q=60" alt="">
</div>
<div class="card-name">
<span>Card Name</span>
</div>
<div class="card-phone">
<span>Card Phone</span>
</div>
<div class="card-s">
<span>Card S</span>
</div>
<div class="card-param card-param-1">
<span>Card Param 1</span>
</div>
<div class="card-param card-param-2">
<span>Card Param 2</span>
</div>
<div class="card-param card-param-3">
<span>Card Param 3</span>
</div>
</div>
P.S: Ответ CbIPoK2513 более красивый и компактный для grid
.
Вариант с float
:
* {
box-sizing: border-box;
}
html,
body {
padding: 0;
margin: 0;
}
.card {
border: 1px solid #ccc;
text-align: center;
font-family: monospace;
max-width: 500px;
width: 100%;
margin: 1rem auto;
overflow: hidden;
height: 300px;
}
.card div {
border: 1px solid #ccc;
}
.card div>span {
display: block;
position: relative;
top:50%;
transform:translateY(-50%);
}
.card-photo,
.card-body {
height: 100%;
}
.card-photo img {
object-fit: cover;
height: 100%;
width: 100%;
display: block;
}
.col-40 {
width: 40%;
}
.col-60 {
width: 60%;
}
.col-80 {
width: 80%;
}
.col-100 {
width: 100%;
}
.col-20 {
width: 20%;
}
.col-50 {
width: 50%;
}
.y-2 {
height: 50%;
}
.y-3 {
height: 33.333%;
overflow: hidden;
}
.y-3>div {
height: 100%;
}
[class*="col-"] {
float:left;
}
<div class="card">
<div class="card-photo col-40">
<img src="https://images.unsplash.com/photo-1519058082700-08a0b56da9b4?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=eefa9be00575de989c32ab5dbe1315a9&auto=format&fit=crop&w=600&q=60" alt="">
</div>
<div class="card-body col-60">
<div class="y-3">
<div class="card-info col-80">
<div class="y-2">
<span>Card Name</span>
</div>
<div class="y-2">
<span>Card Phone</span>
</div>
</div>
<div class="card-s col-20">
<span>Card S</span>
</div>
</div>
<div class="y-3">
<div class="card-param col-50">
<span>Card Param 1</span>
</div>
<div class="card-param col-50">
<span>Card Param 2</span>
</div>
</div>
<div class="y-3">
<div class="card-param col-100">
<span>Card Param 3</span>
</div>
</div>
</div>
</div>
При помощи display: grid
(для современных браузеров)
.grid {
display: grid;
width: 100%;
grid-gap: 2px;
grid-template-areas:
'photo name name name s'
'photo tel tel tel s'
'photo param1 param1 param2 param2'
'photo param3 param3 param3 param3'
;
}
.div {
display: block;
border: 1px solid #888;
overflow: hidden;
box-sizing: border-box;
}
.div.photo {grid-area: photo;}
.div.name {grid-area: name;}
.div.tel {grid-area: tel;}
.div.s {grid-area: s;}
.div.param1 {grid-area: param1;}
.div.param2 {grid-area: param2;}
.div.param3 {grid-area: param3;}
<div class="grid">
<div class="div photo">photo</div>
<div class="div name">name</div>
<div class="div tel">tel</div>
<div class="div s">s</div>
<div class="div param1">param1</div>
<div class="div param2">param2</div>
<div class="div param3">param3</div>
</div>
При помощи display: inline-block;
(с поддержкой старых)
.grid {
display: block;
width: 100%;
position: relative;
}
.grid::after {content: ''; display: block; clear: both;}
.div {
display: block;
width: 100%;
height: 100%;
border: 1px solid #888;
overflow: hidden;
box-sizing: border-box;
}
.left-wrap, .right-wrap {display: inline-block; float: left;}
.left-wrap {width: 40%;}
.right-wrap {width: 60%;}
.right-top-wrap, .right-middle-wrap {display: block;}
.right-top-wrap::after, .right-middle-wrap::after {content: ''; display: block; clear: both;}
.right-top-wrap .right-top-left-wrap, .right-top-wrap .right-top-right-wrap {display: inline-block; float: left;}
.right-top-wrap .right-top-left-wrap {width: 80%;}
.right-top-wrap .right-top-right-wrap {width: 20%;}
.right-middle-wrap .div {display: inline-block; float: left; width: 50%;}
<div class="grid">
<div class="left-wrap">
<div class="div photo">photo</div>
</div>
<div class="right-wrap">
<div class="right-top-wrap">
<div class="right-top-left-wrap">
<div class="div name">name</div>
<div class="div tel">tel</div>
</div>
<div class="right-top-right-wrap">
<div class="div s">s</div>
</div>
</div>
<div class="right-middle-wrap">
<div class="div param1">param1</div>
<div class="div param2">param2</div>
</div>
<div class="div param3">param3</div>
</div>
</div>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Изначально делал по клику на кнопки (все работает нормально), а по select не срабатываетКак исправить для select?
Что-то непонятное происходит с иконкойПолучается, что она состоит из элементов которые либо заливаются, либо обводятся
Недавно долго возился с ajax, задавал тут вопрос, и не без помощи изучал, как он работаетРешил разработать мини-чат, но что-то пошло не так: внешний...
Есть скрипт который проверяет в блоке наличие других похожих блоков и если добавлять дубликат, он выведет confirm окноХочу использовать своё...