2016-12-29 2 views
0

У меня есть элемент, который должен быть расположен по горизонтали к другому элементу. CSS для центрированного элемента так (я удалил uneccesary код):Центрирование элемента по отношению к другому элементу

#center-element{ 
    display: flex; 
    flex-direction: column; 
    align-items: stretch; 
    position: absolute; 
} 

Я должен сделать это, используя ваниль JS. Я пробовал:

var targetPos = target.getBoundingClientRect(); 
centerDiv.style.top = (targetPos.top + targetPos.height) + "px"; 
centerDiv.style.left = (targetPos.left + (targetPos.width/2)) + "px"; 

Но это не работает. Есть идеи?

JSFiddle

+0

... почему бы просто не дать обе дивы в том же стиле? Все, что вам нужно, это ширина: 75% и выравнивание текста: центр на обоих –

+0

Да, но в моем коде (не здесь) это не текст. – MasterBob

+0

трудно помочь с вводящим в заблуждение примером, но вы можете попробовать отобразить: встроенный блок и margin: 0 auto; на изображении или элементе, который вы хотите центрировать. –

ответ

1

//Somehow center the div here 
 
var target = document.getElementById("target"); 
 
var centerDiv = document.getElementById("centerDiv"); 
 
var targetPos = target.getBoundingClientRect(); 
 
centerDiv.style.top = targetPos.bottom + "px"; 
 
centerDiv.style.left = targetPos.left + (target.offsetWidth - centerDiv.offsetWidth)/2 + "px";
#target { 
 
    background-color: lightblue; 
 
    text-align: center; 
 
    width: 75%; 
 
} 
 
#centerDiv { 
 
    display: flex; 
 
    flex-direction: column; 
 
    align-items: stretch; 
 
    position: absolute; 
 
}
<div id="target"> 
 
    This is the div 
 
</div> 
 
<div id="centerDiv"> 
 
    This is supposed to be horizontally centered <em>to the div element above</em> 
 
</div>

0

Вы можете сделать это с помощью Flexbox. Вы можете обернуть оба div внутри контейнера div и применить display:flex; к этому контейнеру.

#target { 
 
    background-color: lightblue; 
 
    text-align: center; 
 
    width: 100%; 
 
} 
 
#centerDiv { 
 
    /* display: flex; 
 
    flex-direction: column; 
 
    align-items: stretch; 
 
    position: absolute; */ 
 
    text-align:center; 
 
} 
 
.container{ 
 
    display:flex; 
 
    width:75%; 
 
    flex-direction:column; 
 
    align-items:center; 
 
    justify-content:center; 
 
}
<div class="container"><div id="target"> 
 
    This is the div 
 
</div> 
 
<div id="centerDiv"> 
 
    This is supposed to be horizontally centered <em><br/>to the div element above</em> 
 
</div> 
 
</div>

+0

Что происходит, когда flexbox находится внутри flexbox? – MasterBob

+0

вы можете использовать его. он не нарушает макет. – ab29007

+0

, но вы можете в основном выровнять текст с помощью 'text-align: center;' и div с 'margin: 0 auto;' – ab29007