Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Выравнивание блока (https://javascript.ru/forum/xhtml-html-css/73561-vyravnivanie-bloka.html)

adwebzoom 25.04.2018 12:10

Выравнивание блока
 
Вложений: 4
Доброго дня!
Подскажите кто в теме, как можно добиться выравнивания блока по центру относительно кнопки, которая его и вызывает?

Есть многоуровневое меню (картинка 1)

Жму на кнопку Каталог - открывается блок с дополнительным содержимым. В этом содержимом есть подменю и под-под меню. Проблема тут такая часть содержимого из правого под-под меню не умещается на экране. Все потому, что блок с доп. содержимым относительно кнопки КАТАЛОГ открывается с выравниванием по левой своей части.

Вот код в этом положении
Код:

.cs-menu-container .dropdown,
ul.type-category li .sub-cate {
  position: absolute;
  top: auto;
  left: 0;
  z-index: 1000;
  float: none;
  min-width: 230px;
  padding: 0;
  margin: 0;
  border: 1px solid #cccccc;
  border-top:2px solid #c04a62;
  background: #fff;

Что я делаю:

меняю значение left: на -200px;

В итоге получаю нужное мне расположение (картинка 2)

Но тут же исправляя одно я получаю вторую проблему: блок содержимого кнопки ИНФОРМАЦИЯ уходит далеко влево от самой кнопки вызова (картинка 3)

kostyanet 27.04.2018 10:48

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

dropdown_align=function(){
		var ns=button.nextSibling,ps=button.previousSibling,
			dd=button.querySelector('.ddc_window'),ds=dd.style;
		ds.left=ds.right='';
		if(!ps||button.offsetLeft-ps.offsetLeft<0) ds.left='0px';
		else if(!ns || ns.offsetLeft<button.offsetLeft) ds.right='7px';
		else {var bw=button.getBoundingClientRect().width,
			dw=dd.getBoundingClientRect().width;
			ds.right=((bw-dw)/2)+'px';}
	},


В точности такая же была задача и вот это ^^^ все четенько выравнивает.


Часовой пояс GMT +3, время: 10:58.