Диффы ширины в процентах, за которыми следует фиксированная ширина div
Я пытаюсь добиться следующего макета с помощью CSS и HTML:
_____________________________________________________________________________
| div1 33% | div2 33% | div3 33% | div4 200px |
—————————————————————————————————————————————————————————————————————————————
Чтобы было ясно, я хочу, чтобы div1, div2, div3 занимали одну треть оставшейся ширины после добавления div в 200 пикселей.
Что я пробовал:
Наличие div1, div2, div3 в контейнере div
Затем с плавающей точкой div4 вправо и шириной 200 пикселей.
Я пробовал разные вещи, но безрезультатно. Буду признателен за любую помощь в этом.
Ответы
Ответ 1
Вам придется возиться с отступами, чтобы исправить все остальное, но ниже приведена рабочая скрипка и код. Извините за плохие соглашения об именах, но вы сможете изменить все это на то, что вам нужно.
http://jsfiddle.net/8HgHt/
.third {
padding: 0;
background-color: gray;
height: 100px;
float: left;
display: table-cell;
width: 33%;
}
.third:hover {
background-color: red;
}
.third_holder {
float: left;
width: 100%;
display: table-cell;
}
.absolute_div {
width: 200px;
display: table-cell;
background-color: silver;
}
.whole_container {
width: 100%;
display: table;
}
<div class="whole_container">
<div class="third_holder">
<div class="third">
</div>
<div class="third">
</div>
<div class="third">
</div>
</div>
<div class="absolute_div">
</div>
</div>
Ответ 2
Вы можете использовать calc
Jsfiddle Demo
CSS
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box; /* accounting for borders */
}
.wrapper {
width:80%; /* or any width */
margin:10px auto; /* for visualisation purposes only */
overflow:hidden; /* float containment */
}
.wrapper div {
float:left;
height:100px;
}
.fixed {
width:200px;
background: lightblue;
}
.percent {
width:calc((100% - 200px)/3); /* the magic bit */
background: lightgreen;
border:1px solid grey;
}
Поддержка IE9 и выше - http://caniuse.com/calc
Ответ 3
Это может помочь: http://jsfiddle.net/GUcCa/1/
var fxdWidth = parseInt($('#fixd').css("width").replace("px", ''));
var totalWidth = parseInt($('#fixd').parent().css("width").replace("px", ''));
$('#floating').css("width", totalWidth - fxdWidth + "px");
.border {
border-style: dotted;
border-width: 1px;
}
.border2 {
border-style: solid;
border-width: 1px;
}
.block {
display: inline-block;
width: 33%;
}
#fixd {
width: 200px;
float: right;
}
#floating {
width: 100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="border block" id="fixd">
div4
</div>
<div class="border2 block" id="floating">
<div class="border block">
div1
</div>
<div class="border block">
div2
</div>
<div class="border block">
div3
</div>
</div>