Jump to content
  • 0

Верстка и центрирование блоков


New1234567
 Share

Question

Здравствуйте, решил попрактиковаться с css. У меня вопрос тут созрел. Как сделать так, чтобы при изменении масштабирования все блоки не были по левой и правой сторонам а вместе со средним блоком были не растянутыми? И еще просьба, опишите как можно сделать, чтобы к примеру средний блок был посередине и не надо было его чем-то фиксировать к примеру позиционированием. Например: у меня есть верхний блок, он растянут по ширине на 100%, далее есть два левых и один правый, а посередине еще один с содержанием, он у меня ниже всех ставится, и приходится его фиксировать посередине. Ниже приведу в пример код, помогите его исправить так, чтобы, если изменить масштаб, сайт просто бы сжимал блоки к середине все к среднему блоку.

<!DOCTYPE html><html><head>	<title>Site</title>		<link rel="stylesheet" href="normalize.css" type="text/css">		<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'><style type="text/css">body {	background: url(fon.png);}#main {	width: 100%;	height: 70px;	padding: 10px 0px 0px 0px;	background: #a4b357;	background: -moz-linear-gradient(top,  #a4b357 0%, #75890c 100%);	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a4b357), color-stop(100%,#75890c));	background: -webkit-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: -o-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: -ms-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: linear-gradient(to bottom,  #a4b357 0%,#75890c 100%);	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4b357', endColorstr='#75890c',GradientType=0 );	-webkit-box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	-moz-box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	text-align: center;	vertical-align: middle;	display: block;	float: left;}#n {	display: block;	margin: 7px;}#n a {	color: white;	font-size: 2.3em;	font-family: 'Open Sans', sans-serif;	text-shadow: 0px 3px 3px #0A2B0B;	word-spacing: 20px;	text-decoration: none;	padding: 0px 30px 0px 0px;}#menu1 {	width: 300px;	white-space: nowrap;	margin: 30px 0px 0px 10px;}#top-menu1 {	width: 300px;	height: 70px;	background: #a4b357;	background: -moz-linear-gradient(top,  #a4b357 0%, #75890c 100%);	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a4b357), color-stop(100%,#75890c));	background: -webkit-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: -o-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: -ms-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: linear-gradient(to bottom,  #a4b357 0%,#75890c 100%);	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4b357', endColorstr='#75890c',GradientType=0 );	-webkit-box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	-moz-box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	-webkit-border-top-left-radius: 10px;	-webkit-border-top-right-radius: 10px;	-moz-border-radius-topleft: 10px;	-moz-border-radius-topright: 10px;	border-top-left-radius: 10px;	border-top-right-radius: 10px;}#content-menu1 {	width: 300px;	height: 330px;	background: white;	-webkit-border-bottom-right-radius: 10px;	-webkit-border-bottom-left-radius: 10px;	-moz-border-radius-bottomright: 10px;	-moz-border-radius-bottomleft: 10px;	border-bottom-right-radius: 10px;	border-bottom-left-radius: 10px;	opacity: 0.3;}#menu2 {	width: 300px;	white-space: nowrap;	margin: 30px 0px 0px 10px;}#top-menu2 {	width: 300px;	height: 70px;	background: #a4b357;	background: -moz-linear-gradient(top,  #a4b357 0%, #75890c 100%);	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a4b357), color-stop(100%,#75890c));	background: -webkit-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: -o-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: -ms-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: linear-gradient(to bottom,  #a4b357 0%,#75890c 100%);	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4b357', endColorstr='#75890c',GradientType=0 );	-webkit-box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	-moz-box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	-webkit-border-top-left-radius: 10px;	-webkit-border-top-right-radius: 10px;	-moz-border-radius-topleft: 10px;	-moz-border-radius-topright: 10px;	border-top-left-radius: 10px;	border-top-right-radius: 10px;}#content-menu2 {	width: 300px;	height: 200px;	background: white;	-webkit-border-bottom-right-radius: 10px;	-webkit-border-bottom-left-radius: 10px;	-moz-border-radius-bottomright: 10px;	-moz-border-radius-bottomleft: 10px;	border-bottom-right-radius: 10px;	border-bottom-left-radius: 10px;	opacity: 0.3;}#menu3 {	width: 300px;	white-space: nowrap;	margin: 30px 0px 0px 0px;	position: absolute;	right: 10px;	top: 70px;}#top-menu3 {	width: 300px;	height: 70px;	background: #a4b357;	background: -moz-linear-gradient(top,  #a4b357 0%, #75890c 100%);	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a4b357), color-stop(100%,#75890c));	background: -webkit-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: -o-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: -ms-linear-gradient(top,  #a4b357 0%,#75890c 100%);	background: linear-gradient(to bottom,  #a4b357 0%,#75890c 100%);	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4b357', endColorstr='#75890c',GradientType=0 );	-webkit-box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	-moz-box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	box-shadow: 0px 5px 3px 0px rgba(44,46,37,1);	-webkit-border-top-left-radius: 10px;	-webkit-border-top-right-radius: 10px;	-moz-border-radius-topleft: 10px;	-moz-border-radius-topright: 10px;	border-top-left-radius: 10px;	border-top-right-radius: 10px;}#content-menu3 {	width: 300px;	height: 600px;	background: white;	-webkit-border-bottom-right-radius: 10px;	-webkit-border-bottom-left-radius: 10px;	-moz-border-radius-bottomright: 10px;	-moz-border-radius-bottomleft: 10px;	border-bottom-right-radius: 10px;	border-bottom-left-radius: 10px;	opacity: 0.3;}#content {	width: 500px;	height: 500px; 	background: black;	position: absolute;	top: 100px;	left: 500px;}</style></head><body><div id="main">	<div id="n"><a href="#">Company</a> <a href="#">Products</a> <a href="#">Brands</a></div>		<div id="menu1">			<div id="top-menu1"></div>			<div id="content-menu1"></div>		</div>		<div id="menu2">			<div id="top-menu2"></div>			<div id="content-menu2"></div>		</div>		<div id="menu3">			<div id="top-menu3"></div>			<div id="content-menu3"></div>		</div>				<div id="content">hi</div></div></body><html>
Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0
#menu1,#menu2,#menu3 {  margin-left: auto;  margin-right: auto;}

Если я правильно вас понял...

 

Нет, сейчас поясню, что хотел сказать.

Взять к примеру тот же контакт, там когда размер уменьшаешь, все окна вместе друг с другом к середине стыкуются, а не каждое отдельно гуляет и идет влево и вправо, оставляя середину одну.

Link to comment
Share on other sites

  • 0

Ничо не понятно.

Объясню по порядку

Есть сайт как у меня, у него есть потолок и четыре блока, два слева, один права, еще один посередине между левыми двумя и правыми. Если увеличить масштаб, ну или разрешение на другом компьютере будет небольшим, надо, чтобы все блоки не накладывались друг на друга, а если уменьшить разрешение экрана, сделать, как на больших экранах, то блоки не уйдут влево и вправо, пытаясь привязаться каждый к своей стороне, а останутся вместе со всеми блоками, т.е. место будет много свободного по левой и правой стороне, но все блоки останутся друг с другом, а не разлетятся.

Edited by New1234567
Link to comment
Share on other sites

  • 0

Покажите картинку или макет как надо сделать.

4dce8659c0bfb58bf03b4701d925ca16.jpg6047455d0fc964a52b49d029f83ce73a.jpgВсе блоки разлетаются по сторонам это проблема

Как я понял вам надо max-width параметр задать для нужного вам блока обертки. В котором эти плавающие элементы находятся. 

А на примере можете показать?

Edited by New1234567
Link to comment
Share on other sites

  • 0

Снова не понятно, это вам так сделать надо? Покажите что вы хотите получить в итоге.

Я не понимаю как показать, но на второй картинке не должно быть так, как хочется, надо сделать так, чтобы при масштабе второй картинки, все было вместе как на второй, но слева и справа просто осталось место лишнее, а весь сайт сгруппировался к середине, как будто от  центра и шел.

Edited by New1234567
Link to comment
Share on other sites

  • 0

Ничего не изменится, оберните все ваши блоки в <div class="wrapper">.

http://codepen.io/anon/pen/rVBLJZ

Вот что происходит. Ничего не центризуется.

 

Ничего не изменится, оберните все ваши блоки в <div class="wrapper">.

http://codepen.io/anon/pen/rVBLJZ

Вот что происходит. Ничего не центризуется.

 

Это без содержания, т.е. по идее по середине между левыми блоками и правым должен был быть еще большой блок с информацией.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By zeiger2
      Здравствуйте! У меня стоит задача, что при наведении на блок li строка должна поменять цвет, в том числе и картинка. Я меняю картинку с помощью 
      background-image: none;     background: url(../img/check_icon_red.png) left no-repeat;   Но теперь картинка позицианируется не там где должна, её можно поставить на место только вручную, через -100px. Нужно поставить ровно туда, где она была. Должна быть в одном ряду с другими
    • By Mix9
      есть див с 5 img, при уменьшении экрана див выходит за него. Я добавил overflow: auto для этого div в надежде на то, что я смогу прокручивать фотки с помощью скроллбара, однако даже с ним почему-то я не вижу часть фоток которые вышли за границу. Что с этим можно сделать? класс video повторяется 5 раз, я тут оставил только 1 
      .content{ width: 90%; background-color: #333; } .video{ margin: 0px 4px 0px 4px; width: 310; display: flex; flex-direction:column; } .video_button_text{ margin-top: 10px; display: flex; flex-direction: row; font-size: 20px; color: white; } .video_text_div{ display: inline-block; width: 250px; } .video_text{ text-align: justify-all; margin: 0px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .slidan_videos{ margin: 0px 10px 0px 20px; overflow: auto; width: auto; margin-bottom: 50px; display: flex; flex-direction: row; justify-content: space-around; } <div class="content"> <div class = slidan_videos> <div class = video> <div> <a href = 'ссылка'><img class="img" src=""картинка"></a> </div> <div class = video_button_text> <div class = avatarka_div> <a href="ссылка" target="_blank"><img class = avatarka src="картинка"></a> </div> <div class = video_text_div> <p class = video_text><a href="ссылка">текст</a></p> </div> </div> </div>
    • By Kaido
      Использую готовый плагин для модальных окон(от MaxGraph). Проблема в том, что когда у меня открыто два модальных окна, для примера Форма + Политика конфендициальности, и мне нужно закрыть политику вместе с ней закрывается и другое модальное окно. В JS я не сильно разбираюсь(собственно из за этого и использую готовый плагин), можете помочь кто работал с этим плагином? Я примерно понимаю как он работает, но реализовать чтобы закрывалось только одно не получается.
       
        <div class="content"> <button class="modal-btn" data-path="first" data-animation="fadeInUp" data-speed="1500">Открыть окно 1</button> </div> <div class="modal"> <div class="modal__wrapp" data-target="first"> <div class="modal__content"> <button class="modal__close">Закрыть</button> модальное окно <button data-path="policy">Политика</button> </div> </div> <div class="modal__wrapp" data-target="policy"> <div class="modal__content"> <button class="modal__close">Закрыть</button> политика </div> </div> </div> .modal { --transition-time: 0.3s; position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 1000; cursor: pointer; overflow-y: auto; overflow-x: hidden; text-align: center; opacity: 0; visibility: hidden; transition: opacity var(--transition-time), visibility var(--transition-time); } .modal__wrapp { display: none; cursor: default; width: fit-content; height: fit-content; } .modal__content{ position: absolute; left: 500px; width: 500px; height: 500px; display: flex; color: white; flex-direction: column; text-align: left; background-color: #000; } .modal__content button{ width: 200px; height: 50px; margin: 50px 0; } .modal.is-open { opacity: 1; visibility: visible; transition: opacity var(--transition-time), visibility var(--transition-time); } .modal__wrapp.modal-open { display: flex; } .disable-scroll { position: relative; overflow: hidden; height: 100vh; position: fixed; left: 0; top: 0; width: 100%; } .fade { opacity: 0; transition: opacity var(--transition-time); } .fade.animate-open { opacity: 1; transition: opacity var(--transition-time); } .fadeInUp { opacity: 0; transform: translateY(vw(-100)); transition: opacity var(--transition-time), transform var(--transition-time); } .fadeInUp.animate-open { opacity: 1; transform: translateY(0); transition: opacity var(--transition-time), transform var(--transition-time); } .modal__wrapp[data-target="policy"] .modal__content{ left: 1050px; background-color: #000; opacity: .5; } class Modal { constructor(options) { let defaultOptions = { isOpen: () => {}, isClose: () => {}, } this.options = Object.assign(defaultOptions, options); this.modal = document.querySelector('.modal'); this.speed = false; this.animation = false; this.isOpen = false; this.modalContainer = false; this.previousActiveElement = false; this.fixBlocks = document.querySelectorAll('.fix-block'); this.focusElements = [ 'a[href]', 'input', 'button', 'select', 'textarea', '[tabindex]' ]; this.events(); } events() { if (this.modal) { document.addEventListener('click', function(e){ const clickedElement = e.target.closest('[data-path]'); if (clickedElement) { let target = clickedElement.dataset.path; let animation = clickedElement.dataset.animation; if (clickedElement.classList.contains('modal-close')) { this.close(); } let speed = clickedElement.dataset.speed; this.animation = animation ? animation : 'fade'; this.speed = speed ? parseInt(speed) : 300; this.modalContainer = document.querySelector(`[data-target="${target}"]`); this.open(); return; } if (e.target.closest('.modal__close')) { this.close(); return; } }.bind(this)); window.addEventListener('keydown', function(e) { if (e.keyCode == 27) { if (this.isOpen) { this.close(); } } if (e.keyCode == 9 && this.isOpen) { this.focusCatch(e); return; } }.bind(this)); this.modal.addEventListener('click', function(e) { if (!e.target.classList.contains('modal__wrapp') && !e.target.closest('.modal__wrapp') && this.isOpen) { this.close(); } }.bind(this)); } } open() { this.previousActiveElement = document.activeElement; this.modal.style.setProperty('--transition-time', `${this.speed / 1000}s`); this.modal.classList.add('is-open'); this.disableScroll(); this.modalContainer.classList.add('modal-open'); this.modalContainer.classList.add(this.animation); setTimeout(() => { this.options.isOpen(this); this.modalContainer.classList.add('animate-open'); this.isOpen = true; this.focusTrap(); }, this.speed); } close() { if (this.modalContainer) { this.modalContainer.classList.remove('animate-open'); this.modalContainer.classList.remove(this.animation); this.modal.classList.remove('is-open'); this.modalContainer.classList.remove('modal-open'); this.enableScroll(); this.options.isClose(this); this.isOpen = false; this.focusTrap(); } } focusCatch(e) { const focusable = this.modalContainer.querySelectorAll(this.focusElements); const focusArray = Array.prototype.slice.call(focusable); const focusedIndex = focusArray.indexOf(document.activeElement); if (e.shiftKey && focusedIndex === 0) { focusArray[focusArray.length - 1].focus(); e.preventDefault(); } if (!e.shiftKey && focusedIndex === focusArray.length - 1) { focusArray[0].focus(); e.preventDefault(); } } focusTrap() { const focusable = this.modalContainer.querySelectorAll(this.focusElements); if (this.isOpen) { focusable[0].focus(); } else { this.previousActiveElement.focus(); } } disableScroll() { let pagePosition = window.scrollY; this.lockPadding(); document.body.classList.add('disable-scroll'); document.body.dataset.position = pagePosition; document.body.style.top = -pagePosition + 'px'; } enableScroll() { let pagePosition = parseInt(document.body.dataset.position, 10); this.unlockPadding(); document.body.style.top = 'auto'; document.body.classList.remove('disable-scroll'); window.scroll({ top: pagePosition, left: 0 }); document.body.removeAttribute('data-position'); } lockPadding() { let paddingOffset = window.innerWidth - document.body.offsetWidth + 'px'; this.fixBlocks.forEach((el) => { el.style.paddingRight = paddingOffset; }); document.body.style.paddingRight = paddingOffset; } unlockPadding() { this.fixBlocks.forEach((el) => { el.style.paddingRight = '0px'; }); document.body.style.paddingRight = '0px'; } } const modal = new Modal({ isOpen: (modal) => { console.log(modal); console.log('opened'); }, isClose: () => { console.log('closed'); }, });  
    • By stasN1
      Мне нужен такой результат :

      Не понимаю почему background не применяется вокруг иконок:

       
      Сам код:
      Html:
      css:

      Html:
      <section class="finish"> <div class="container"> <h2 class="finish_header">По окончании обучения Вы сможете!</h2> <div class="finish_divider"></div> <div class="finish_wrapper"> <finish_item> <div class="finish_round"> <img src="/icons/finish/1 (1).png" alt="" class="finish_icon"> </div> <div class="finish_descr">Создать свой сайт или блог</div> </finish_item> <finish_item> <div class="finish_round"> <img src="/icons/finish/2.png" alt="" class="finish_icon"> </div> <div class="finish_descr">Создать свой сайт или блог</div> </finish_item> <finish_item> <div class="finish_round"> <img src="/icons/finish/3.png" alt="" class="finish_icon"> </div> <div class="finish_descr">Обеспечить ему медленный, но верный рост в ТОП</div> </finish_item> <finish_item> <div class="finish_round"> <img src="/icons/finish/4.png" alt="" class="finish_icon"> </div> <div class="finish_descr">Достигнуть стабильного прироста посетителей</div> </finish_item> <finish_item> <div class="finish_round"> <img src="/icons/finish/5.png" alt="" class="finish_icon"> </div> <div class="finish_descr">Достигнуть стабильного прироста посетителей</div> </finish_item> </div> </div> </section>  
      Css:
      .finish .finish_wrapper { margin-top: 41px; display: flex; justify-content: space-between; } .finish .finish_wrapper .finish_item { width: 204px; } .finish .finish_wrapper .finish_item .finish_round { width: 115px; height: 115px; background-color: #b4e2ff; border-radius: 8px; } .finish_descr { font-family: Roboto; font-size: 17px; line-height: 20px; font-weight: 300; color: #efefef; Спасибо!
       

      Уже решил, спасибо!
      У меня CSS селектор вида:
      .finish .finish_wrapper .finish_item .finish_round

      А должен быть:
      .finish .finish_wrapper finish_item .finish_round
      Т.е. без точки перед finish_item, так как это не класс, а элемент
    • By Dos1er
      Приветствую! 
      Подскажите, плиз, как сделать чекбокс как на скрине? 
      Я новичок в верстке и что-то не могу разобраться в кастомизации данной штуки

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy