Menu nie wyświetla się w jednej linii

0

ostatni raz próbuje poszukać pomocy, gdyż był to mój pierwszy raz, nie wiedząc co robię(dlatego się uczę, a zrobiłem to samo co w poradniku z przed 7 lat) zostałem wyśmiany że nie potrafię dobrze strony zrobić i że nie powinienem się za to zabierać więc jak ktoś nie chce pomóc to proszę nie komentować.

pokazuje problem: "o mnie" i "aktualności" nie są obok siebie mimo że te cztery inline-boxy są po 25%
screenshot-20240215164314.png
prosiłbym o kulture i pamiętajcie, dopiero zaczynam i nie chce się za szybko zniechęcić
kod html i css
V

<!DOCTYPE html>
<html lang="pl"> 
<head>
        <meta charset="utf-8>
        <meta name=" viewport "    content="width=device-width, initial-scale=1.0">
        <title>Pierwsza strona</title>
        <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap" rel="stylesheet">
<link rel="icon" type="image/x-icon" href="/images/favicon.ico">
         <link rel="stylesheet" href="style.css">
        </head>

<body>
      <div id="wrapper">
      <header>
            <img src="programista.jpg" alt="programista - header"/>
      </header>
      <nav>
<a class="menu active" href="#">O mnie</a>
<a class="menu" href="#">Aktualności</a>
<a class="menu" href="#">Inspiracje</a>
<a class="menu" href="#">Kontakt</a>
      </nav>
        <section>
                       <article>
                        <h1>Moja pierwsza strona internetowa</h1>
                        <p><img class="left" src="face.jpg" alt="twarz znanej osoby" />taką stronę jesteś w stanie napisać z palca w godzine po kilku tygodzniach nauki. Pomyśl co będzie w stanie zrobić po kilku miesiącach :)</p>
                        <p> taka strona jest prosta </p>
                        <p> naprawde nie jest trudno! </p>
                        </article>
                       <iframe width="1000" height="563" src="https://www.youtube.com/embed/-Zn8yqxlU8c?si=Ap3EE65X_bk87jkV" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
        </section>
                       <footer>Zrobiliłem takie coś w 30 minut.</footer>
      


                       </body>
</html>

css
V
* {
    margin: 0px; padding: 0px
    font-family; Open-Sans, arial;
    box-sizing; border-box;
     
 }

body {background-color:#ddb}

#wrapper {
    max-width: 1000px;
    margin: 0px auto 0px auto;
    background-color: white;
}
header img{
    width: 100%; 
    display:block;
}
nav {
    background-color: darkcyan;
}
nav a{}

a.menu {
    display: inline-block;
    width:25%;
    padding: 15px 30px;
    color: white;
    text-decoration: none;
    text-align:center;
    
}
a.menu:hover {
    background-color:crimson;
}
.active {
    background-color:crimson
}

0

usuń padding: 15px 30px; i sprawdź

0
Productionserver napisał(a):

usuń padding: 15px 30px; i sprawdź

nie zadziałało
screenshot-20240215164749.png

1

użyj sobie jakiegoś IDE, bo masz sporo banalnych błędów w CSS np. ; zamiast :

* { margin: 0px; padding: 0px; font-family: Open-Sans, arial; box-sizing: border-box; }

Dodatkowo z ChataGPT:
The inline-block elements are sensitive to whitespace in the HTML, which can cause them to behave unexpectedly.

O dziwo to działa:
<nav><a class="menu active" href="#">O mnie</a><a class="menu" href="#">Aktualności</a><a class="menu" href="#">Inspiracje</a><a class="menu" href="#">Kontakt</a></nav>

0

Ziomek masz width:25%; - więc 4 by były jak by to wchodziły na cały 100% ekranu. Określ te menu jako stała szerokość a nie % - nadaj im sztywny rozmiar. Lub rozmiar max w css. Daj im takie 200 px na element to się zmieści. Dopasuj rozmiarem - określeniem wielkości kontenera startowego i max.

0

@czarollll
Elementy wyświetlane jako inline-block zawsze mają dodawaną małą przerwę między blokami.
Najczęściej (i najłatwiej) wyświetlać je normalnie jako block z ustawionym float:left

Są też inne możliwości - bardziej kombinatoryjne - aby elementy wyświetlane jako inline-block były wyświetlane bez przerw:
https://css-tricks.com/fighting-the-space-between-inline-block-elements/

@Edit
warto również stosować box-sizing: border-box aby paddingi czy bordery były wliczane do zdefiniowanej szerokości, a nie rozszerzały jej

0

Te przerwy to po prostu spacje, które biorą się ze znaku nowej linii w Twoim kodzie.

Normalnie w HTML jak zrobisz:

<div>
Hello
world
</div>

to pomimo braku jakiejkolwiek spacji w kodzie - te dwa słowa będą zapisane ze spacją. Dowolna ilość faktycznych spacji jak i znaków nowej linii jest łączona w jedną spację. Wszystkie spacje/nowe linie zaraz po otwarciu/zamknięciu tagu są ignorowane. Dlatego "Hello" zaczyna się równo od lewej i nie ma tam spacji. To domyślne zachowania HTML/CSS, które można nadpisywać, ale nie ma sensu w tę stronę ciągnąć dyskusji. Chciałbym, żebyś tylko był świadomy faktu.

Tak czy siak, uzbrojony w tę wiedzę wystarczy, że zamiast

<a class="menu active" href="#">O mnie</a>
<a class="menu" href="#">Aktualności</a>

zrobisz

<a class="menu active" href="#">O mnie</a><a class="menu" href="#">Aktualności</a>

i po problemie.

A jeszcze lepiej i wygodniej - ponieważ elementy nawigacyjne są listą, to wpakuj to w listę:

<nav>
  <ul>
    <li>
      <a href="">...</a>
    <li>
      <a href="">...</a>
    <li>
      <a href="">...</a>
  </ul>
</nav>

i niech to właśnie li będzie miało inline-block. Zauważ, że nie ma tu "zamknięcia" elementu </li> jest to poprawne (sprawdź w validatorze jak nie wierzysz), a powoduje, że przeglądarka sama domknie sobie elementy li i to w taki sposób, ze nie będzie tam spacji. Kod pozostaje czytelny z perspektywy edytującego, a spacji nie ma.

Demo:

https://jsbin.com/vebanokahi/edit?html,css,js,output

1 użytkowników online, w tym zalogowanych: 0, gości: 1