Гибкая сетка и несколько столбцов в приложении Win8
Я работал в команде над созданием приложений для Windows 8. Я использую сетки CSS3 для разметки страницы, что в основном было чертовски легко. Однако мы заполняем некоторые области нашего приложения данными из внешнего источника и поэтому не можем контролировать длину импортируемого текста. Наше приложение выполняет прокрутку слева направо, поэтому мне нужен столбец сетки, который заполняется, чтобы автоматически изменять его ширину и перетекать текст в столбцы - поэтому при использовании CSS-сетки и столбцов CSS, для которых установлено значение "auto", следует работать просто отлично, верно?
Ну, это не так. Я пробовал много, много разных комбинаций CSS, но мне нужно либо дать моему div определенную ширину (что не сработало бы, если импортируемый контент очень короткий), либо определить определенное количество столбцов, в которые может перетекать текст (который не работает ни для очень короткого, ни для очень длинного контента). Я думаю, что это в основном из-за того, что я пытаюсь построить гибкую страницу по горизонтали, о которой даже приложение Win8, похоже, запуталось. Я думаю, мне нужно найти обходной путь JS/jQuery для этого, но я относительно новичок в JS/jquery, и я не уверен, что именно я бы написал.
Конечно, если у любого другого фронт-энда разработчиков Win8 есть такой опыт, ваше понимание будет так высоко оценено.
Мой.detailSection находится в середине других столбцов, поэтому он обязательно должен расширяться и сжиматься по мере необходимости для любого содержимого, которое может его заполнить.
Это фрагмент моего CSS в его нынешнем виде. Пожалуйста, дайте мне знать, если я могу предоставить любую другую информацию, конечно.
.advisorDetail {
height: 100%;
-ms-grid-columns: 120px 560px 80px auto 80px auto auto;
}
.advisorDetail section[role=main].detailSection {
-ms-grid-column: 4;
display: -ms-grid;
-ms-grid-rows: 24px 20px 1fr;
-ms-grid-columns: auto;
}
.advisorDetail section[role=main].detailSection .detailFeed {
-ms-grid-row: 3;
column-count: 3;
column-width: 400px;
column-gap: 40px;
}
1 ответ
Ваш фрагмент CSS показывает, как определяется количество столбцов. Из вашего описания вы не хотите указывать column-count
или же width
на элементе с несколькими столбцами. Я предполагаю, что вы спрашиваете, как вы можете удалить column-count
и по-прежнему получать визуальный эффект, который вы хотите. Это верно? Предполагая, что это...
Когда многостолбцовый элемент пытается определить свой размер, его высота еще не определена. В результате он имеет размеры, как будто нет ограничений по высоте, и вы получите один столбец текста. Если вы укажете height: 100%
на элементе из нескольких столбцов и убедитесь, что высота его контейнера определена при определении размера, вы должны получить визуальный элемент, который вы ищете.
Например, предположим, что ваш элемент.detailFeed имеет вид -ms-grid-row-span: 3 (охватывающий все строки). Поскольку в третьей строке используется дробная единица, Сетка должна иметь заранее определенную высоту, чтобы знать, насколько большой должна быть третья строка. Если вы хотите, чтобы элемент Grid всегда был на 100% высоты окна, вы обычно указали бы height: 100%
и убедитесь, что процентное значение сетки разрешается во времени, гарантируя, что у него есть предок, который не является автоматической высотой (например, установлен height: 100%
на всех элементах вверх по дереву). Другой вариант будет использовать единицы высоты окна просмотра (т.е. height: 100vh
)
Если бы строки сетки, в которой находится элемент из нескольких столбцов, были неавтоматическими и не дробными, высоту сетки не нужно было бы определять заранее, поскольку высота ячейки сетки все равно будет определяться.
Вот примерная разметка, которая показывает, что я описываю. Вы можете запустить это в IE 10 или в приложении. Вы заметите, что при изменении размера окна количество столбцов изменяется.
<!doctype html>
<html>
<head>
<style>
html, body, .advisorDetail, section
{
height: 100%;
}
.advisorDetail section[role=main].detailSection {
-ms-grid-column: 4;
display: -ms-grid;
-ms-grid-rows: 24px 20px 1fr;
-ms-grid-columns: auto;
height: 100%;
}
.advisorDetail section[role=main].detailSection .detailFeed {
-ms-grid-row-span: 3;
column-width: 400px;
column-gap: 40px;
height: 100%;
}
</style>
</head>
<body>
<div class="advisorDetail">
<section role="main" class="detailSection">
<div class="detailFeed">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna.
Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci.
Aenean nec lorem. In porttitor. Donec laoreet nonummy augue.
Suspendisse dui purus, scelerisque at, vulputate vitae, pretium mattis, nunc. Mauris eget neque at sem venenatis eleifend. Ut nonummy.
Fusce aliquet pede non pede. Suspendisse dapibus lorem pellentesque magna. Integer nulla.
Donec blandit feugiat ligula. Donec hendrerit, felis et imperdiet euismod, purus ipsum pretium metus, in lacinia nulla nisl eget sapien. Donec ut est in lectus consequat consequat.
Etiam eget dui. Aliquam erat volutpat. Sed at lorem in nunc porta tristique.
Proin nec augue. Quisque aliquam tempor magna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Nunc ac magna. Maecenas odio dolor, vulputate vel, auctor ac, accumsan id, felis. Pellentesque cursus sagittis felis.
Pellentesque porttitor, velit lacinia egestas auctor, diam eros tempus arcu, nec vulputate augue magna vel risus. Cras non magna vel ante adipiscing rhoncus. Vivamus a mi.
Morbi neque. Aliquam erat volutpat. Integer ultrices lobortis eros.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin semper, ante vitae sollicitudin posuere, metus quam iaculis nibh, vitae scelerisque nunc massa eget pede. Sed velit urna, interdum vel, ultricies vel, faucibus at, quam.
Donec elit est, consectetuer eget, consequat quis, tempus quis, wisi. In in nunc. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos.
Donec ullamcorper fringilla eros. Fusce in sapien eu purus dapibus commodo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Cras faucibus condimentum odio. Sed ac ligula. Aliquam at eros.
Etiam at ligula et tellus ullamcorper ultrices. In fermentum, lorem non cursus porttitor, diam urna accumsan lacus, sed interdum wisi nibh nec nisl. Ut tincidunt volutpat urna.
Mauris eleifend nulla eget mauris. Sed cursus quam id felis. Curabitur posuere quam vel nibh.
Cras dapibus dapibus nisl. Vestibulum quis dolor a felis congue vehicula. Maecenas pede purus, tristique ac, tempus eget, egestas quis, mauris.
Curabitur non eros. Nullam hendrerit bibendum justo. Fusce iaculis, est quis lacinia pretium, pede metus molestie lacus, at gravida wisi ante at libero.
Quisque ornare placerat risus. Ut molestie magna at mi. Integer aliquet mauris et nibh.
Ut mattis ligula posuere velit. Nunc sagittis. Curabitur varius fringilla nisl.
Duis pretium mi euismod erat. Maecenas id augue. Nam vulputate.
Duis a quam non neque lobortis malesuada. Praesent euismod. Donec nulla augue, venenatis scelerisque, dapibus a, consequat at, leo.
Pellentesque libero lectus, tristique ac, consectetuer sit amet, imperdiet ut, justo. Sed aliquam odio vitae tortor. Proin hendrerit tempus arcu.
In hac habitasse platea dictumst. Suspendisse potenti. Vivamus vitae massa adipiscing est lacinia sodales.
Donec metus massa, mollis vel, tempus placerat, vestibulum condimentum, ligula. Nunc lacus metus, posuere eget, lacinia eu, varius quis, libero. Aliquam nonummy adipiscing augue.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna.
Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci.
</div>
</div>
</div>
</body>
</html>
Раскрытие информации: я в команде, которая работала над реализацией Microsoft Grid CSS.