2015-11-13 4 views
1

Я новичок в CSS, и в настоящее время у меня есть правый div и левый div. Я пытаюсь поставить один между ними, и когда я это сделаю, он слегка сдвинет правый div. Вот что я имею в CSS прямо сейчас:Как центрировать div между двумя другими div?

.left { 
 
    height:300px; 
 
    width:200px; 
 
    border:3px solid black; 
 
    float:left; 
 
    border-top-right-radius:15px; 
 
    border-top-left-radius:15px; 
 
    border-bottom-left-radius:15px; 
 
    border-bottom-right-radius:15px; 
 
    background-color:aliceblue; 
 
    margin-bottom:10px; 
 
} 
 

 
.center{ 
 
    height:100px; 
 
    width:100px; 
 
    background-color:blue; 
 
    margin-left:auto; 
 
    margin-right:auto; 
 
} 
 

 

 
.right{ 
 
    height:300px; 
 
    width:200px; 
 
    border:3px solid black; 
 
    float:right; 
 
    border-top-right-radius:15px; 
 
    border-top-left-radius:15px; 
 
    border-bottom-left-radius:15px; 
 
    border-bottom-right-radius:15px; 
 
    background-color:aliceblue; 
 
    margin-bottom:10px; 
 
    
 
}
<div class="left"> 
 
    </div> 
 

 
<div class="center"> 
 
    </div> 
 
    
 
    <div class="right"> 
 
    </div> 
 

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

+0

Вы должны сделать абсолютное положение абсолютного центра. Добавить позицию: absolute; left: 0px; right: 0px; 'styles to. .center'.см. мой ответ ниже. –

ответ

-1

Если вы поплыли слева от среднего div и дали маржу, оставленную на тот же средний div, она не всегда посередине, когда размер экрана изменяется. Таким образом, вы должны установить абсолютную абсолютную позицию и сделать ее всегда посередине для всех размеров экрана. Вы можете сделать все, чтобы сделать центр, установив абсолютное положение и давая левый: 0; право: 0; Маржа: авто; css свойства. Итак, сделайте центральную позицию div абсолютной и добавьте влево: 0px; право: 0px; css. Добавьте новые стили для класса .center.

.left { 
    height:300px; 
    width:200px; 
    border:3px solid black; 
    float:left; 
    border-top-right-radius:15px; 
    border-top-left-radius:15px; 
    border-bottom-left-radius:15px; 
    border-bottom-right-radius:15px; 
    background-color:aliceblue; 
    margin-bottom:10px; 
} 

.center{ 
    height:100px; 
    width:100px; 
    background-color:blue; 
    margin-left:auto; 
    margin-right:auto; 
    position:absolute; 
    left:0; 
    right:0; 
} 


.right{ 
    height:300px; 
    width:200px; 
    border:3px solid black; 
    float:right; 
    border-top-right-radius:15px; 
    border-top-left-radius:15px; 
    border-bottom-left-radius:15px; 
    border-bottom-right-radius:15px; 
    background-color:aliceblue; 
    margin-bottom:10px; 

} 
<div class="left"> 
    </div> 

<div class="center"> 
    </div> 

    <div class="right"> 
    </div> 
+0

Почему это что-то меняет? Можете ли вы рассказать о своем ответе? – tjons

+0

Я объяснил выше, что я изменил. –

+0

Могу ли я узнать, почему этот ответ проголосовали? –

2

Вы можете изменить порядок дивы:

.left { 
 
    height: 300px; 
 
    width: 200px; 
 
    border: 3px solid black; 
 
    float: left; 
 
    border-top-right-radius: 15px; 
 
    border-top-left-radius: 15px; 
 
    border-bottom-left-radius: 15px; 
 
    border-bottom-right-radius: 15px; 
 
    background-color: aliceblue; 
 
    margin-bottom: 10px; 
 
} 
 
.center { 
 
    height: 100px; 
 
    width: 100px; 
 
    background-color: blue; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
} 
 
.right { 
 
    height: 300px; 
 
    width: 200px; 
 
    border: 3px solid black; 
 
    float: right; 
 
    border-top-right-radius: 15px; 
 
    border-top-left-radius: 15px; 
 
    border-bottom-left-radius: 15px; 
 
    border-bottom-right-radius: 15px; 
 
    background-color: aliceblue; 
 
    margin-bottom: 10px; 
 
}
<div class="left"> 
 
</div> 
 
<div class="right"> 
 
</div> 
 
<div class="center"> 
 
</div>

От W3C's Visual Formatting Model:

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

Так как вы хотите, чтобы центр DIV быть справа от левого всплывающего DIV и слева от правого всплывающего DIV, он должен быть помещен после того, как дивов в HTML.

Или держать дивы, как они есть, и настроить верхний край на правой DIV:

.left { 
 
    height: 300px; 
 
    width: 200px; 
 
    border: 3px solid black; 
 
    float: left; 
 
    border-top-right-radius: 15px; 
 
    border-top-left-radius: 15px; 
 
    border-bottom-left-radius: 15px; 
 
    border-bottom-right-radius: 15px; 
 
    background-color: aliceblue; 
 
    margin-bottom: 10px; 
 
} 
 
.center { 
 
    height: 100px; 
 
    width: 100px; 
 
    background-color: blue; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
} 
 
.right { 
 
    height: 300px; 
 
    width: 200px; 
 
    border: 3px solid black; 
 
    float: right; 
 
    border-top-right-radius: 15px; 
 
    border-top-left-radius: 15px; 
 
    border-bottom-left-radius: 15px; 
 
    border-bottom-right-radius: 15px; 
 
    background-color: aliceblue; 
 
    margin-bottom: 10px; 
 
    margin-top: -100px; 
 
}
<div class="left"> 
 
</div> 
 

 
<div class="center"> 
 
</div> 
 

 
<div class="right"> 
 
</div>

отрицательное верхнее поле смещения эффекта поплавка толкающей коробку.

+0

Почему это ничего не меняет? Можете ли вы рассказать о своем ответе? – tjons

+0

@tjons Что значит, почему это что-то меняет? Примеры ясно показывают результат, который запросил OP, с выровненными divs и средним div с центром. – j08691

+0

Я изначально прокомментировал перед тем, как @BSMP добавил дополнительную информацию. Я начинаю беспокоиться только о кодовых (или почти кодовых) ответах на SO, хотя я сам виноват в этом. Нам нужно быть осторожным, чтобы не впадать в ловушку решения других проблем, не помогая им научиться решать свои проблемы. – tjons

0

Вы можете также добавить отрицательные поля для центрирования DIV.

.left { 
 
    height:300px; 
 
    width:200px; 
 
    border:3px solid black; 
 
    float:left; 
 
    border-top-right-radius:15px; 
 
    border-top-left-radius:15px; 
 
    border-bottom-left-radius:15px; 
 
    border-bottom-right-radius:15px; 
 
    background-color:aliceblue; 
 
    margin-bottom:10px; 
 
} 
 

 
.center{ 
 
    height:100px; 
 
    width:100px; 
 
    background-color:blue; 
 
    margin-left:auto; 
 
    margin-right:auto; 
 
margin-bottom: -100px; 
 
} 
 

 

 
.right{ 
 
    height:300px; 
 
    width:200px; 
 
    border:3px solid black; 
 
    float:right; 
 
    border-top-right-radius:15px; 
 
    border-top-left-radius:15px; 
 
    border-bottom-left-radius:15px; 
 
    border-bottom-right-radius:15px; 
 
    background-color:aliceblue; 
 
    margin-bottom:10px; 
 
    
 
}
<div class="left"> 
 
</div> 
 

 
<div class="center"> 
 
</div> 
 

 
<div class="right"> 
 
</div>

0

Там не хватает данных о вашей желаемого результата здесь, но почему бы не всплывают все три дивы налево?

Обновление: Вы можете использовать flexbox в зависимости от поддержки браузера. Поместите свои divs в контейнер и настройте дисплей контейнера.

.container { display: flex; flex-direction: row; justify-content: space-between; align-items: flex-start; } 
+0

Если бы я должен был плавать все 3 divs влево, я бы использовал любое позиционирование или поля, чтобы поместить центр и право на их желаемые позиции и сделать так, чтобы они оставались в одном и том же месте, несмотря на размер страницы? –

+1

Вот и все. Вы не указали, что хотите, кроме трех разделов. Если вам нужно что-то большее, чем вам может понадобиться другое решение. – cijanzen

+0

Я обновил свой ответ с помощью нового решения – cijanzen

Смежные вопросы