El código javascript normalmente ponlo justo antes del cierre del body, no en el head. Si no, es posible que no puedas acceder a elementos porque aún no se han creado por parte del navegador.
Utiliza ids para nombres únicos y clases para nombres que se vayan a repetir. Por ejemplo, no vas a tener 2 class=wrapper, mejor usa un id ahí. En cambio en los test1 está bien usas clases porque tienes 2 elemenos con la clase.
Tampoco es necesario que añadas ids o clases única y exclusivamente para estilar cuando la estructura es simple, tienes un montón de selectores disponibles. Yo prefiero dejar las clases para relacionar con estilos concretos, mas que para identificar el tipo de elemento con lo que tengo en la cabeza.
Yo prefiero utilizar html léxico sobre usar divs para todo, es mas recomendado.
index.html
<!DOCTYPE html>
<!-- Avoid GET request to favicon.ico -->
<link rel="icon" href="data:;base64,iVBORw0KGgo="> <link rel="stylesheet" href="./css/index.css" media="all"> <meta name="theme-color" content="#fffafa">
<nav id="topBar">
<a href="#aboutUs">About Us
</a> <a href="#contact">Contact
</a> <a href="#projects">Projects
</a> </nav>
<section>
<article id="aboutUs">
Dolor amet laudantium necessitatibus adipisci illo? Exercitationem consectetur fuga facere aliquam labore? Nam quis itaque dolor expedita tempora. Asperiores ipsam obcaecati dolores delectus quam Amet provident corporis doloribus veniam iure Nam ea error eaque ex odit debitis aliquid, perferendis accusamus sapiente. Tenetur nobis neque ex id incidunt. Cum eius porro
</article>
<article id="contact">
Adipisicing fugiat repellat voluptas voluptas quo perspiciatis nemo laudantium! Molestiae libero in doloribus modi aspernatur! Maxime et pariatur quod et aperiam, nostrum. Deleniti omnis accusamus blanditiis architecto non? Quibusdam ratione ex minima aliquam inventore tempore voluptate. Non odio architecto laborum facere ea? Corrupti accusamus temporibus error temporibus eaque similique. Veniam
</article>
<article id="projects">
Ipsum aliquid dolor impedit libero placeat! Ea quo aliquam ipsum ab earum mollitia officiis! A aliquam molestiae quis molestias eum Iste quisquam aut neque eos corrupti Nulla iste officia eligendi voluptatibus hic? Excepturi impedit voluptas illum doloremque ratione fugit Facilis cum voluptatem quas non corrupti, laborum qui unde? Beatae optio
</article>
</section>
index.css
:root {
/* How to define variables in css example */
--color1: #34568b;
--color2: #e9e9e9;
--color3: #cb8b5d;
--fontColor: #333;
}
html {
/* Animate the scroll instead of suddent jump */
scroll-behaviour: smooth;
/* Do not scroll all the way down */
scroll-padding-top: 1.5rem;
}
/* When scrolling to article: */
article:target {
outline: 1px dotted blue;
background-color: #fffbfb; /* Clearer than snow color */
color: #000; /* Darker than #333 */
}
body {
margin: 0;
width: 100%;
height: 100%;
text-align: middle;
text-size-adjust: none; /* Fix Android Big Text */
text-rendering: optimizeLegibility; /* Improve text */
margin-bottom: 14px; /* Some Android screens cover bottom viewport */
font-size: 2vw;
color: var(--fontColor);
font-family: sans-serif;
}
#topBar {
display: flex;
justify-content: space-around;
position: fixed;
top: 0.5rem;
right: 0.5rem;
text-align: middle;
width: 30vw;
background-color: lightgray;
padding: 0.5rem;
border-radius: 1337px;
text-decoration: none;
opacity: 0.95;
}
#topBar > a {
text-decoration: none;
}
body > section { /* Sections that are a direct childs of body */
display: flex;
flex-direction: column; /* Default is row */
align-items: center; /* Align everything horizontally */
width: 100vw; /* Set width size, to make align efective */
background-color: snow;
}
body > section > article { /* articles direct childs of sections that are direct childs of body */
padding: 1rem;
}
Para el generar etiquetas, texto de ejemplo y demás, usé el plugin de emmet para vim (mi editor de texto). Por ejemplo, escribir al escribir el texto p>lorem50,, se me generaron los <p>50 palabras aleatorias</p>
No utilicé javascript pero te dejé el script de ejemplo.