Растянуть блок на оставшееся пространство
Ребят подскажите плиз, как реализовать:
Блоки справа от меня должны растягиваться на всю ширину после меню. Возможно ли это только средствами css? |
Какую то сложную задачу вы хотите решить. Не проще ли определиться сколько N-блоков у вас будет и задать N+1-блоку другой класс ?
В рамках того, что вы хотите могу лишь предложить такое: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>ГГ</title> <style> .menu { width: 300px; float: left; border:1px solid green; } .Nblock { } .clearfix:after { content: "."; /* добавить содержимое: "." */ display: block; /* сделать блоком, т.к. inline не может иметь clear */ clear: both; /* с обеих сторон clear */ visibility: hidden; /* сделать невидимым, зачем нам точка внизу? */ height: 0; /* сделать высоту 0, чтобы не занимал место */ } </style> </head> <body> <div class="clearfix"> <div class="menu"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> </ul> </div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> </div> </body> </html> |
Цитата:
|
Цитата:
у меня лежит этот код скопированный с learn.javascript.ru, и я никогда не читал его, потому что он работает |
EmperioAf, чего ты там накрутил? :D
Зачем все эти бубны? <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>ГГ</title> <style> .menu { width: 300px; float: left; border:1px solid green; } </style> </head> <body> <div class="clearfix"> <div class="menu"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> </ul> </div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> </div> </body> </html> В твоем примере простое сочетание плавающего блока с другими блочными элементами... Их контент обязан обтекать плавающий блок. Но сами блоки не обтекают. <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>ГГ</title> <style> .menu { width: 300px; float: left; border:1px solid green; margin-left: 10px; } .Nblock { border:1px solid red; } .clearfix:after { content: "."; /* добавить содержимое: "." */ display: block; /* сделать блоком, т.к. inline не может иметь clear */ clear: both; /* с обеих сторон clear */ visibility: hidden; /* сделать невидимым, зачем нам точка внизу? */ height: 0; /* сделать высоту 0, чтобы не занимал место */ } </style> </head> <body> <div class="clearfix"> <div class="menu"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> </ul> </div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> </div> </body> </html> |
Siend, может вот с таким вариантом у тебя что-то получится замутить...
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>ГГ</title> <style> .menu { width: 300px; float: left; border:1px solid green; margin-left: 10px; margin-right: 10px; margin-bottom: 10px; } .Nblock { display: inline; border:1px solid red; } </style> </head> <body> <div class="clearfix"> <div class="menu"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> </ul> </div> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> <br /> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> <br /> <div class="Nblock">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> </div> </body> </html> |
Цитата:
display: inline; потому что в рамках моего мышления делать универсальный блочный элемент строчным - это абсурд. Надо сразу использовать span |
Цитата:
|
Уважаемые, спасибо что оперативно отозвались. Поясню что да как)
Блоки по центру, которые должны обтекать - могут содержать не только текст, но и картинки и другие блоки. В сущности мне важно чтобы они именно растягивались на ширину оставшегося места, а не заходили на блок меня, как бы прячась под него, в то время как содержимое обтекалось. Взяв один из последний вариантов и добавив в него блоки со 100% шириной получил вот такую вот штуку: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>ГГ</title> <style> .menu { width: 300px; float: left; border:1px solid green; margin-left: 10px; margin-right: 10px; margin-bottom: 10px; } .Nblock { display: inline; border:1px solid red; } .object{ width:100%; height:30px; background-color:green; } </style> </head> <body> <div class="clearfix"> <div class="menu"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> </ul> </div> <div class="Nblock"><div class="object" ></div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> <br /> <div class="Nblock"><div class="object" ></div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> <br /> <div class="Nblock"><div class="object" ></div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> </div> </body> </html> Что определенно не отвечает моей задумке) Есть варианты решения такой задачки?) |
Можно реализовать путём создания разных контекстов c помощью float и overflow, например.
<iframe width="800" height="550" src="http://embed.plnkr.co/9RbRhrsnm85UabW7rW1G/preview" frameborder="0" allowfullscreen></iframe> Ещё способы создать контекст: https://developer.mozilla.org/ru/doc...atting_context К сожалению, в учебнике об этом ничего не сказано, а тема достаточно важная. |
ОТПАД!!!! Спасибо огромное! Правда я так и не понял суть этой хитрости. Каким образом overflow в одном месте и отсутствие онного в другом позволяет добиться этого эффекта? Можете пояснить?)
|
overflow формирует новый контекст. Далее цитата:
Цитата:
В чем я ошибаюсь? (а я ошибаюсь, это очевидно) |
Ещё крайне интересно то, что блоки растягиваются на 100% хотя этого свойства мы не указывали, и ели его указать, то весь эффект исчезнет и блоки сместятся вниз.
|
Цитата:
Тут речь идёт об элементах внутри контекста, т.е. внутри каждого из блока с одим из свойств, создающих контекст. Может быть, спецификация прояснит лучше. http://www.w3.org/TR/CSS21/visuren.h...ock-formatting Вольный перевод: Цитата:
Что и подтверждается практикой. Блочный элемент занимает всю доступную ширину с учётом плавающих блоков. Если установить ширину 100%, то блочный элемент физически не может обтекать и смещается ниже. Ведь он принимает ширину родителя и просто не помещается. |
mikhail.golovkin, столько теории... Тестовый пример от тебя будет? А то прям заинтриговал. :)
|
Цитата:
Цитата:
|
Теперь понял как та фигня работает. :D
|
Цитата:
Сколько скрытого подтекста за сухими определениями его значений Цитата:
|
mikhail.golovkin, а подскажите пожалуйста, в такой ситуации:
.block1{ overflow:auto; } .block2{ overflow:auto; } .block3{ overflow:auto; } Эти три блока будут обладать каждый собственным контекстом, или у всех он будет один? Т.е. разный контекст задать можно исключительно разными свойствами (например одному блоку float, а другому overflow) или даже одно свойство будет автоматически создавать новый контекст. Или перефразирую: Будет ли контекст блоков с одинаковыми свойствами объединяться? P.S.: звучит наверное отвратительно, но по другому мысль сформулировать не смог( |
Цитата:
Ведь Цитата:
Т.е. если ты у элемента указал хоть одно из 8-ми - значит создал "Блочный контекст"... Элементы конечно могут быть и вложенными друг в друга... Но в каждом будет создан новый "Блочный контекст". |
Блин, точно, вот почему блоки с float:left будут вести себя похожим образом. Что-то сам не сообразил, спасибо большое)
|
Вот еще интересная статейка на темы потоков и "плавания"...
http://habrahabr.ru/post/136622/ |
ksa всё верно растолковал. Подредактировал свои сообщения, сбивающие с толку. Надеюсь, они теперь понятнее. :)
|
Часовой пояс GMT +3, время: 08:18. |