У меня была аналогичная проблема, когда я пытался передать Timestamp в базу данных. В то время как getter работал, и мои данные были правильно настроены на базу данных в реальном времени с помощью push, чтение данных с помощью DataSnapshot из ChildEventListener разбило мое приложение с ошибкой, потому что также у класса Timestamp нет публичного cunstructor без каких-либо аргументов. Поэтому я создал свою собственную временную метку класса, которая расширила исходный класс timestamp java, добавив отсутствующий публичный конструктор без аргументов.
public class Timestamp extends java.sql.Timestamp {
public Timestamp(long time) {
super(time);
}
public Timestamp(){
super(System.currentTimeMillis());
}
Затем мне пришлось включить также необходимые сеттеры (как читать из предупреждений при использовании мой новый класс)
Расширение дочернего элемента #down
для заполнения оставшегося пространства #container
может выполняться различными способами в зависимости от поддержки браузера, которую вы хотите достичь, и имеет ли #up
определенную высоту.
Образцы
.container {
width: 100px;
height: 300px;
border: 1px solid red;
float: left;
}
.up {
background: green;
}
.down {
background: pink;
}
.grid.container {
display: grid;
grid-template-rows: 100px;
}
.flexbox.container {
display: flex;
flex-direction: column;
}
.flexbox.container .down {
flex-grow: 1;
}
.calc .up {
height: 100px;
}
.calc .down {
height: calc(100% - 100px);
}
.overflow.container {
overflow: hidden;
}
.overflow .down {
height: 100%;
}
<div class="grid container">
<div class="up">grid
<br />grid
<br />grid
<br />
</div>
<div class="down">grid
<br />grid
<br />grid
<br />
</div>
</div>
<div class="flexbox container">
<div class="up">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
<div class="down">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
</div>
<div class="calc container">
<div class="up">calc
<br />calc
<br />calc
<br />
</div>
<div class="down">calc
<br />calc
<br />calc
<br />
</div>
</div>
<div class="overflow container">
<div class="up">overflow
<br />overflow
<br />overflow
<br />
</div>
<div class="down">overflow
<br />overflow
<br />overflow
<br />
</div>
</div>
Сетка
Макет grid
CSS предлагает еще один вариант, хотя он может быть не такой простой, как модель Flexbox. Однако для этого требуется только стиль элемента контейнера:
.container { display: grid; grid-template-rows: 100px }
grid-template-rows
определяет первую строку как фиксированную высоту 100 пикселей, а оставшиеся строки будут автоматически растягиваться, чтобы заполнить оставшееся пространство.
Я уверен, что для IE11 требуются префиксы -ms-
, поэтому обязательно проверяйте функциональность в браузерах, которые вы хотите поддерживать.
Flexbox
CSS3's Модуль гибкого модульного модуля (flexbox
) теперь хорошо поддерживается и может быть очень простым в реализации. Поскольку он является гибким, он работает даже тогда, когда #up
не имеет определенной высоты.
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
Важно отметить, что IE10 & amp; Поддержка IE11 для некоторых свойств flexbox может быть ошибочной, а IE9 или ниже не имеет никакой поддержки.
Расчетная высота
Другим простым решением является использование CSS3 calc
, , как указывает Альваро в своем ответе , но для того, чтобы высота первого ребенка была известна, значение:
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
широко поддерживается, причем единственными заметными исключениями являются & lt; = IE8 или Safari 5 (без поддержки) и IE9 (частичная поддержка). Некоторые другие проблемы включают использование calc в сочетании с transform или box-shadow , поэтому обязательно проверяйте в нескольких браузерах, если это вызывает озабоченность вы.
Другие альтернативы
Если требуется поддержка более старой версии, вы можете добавить height:100%;
в #down
, чтобы высота розового div была полной, с одной оговоркой. Это приведет к переполнению контейнера, потому что #up
отжимает его.
Поэтому вы можете добавить overflow: hidden;
в контейнер, чтобы исправить это.
Альтернативно, если высота #up
фиксирована, вы можете установить ее абсолютно внутри контейнера и добавить верхнюю часть до #down
.
И еще одним вариантом будет использование отображения таблицы:
#container { width: 300px; height: 300px; border: 1px solid red; display: table;}
#up { background: green; display: table-row; height: 0; }
#down { background: pink; display: table-row;}
Прошло почти два года с тех пор, как я задал этот вопрос. Я только что придумал css calc (), который решает эту проблему, и я подумал, что было бы неплохо добавить ее, если у кого-то будет такая же проблема. (Кстати, я в конечном итоге использовал положение абсолютное).
http://jsfiddle.net/S8g4E/955/
Вот css
#up { height:80px;}
#down {
height: calc(100% - 80px);//The upper div needs to have a fixed height, 80px in this case.
}
И дополнительная информация об этом здесь: http://css-tricks.com/a-couple-of-use-cases-for-calc/
Поддержка браузера: http: //caniuse.com/#feat=calc
calc
, где поддержка широкого браузера не так важна (IE8 и ниже, а Safari 5 не поддерживают его).
– Quantastical
20 April 2014 в 17:53
Вы можете использовать поплавки для нажатия вниз:
У вас есть фиксированный размер container:
#container {
width: 300px; height: 300px;
}
Контент разрешен для потока рядом с поплавком. Если мы не установим float в полную ширину:
#up {
float: left;
width: 100%;
}
Пока #up
и #down
разделяют верхнюю позицию, содержимое #down
может начинаться только после нижней части плавающего #up
:
#down {
height:100%;
}
#up
фактически покрывает верхнюю часть #down
: jsfiddle.net/thirtydot/S8g4E/9
– thirtydot
27 June 2012 в 13:24
#up
, то это, вероятно, приемлемо.
– biziclop
27 June 2012 в 13:26
Я не уверен, что это можно сделать исключительно с помощью CSS, если только вам не удобнее притворяться иллюзиями. Возможно, используйте ответ Джоша Маина и установите #container
на overflow:hidden
.
Для чего это стоит, вот решение jQuery:
var contH = $('#container').height(),
upH = $('#up').height();
$('#down').css('height' , contH - upH);
Если я не понимаю, вы можете просто добавить height: 100%;
и overflow:hidden;
в #down
.
#down {
background:pink;
height:100%;
overflow:hidden;
}
Изменить: поскольку вы не хотите использовать overflow:hidden;
, вы можете использовать display: table;
для этого сценария; однако он не поддерживается до IE 8. ( display: table;
support )
#container {
width: 300px;
height: 300px;
border:1px solid red;
display:table;
}
#up {
background: green;
display:table-row;
height:0;
}
#down {
background:pink;
display:table-row;
}
Примечание. Вы сказали, что хотите, чтобы высота #down
была высотой #container
минус #up
. Решение display:table;
делает именно это, и этот jsfiddle будет изображать это довольно четко.
overflow:hidden
в скрыть дополнительный контент.
– Josh Mein
27 June 2012 в 13:22
Мой ответ использует только CSS, и он не использует переполнение: hidden или display: table-row. Это требует, чтобы у первого ребенка действительно была определенная высота, но в вашем вопросе вы утверждаете, что только второй ребенок нуждается в его высоте, но я считаю, что вы должны признать это приемлемым.
html
<div id="container">
<div id="up">Text<br />Text<br />Text<br /></div>
<div id="down">Text<br />Text<br />Text<br /></div>
</div>
css
#container { width: 300px; height: 300px; border:1px solid red;}
#up { background: green; height: 63px; float:left; width: 100% }
#down { background:pink; padding-top: 63px; height: 100%; box-sizing: border-box; }
проверить демо - http://jsfiddle.net/S8g4E/6/
использовать css -
#container { width: 300px; height: 300px; border:1px solid red; display: table;}
#up { background: green; display: table-row; }
#down { background:pink; display: table-row;}
height: 1px
в #up
, чтобы обеспечить минимальный уровень высоты. Вот поддержка браузера для display: table
: caniuse.com/css-table
– thirtydot
27 June 2012 в 13:22
position: relative;
, позиционирует его относительно контейнера, а не окна. Таким образом, это должен быть жизнеспособный вариант. – Quantastical 27 June 2012 в 13:25