Пытаюсь создать шапку. У меня есть родительский контейнер div с 3 дочерними div. Дочерний div 1 зафиксирован и будет выровнен по левому краю. Дочерний div 3 зафиксирован и будет выровнен по правому краю. Дочерний div 2 имеет переменный размер и будет соответствовать между Child 1 и Child 3. Размер дочернего элемента 2 будет изменяться в зависимости от размера браузера (он будет расширяться и сжиматься до определенной точки).
Я хочу, чтобы мой заголовок был совместим со старыми версиями IE, по крайней мере, с I.E. версия 8. Я читаю о FLEXBOX и похоже, что он даже не полностью совместим с I.E. 11 без ошибок.
Я подумываю об использовании таблицы, но мне было интересно, есть ли лучшие способы сделать это ... поскольку я кратко протестировал таблицу, и она тоже не делает то, что я хочу. Я попробовал, и хотя я указал ширину для каждого элемента, когда я сжимаю свой браузер, дочерний элемент 1 и дочерний элемент 3 изменяются в размере - НЕ то, что я хочу.
Благодарность!
4 ответа
В IE8 вы можете рассматривать таблицы, но старый способ сделать это - использовать числа с плавающей запятой.
#wrapper {
overflow: hidden; /* Establish BFC */
}
#child1 {
float: left;
width: 200px;
background: yellow;
}
#child3 {
float: right;
width: 150px;
background: pink;
}
#child2 {
overflow: hidden; /* Establish BFC */
background: cyan;
}
<div id="wrapper">
<div id="child1">Child 1</div>
<div id="child3">Child 3</div>
<div id="child2">Child 2</div>
</div>
Чтобы применить одну строку, вы можете добавить набор max-width
процентов к #child1
и #child2
, которые в сумме дают 100%.
Я не совсем понимаю проблему, с которой вы столкнулись при попытке использовать таблицы. Не могли бы вы объяснить, в чем была проблема?
Вы можете попробовать использовать div и CSS для создания отображения в виде таблицы. Таким образом, вы можете, например, использовать запросы функций, чтобы узнать, доступен ли flexbox, и использовать его. Если нет, вы можете вернуться к использованию таблицы CSS ниже. И все это без изменения HTML.
Сообщите мне, работает ли это для вас!
#container{
display: table;
/* use table-layout: fixed if you're
having problems with the content expanding
the fixed cells */
/* table-layout: fixed; */
width: 100%; /* or however big you need it */
}
#row{
display: table-row;
}
#one,
#two,
#three{
display: table-cell;
}
#one{
width: 100px;
background: blue;
}
#two{
width: auto;
background: red;
}
#three{
width: 100px;
background: orange;
}
<div id="container">
<div id="row">
<div id="one">Div 1</div>
<div id="two">Div 2</div>
<div id="three">Div 3</div>
</div>
</div>
#row div
вызовет проблемы, поскольку это свободный селектор, и он выберет все дочерние div. Это было просто для примера. Он должен быть нацелен только на 3 блока.
table-layout: fixed
. Это решит проблему дочернего контента, расширяющего фиксированные div. Таким образом, они останутся на уровне 100 пикселей, несмотря ни на что.
Ну, flexbox был создан специально, чтобы предоставить CSS способ делать то, что вы описываете, так что это немного похоже на вопрос, как найти площадь квадрата без умножения ...
До использования flexbox моим основным решением для такого рода проблем было использование JavaScript для динамического изменения размера соответствующего div (второго дочернего элемента в вашем случае). Мне действительно не нравилось это решение даже тогда, потому что я не думаю, что JavaScript - хорошее место для логики макета, но это было лучшее, что я мог придумать.
Я полагаю, вы могли бы использовать таблицу, но я думаю, что тогда вы столкнетесь с причудливыми ограничениями в компоновке внутри «ячеек».
Вот одно решение, но оно имеет ограничения. Вы должны знать ширину дочернего элемента 3 и позиционировать родительский div относительно.
https://jsfiddle.net/whatisthebigpicture/sj9xv9m6/1/
header {
position: relative;
}
div {
outline: 1px solid red;
}
.div1 {
width: 100px;
float: left;
}
.div2 {
margin-right: 100px;
}
.div3 {
width: 100px;
top: 0;
right: 0;
position: absolute;
}
Похожие вопросы
Связанные вопросы
Новые вопросы
html
HTML (язык гипертекстовой разметки) — это язык разметки для создания веб-страниц и другой информации, отображаемой в веб-браузере. Вопросы относительно HTML должны включать минимальный воспроизводимый пример и некоторое представление о том, чего вы пытаетесь достичь. Этот тег редко используется отдельно и часто в паре с [CSS] и [JavaScript].