Почему мое вложенное содержимое div уменьшается, а пространство, которое я не объявил, появляется между контейнерами div?

#css #flexbox #frontend #css-grid #web-frontend

Вопрос:

Вот мой html-файл:

 <header >
        <div id="ballo">
            <div id="balloresize"> <img src="images/BAL.png" alt="" id="balloicresize"> <h2>Black Anthem LTD</h2> </div>
        </div>
        
        
        <div id="menus">
            <div class="icir">
                <img src="images/bmenu icon.png" alt="menu" class="icimg">
            </div>
            <div id="home">
                <a href="https://www.blackanthemltd.site/"><h3>HOME</h3></a>
            </div>
            <div id="aut">
                <a href="https://www.blackanthemltd.site/About"><h3>ABOUT</h3></a>
            </div>
            <div id="serv">
                <a href="https://www.blackanthemltd.site/Services"><h3>SERVICES</h3></a>
            </div>
            <div id="proj">
                <a href="https://www.blackanthemltd.site/Projects"><h3>PROJECTS</h3></a>
            </div>
            <div id="gal">
                <a href="https://www.blackanthemltd.site/Gallery"><h3>GALLERY</h3></a>
            </div>
            <div id="raq">
                <a href="https://www.blackanthemltd.site/RAQ"><h3>REQUEST A QUOTE</h3></a>
            </div>
        </div>
    </header>
 

и css:

 *{
    font-family: Arial, Helvetica, sans-serif;
    font-size: medium;
    text-decoration: none;
}
html,body{
    width:100%;
    height:100%;
    margin: 0;
    padding: 0;
    overflow-x: hidden;
}
header{
    display: grid;
    grid-template-columns: repeat(2, auto);
    grid-template-rows: auto;
    width: 100%;
    column-gap: 0%;
    background: #fff;
}
#ballo{
    grid-column: 1/2;
    
}

#balloresize{
    width: 50%;
    height: 30%;
    display: flex;
    flex-flow: row;
    flex-wrap: nowrap;
    justify-content: space-between;
}
#balloicresize{
    max-width: 100%;
    box-sizing: border-box;
}

#menus{
    grid-column: 2/3;
    display: flex;
    flex-flow: row nowrap;
    width: 50%;
    justify-content: space-evenly;
}
 

это результат, который я получаю:
изображение нежелательного вывода, которое я получаю

Я не знаю, почему между двумя родительскими разделителями под тегом заголовка #fsect и #меню есть пробел, и содержимое также не может быть правильно распределено. Пожалуйста, помогите мне решить эту проблему, я перепробовал все, что знаю. Независимо от того, что я пытаюсь, пространство между двумя дивами просто не исчезает, и содержимое также остается сжатым вместе. HTML правильно отрисован, это css, который работает не так, как я хочу. Вот как я хочу, чтобы заголовок был расположен: заголовок этой картинки-это дизайн, который я хочу получить на своем css

Пожалуйста, помогите!

Ответ №1:

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

 header {
    width: 100%;
    background: #fff;

    display: flex;
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
}
#ballo, #menus {
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
}
 

display: flex говорит, что этот элемент будет гибким контейнером.

flex-direction указывает, размещаем ли мы детей в строке или столбце. ваш заголовок-это строка.

justify-content указывает, как гибкий контейнер будет выделять пространство для своих дочерних элементов вдоль своей главной оси (его главной осью является строка, если вы указываете «строка» для flex-drection , и столбец, если вы указываете «столбец»). space-between позволит максимально увеличить количество пробелов между элементами. Вы могли бы предпочесть space-around .

align-items указывает, как flex-контейнер будет выравнивать элементы по противоположной оси (независимо от того, что противоположно оси выше). Если вы хотите разместить свои элементы примерно в «центре» по вертикали вашего заголовка, как это выглядит на вашем примере, то вам нужно значение «центр» здесь.

Переместите внешнюю часть этого внутреннего div:

 <div id="ballo">
  <img src="images/BAL.png" alt="" id="balloicresize">
  <h2>Black Anthem LTD</h2> 
</div>
 

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

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

Комментарии:

1. Большое вам спасибо, я добился желаемого результата, используя ваш код, большое вам спасибо!