позиционирование элементов в определенном месте

#html #css

#HTML #css

Вопрос:

Я уже некоторое время изучаю HTML и CSS, но я довольно самоучка, так что извините, если это кажется довольно простым вопросом.

У меня есть этот контейнер в середине моей страницы (это карусель, но я не думаю, что это имеет значение), и я пытаюсь расположить две вещи: большое слово поверх него (внутри div) и кнопки навигации под ним. В настоящее время я расположил их там, используя position: fixed; top left элементы and и . Конечно, это не идеально, потому что на мобильных устройствах и устройствах разной ширины эти элементы находятся в совершенно разных положениях.

Вот HTML для контейнера и кнопок навигации, элементы управления каруселью тоже там:

 <div id="container">

<input hidden type="radio" name="carousel-control" id="button_a" checked/>
<input hidden type="radio" name="carousel-control" id="button_b"/>
<input hidden type="radio" name="carousel-control" id="button_c"/>
<input hidden type="radio" name="carousel-control" id="button_d"/>

    <div id="title">explore</div> /*the text I want on top*/
    <div id="carousel">
    <div class="p-wrapper">
                
        <section class="panel_a">
            <h2>Panel a</h2>
            <div class="headerdivider"></div>
            
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ornare faucibus diam id maximus. Fusce at efficitur nunc. Curabitur sed ullamcorper orci. Nam nulla enim, ultricies nec lectus a, commodo volutpat nisi. Pellentesque facilisis lacinia ante, eu pulvinar ante varius a. Fusce tincidunt efficitur tempor. Praesent pretium felis consectetur posuere sagittis. Sed luctus nisl non vestibulum semper. Vivamus mi velit, porttitor ac malesuada at, vulputate venenatis augue.</p>
            <p>Morbi faucibus, nisi ac vulputate mattis, turpis tortor maximus nibh, nec interdum lectus sem sit amet enim. Integer non nulla vitae ex gravida egestas. Fusce sodales neque ut erat tempor euismod. Quisque imperdiet rhoncus pellentesque. Fusce vitae efficitur dolor, nec laoreet lacus. Nulla orci purus, cursus sit amet posuere ac, ultrices sed dui. Ut bibendum, dui non euismod lobortis, mi neque pretium lacus, in pulvinar libero mauris eu sem. Morbi ut felis finibus, posuere risus sit amet, malesuada leo.</p>
            <p>Nulla quis molestie mi. Cras quis magna dolor. Suspendisse a scelerisque ligula, ullamcorper imperdiet justo. Ut sit amet nisl malesuada, varius turpis quis, convallis urna. Vestibulum sed odio eget lorem porta dapibus. Mauris augue sapien, scelerisque vel neque vitae, vulputate iaculis tellus. Sed accumsan egestas sem congue vehicula. Fusce quis blandit nibh, non bibendum lorem. Integer maximus mi non eros tincidunt pretium. Curabitur tempor nisi a aliquet dictum. Sed pellentesque venenatis ex ac fermentum. Aliquam vitae tincidunt urna.</p>
            <p>Nulla sagittis quis purus vitae consequat. Nullam pharetra dignissim tempus. Pellentesque egestas elit vel arcu condimentum euismod ut eu nisi. Fusce erat lectus, placerat quis egestas posuere, sollicitudin non ligula. Suspendisse potenti. Fusce vel leo ultrices, vehicula leo quis, semper quam. Cras mollis quis sem in tempor. Proin sed dui eu arcu efficitur pulvinar at sed leo. Donec rhoncus rhoncus est, eleifend posuere neque aliquet in.</p>
        </section>
                
        <section class="panel_b">
            <h2>Panel b</h2>
            <div class="headerdivider"></div>
            {block:AskEnabled}
            <p><iframe frameborder="0" scrolling="no" width="100%" height="190" src="http://www.tumblr.com/ask_form/spinningsilvers.tumblr.com" style="background-color:transparent; overflow:hidden;" id="ask_form"></iframe><!--[if IE]><script type="text/javascript">document.getElementById('ask_form').allowTransparency=true;</script><![endif]--></p>{/block:AskEnabled}
        </section>
                
        <section class="panel_c">
            <h2>Panel c</h2>
            <div class="headerdivider"></div>
            <p>Fusce convallis arcu mauris, vitae semper ligula maximus vitae. Morbi a nibh id justo ullamcorper tincidunt. Aliquam et mollis mauris, eu varius metus. Praesent eget mi ac diam congue iaculis. Praesent accumsan euismod tempus. Aenean tempor libero et eros pellentesque molestie. Pellentesque malesuada ligula ut hendrerit laoreet. Ut turpis neque, tempor in ultrices sed, hendrerit ac leo. Nam placerat dolor sit amet ligula bibendum malesuada. Donec sagittis ultricies ex id mattis.</p>
            <ul>
                <li>Aliquam iaculis enim ut mi bibendum tincidunt.</li>
                <li>Nulla quis elit in lorem vulputate laoreet.</li>
                <li>Praesent non lacus euismod, ultricies lectus ac, vehicula arcu.</li>
                <li>Integer lobortis ipsum vitae velit mollis, at commodo ligula suscipit.</li>
            </ul>
            <p>Sed ut leo et mi tristique feugiat. Nunc fermentum diam mauris, in ultricies neque tincidunt dictum. Quisque ac odio dignissim, ornare enim condimentum, faucibus erat. Sed tortor turpis, imperdiet dignissim lacus eget, dignissim vehicula lorem. Mauris semper mi lacus, sit amet rutrum lacus tincidunt sed. Curabitur vel nisl eu magna placerat pretium. Curabitur malesuada sagittis tortor, eget volutpat mi pellentesque quis.</p>
        </section>
                
        <section class="panel_d">
            <h2>Panel d</h2>
            <div class="headerdivider"></div>
            <p>Aenean maximus accumsan mauris. Praesent rutrum vitae purus et mattis. Nunc at mi et diam pulvinar euismod. Curabitur interdum, leo quis tincidunt pharetra, risus nisl mollis velit, interdum consectetur justo orci in nisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus elit turpis, tincidunt non dui et, molestie maximus nisl. Duis pretium eros sed ultricies convallis. Pellentesque vitae tempor lorem, eu laoreet metus. Vivamus sit amet lorem libero. Vestibulum tristique ligula in gravida volutpat. Sed facilisis ipsum velit, et pharetra nisi ullamcorper ut. Maecenas purus dui, tincidunt non ipsum vel, bibendum aliquam elit. Cras rutrum velit diam, semper aliquet libero posuere nec.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec ut eleifend lacus. Sed fringilla ullamcorper justo, porttitor cursus nisl. Sed et mi aliquet, rutrum erat at, porttitor felis. Mauris consequat mauris id posuere dictum. Proin nec congue purus, nec rhoncus justo. Cras sit amet neque eu ex feugiat auctor at dignissim augue. Sed commodo tellus id erat lobortis, sit amet elementum felis commodo. Ut massa diam, tristique vel lacinia sed, vulputate eget mauris. Fusce lacinia bibendum iaculis.</p>
        </section>
                
    </div> <!-- // .p-wrapper -->
</div> <!-- // #carousel --> 

<div id="navigation"> /*the nav buttons that will go below*/
    <label for="button_a" class="label_a"> <span>about</span> </label>
    <label for="button_b" class="label_b"> <span>message</span> </label>
    <label for="button_c" class="label_c"> <span>navigate</span> </label>
    <label for="button_d" class="label_d"> <span>social</span> </label>
</div> <!-- // #navigation -->  
 

Вот CSS для слова, которое я пытаюсь поместить выше:

 #title {
    font-family:'Abril Fatface', cursive;
    font-size:40px;
    position:fixed;
    top:140px;
    left:135px;
}
 

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

 #navigation {
    position:fixed;
    bottom:175px;
    justify-content:center;
}
 

Вот картинка
того, что я хочу получить, конечно, только с лучшим кодом.

Я пробовал position: absolute; в паре с top: 0px; и left: 0px и я пытался поместить div для слов, которые будут идти выше, в разные места, но ничего не работает. (Не уверен, что это имеет значение, но я работаю с кодом Tumblr здесь.) Это моя первая публикация здесь, и, как я уже упоминал, я не слишком продвинут в программировании. Спасибо!

Ответ №1:

Вы могли бы обернуть все, что принадлежит друг другу, фактически вместе, то есть внутри элемента-оболочки. Таким образом, вы можете просто использовать display: flex with flex-flow: column для их родительского элемента, чтобы расположить их в столбце.

Затем с align-items помощью свойства -вы можете указать, как / где они должны выравниваться.
Для навигации я переопределил его, align-self: stretch чтобы я мог центрировать его содержимое.
Однако можно было бы также указать родительский align-items: stretch элемент (который используется по умолчанию) и заголовок align-self: flex-start . Оба дадут ожидаемый результат, если .carousel это самый широкий элемент из трех.

Как вы видите, используя элемент-оболочку, вам не нужно возиться с числами, чтобы расположить их, и в качестве бонуса вы группируете их вместе, делая семантически понятным, что они принадлежат друг другу.

 body {
  display: flex;
}

section {
  display: flex;
  flex-flow: column;
  align-items: flex-start;
}
section > .carousel {
  border: 1px solid black;
  width: 400px;
  height: 300px;
}
section > nav {
  align-self: stretch;
  display: flex;
  justify-content: center;
  gap: 0.8rem;
} 
 <section>
  <h1>explore</h1>
  <div class="carousel"></div>
  <nav>
    <a>Some link</a>
    <a>Another link</a>
    <a>A third link</a>
  </nav>
</section> 

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

1. Большое вам спасибо! Если бы я хотел уменьшить пространство между ‘explore’ и каруселью, есть ли способ сделать это?

2. Это пространство существует из-за поля по умолчанию <h1> , вы можете изменить его, как вам нравится.