• Day5:写前端项目(html+css+js)-导航部分p1


    目录

    实现折叠按钮

    medium screen size-如何制作横向的导航栏

    Accessibly


    实现折叠按钮

    效果图:

    如何在调整屏幕尺寸大小的时候,导航栏的列表会从横的变成三条杠杠。就像手风琴导航栏

    手风琴button的操作

     aria-expanded - Accessibility | MDN

    1. <button class="mobile-nav-toggle" aria-controls="primary-navigation"><span class="sr-only" aria-expanded="false">Menuspan>button>
    2. <nav>
    3. <ul id ="primary-navigation" class="primary-navigation underline-indicators flex">
    4. <li class="active"><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="index.html"><span>00span>Homea>
    5. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="destination.html"><span>01span>Destinationa>
    6. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="crew.html"><span>02span>Crewa>
    7. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="technology.html"><span>03span>Technologya>
    8. ul>
    9. nav>

    1. .primary-navigation {
    2. --underline-gap: 2rem;
    3. list-style: none;
    4. padding: 0;
    5. margin: 0;
    6. }
    7. @media (max-width: 35rem) {
    8. .primary-navigation {
    9. #将间距变小
    10. --underline-gap: .5rem;
    11. #位置变成相对于窗口位置,无论怎么移动都不会变
    12. position: fixed;
    13. #在最上一层
    14. z-index: 1000;
    15. inset: 0 0 0 30%;
    16. background: black;
    17. list-style: none;
    18. padding: min(20rem, 15vh) 2rem;
    19. margin: 0;
    20. #垂直摆放
    21. flex-direction: column;
    22. }
    23. #将第一个的border取消掉
    24. .primary-navigation.underline-indicators > .active{
    25. border: 0;
    26. }
    27. }
    28. .primary-navigation a {
    29. text-decoration: none;
    30. }
    31. .primary-navigation a > span {
    32. font-weight: 700;
    33. margin-right: .5em;
    34. }

     inset :inset | CSS-Tricks - CSS-Tricks

     如何将背景加上磨砂质感?

    1. .primary-navigation {
    2. --underline-gap: 2rem;
    3. list-style: none;
    4. padding: 0;
    5. margin: 0;
    6. #加上背景
    7. background: hsl( var(--clr-white) / 0.05);
    8. #变模糊
    9. backdrop-filter: blur(1rem);
    10. }

    另一种方法:

    1. .primary-navigation {
    2. --underline-gap: 2rem;
    3. list-style: none;
    4. padding: 0;
    5. margin: 0;
    6. background: hsl( var(--clr-dark) / 0.95);
    7. /* backdrop-filter: blur(1.5rem); */
    8. }

     如果浏览器不支持:backdrop-filter: blur(1.5rem),可以用supports这个块。如果支持backdrop属性,就用backdrop属性,如果不支持,就用默认的

    1. @supports (backdrop-filter: blur(1rem)) {
    2. .primary-navigation {
    3. background: hsl( var(--clr-white) / 0..05);
    4. backdrop-filter: blur(1.5rem);
    5. }
    6. }

    How @supports Works | CSS-Tricks - CSS-Tricks

    overflow-x属性指定当块级元素在左右边缘溢出时,是否裁剪内容、添加滚动条或显示溢出内容。hidden指的是,溢出的地方就隐藏。

    1. body {
    2. font-family: var(--ff-sans-normal);
    3. font-size: var(--fs-400);
    4. color: hsl( var(--clr-white) );
    5. background-color: hsl( var(--clr-dark) );
    6. line-height: 1.5;
    7. min-height: 100vh;
    8. display: grid;
    9. grid-template-rows: min-content 1fr;
    10. #加上这一句
    11. overflow-x: hidden;
    12. }

    1. @media (max-width: 35rem) {
    2. .primary-navigation {
    3. --underline-gap: .5rem;
    4. position: fixed;
    5. z-index: 1000;
    6. inset: 0 0 0 30%;
    7. list-style: none;
    8. padding: min(20rem, 15vh) 2rem;
    9. margin: 0;
    10. flex-direction: column;
    11. #加上这一句,他就不见了,他的背景
    12. transform: translateX(100%);
    13. }

     移动到屏幕外面了 

    那么,怎么添加function呢?让我们点击button就能弹出来东西?

    首先需要添加js文件在html文件中,defer很重要,并行加载

    <script src="index.js" defer>script>

     需要添加data-visible= ‘False’,但是我没有找到这个..属性,感觉是自定义属性?反正查不到,但是可以实现的

    1. <button class="mobile-nav-toggle" aria-controls="primary-navigation"><span class="sr-only" aria-expanded="false">Menuspan>button>
    2. <nav>
    3. <ul id ="primary-navigation" data-visible = "false" class="primary-navigation underline-indicators flex">
    4. <li class="active"><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="index.html"><span>00span>Homea>
    5. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="destination.html"><span>01span>Destinationa>
    6. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="crew.html"><span>02span>Crewa>
    7. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="technology.html"><span>03span>Technologya>
    8. ul>
    9. nav>

     之后给它添加js文件,让他有个function。

    1. //when someone click humberger menu
    2. //寻找类
    3. const nav = document.querySelector(".primary-navigation");
    4. const navToggle = document.querySelector(".mobile-nav-toggle");
    5. if (navToggle){
    6. //监听click的动作
    7. navToggle.addEventListener("click", () => {
    8. const visiblity = nav.getAttribute("data-visible");
    9. if (visiblity === "false") {
    10. nav.setAttribute("data-visible", true);
    11. } else {
    12. nav.setAttribute("data-visible", false);
    13. }
    14. })}

    之后就可以动了。想让按钮平滑(有个animation的效果的话)

    可以在css文件中加上

    transition: transform 500ms ease-in-out;

    下一个效果,

     想将这个三条线的按钮,变成×。

    需要在html文件中设置aria-expanded和aira-controls

    1. <button class="mobile-nav-toggle" aria-controls="primary-navigation"><span class="sr-only" aria-expanded="false">Menuspan>button>
    2. <nav>
    3. <ul id ="primary-navigation" data-visible = "false" class="primary-navigation underline-indicators flex">
    4. <li class="active"><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="index.html"><span>00span>Homea>
    5. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="destination.html"><span>01span>Destinationa>
    6. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="crew.html"><span>02span>Crewa>
    7. <li><a class="ff-sans-cond uppercase text-white letter-spacing-2" href="technology.html"><span>03span>Technologya>
    8. ul>
    9. nav>

     之后设置属性,变换的时候将它变为true

    1. //when someone click humberger menu
    2. const nav = document.querySelector(".primary-navigation");
    3. const navToggle = document.querySelector(".mobile-nav-toggle");
    4. if (navToggle){
    5. navToggle.addEventListener("click", () => {
    6. const visiblity = nav.getAttribute("data-visible");
    7. if (visiblity === "false") {
    8. nav.setAttribute("data-visible", true);
    9. navToggle.setAttribute("aria-expanded",true);
    10. } else {
    11. nav.setAttribute("data-visible", false);
    12. navToggle.setAttribute("aria-expanded",false);
    13. }
    14. })}

     在css文件中,如果aria-expanded为true,那么换一下图片。

    1. .mobile-nav-toggle[aria-expanded="true"]{
    2. background-image: url("../assets/shared/icon-close.svg");
    3. }

     然后就实现了!这个是为了框出来选中的button

    :focus-visible - CSS: Cascading Style Sheets | MDN

    1. .mobile-nav-toggle:focus-visible {
    2. outline: 5px solid red;
    3. outline-offset: 5px;
    4. }

    medium screen size-如何制作横向的导航栏

    要求:导航栏有个磨砂背景。icon在左边,其余在右边。然后数字消失。

     原始图:

     将icon的位置调整

    1. .logo {
    2. margin: 1.5rem clamp(1.5rem, 5vw, 3.5rem);
    3. }

    使用clamp可以实现那种responsive的效果。它可以随着你的屏幕的变化,margin也进行变化

    clamp() - CSS: Cascading Style Sheets | MDN

    vw是Viewport's width的缩写形式,1vw永远等于当前视口宽度的百分之一。vw是一种视窗单位,也是相对单位。相对于视口的宽度,视口被均分为100单位的vw。

    css中vw是什么意思? - html中文网

     实现白色部分靠右边。 

     justify-content - CSS: Cascading Style Sheets | MDN

    align-items - CSS: Cascading Style Sheets | MDN

    1. .primary-header {
    2. justify-content: space-between;
    3. align-items: center;
    4. }

    设置padding并且让数字消失

    1. @media (min-width: 35em) and (max-width: 45em) {
    2. .primary-navigation {
    3. padding-inline: 3rem;
    4. }
    5. .primary-navigation a > span {
    6. display: none;
    7. }
    8. }

    效果:需要制作一个屏幕大于45rem的时候的导航栏 

     要求:需要加一条线,一条可以随着屏幕变化的线

    1. @media (min-width: 35em) {
    2. .primary-navigation {
    3. padding-inline: clamp(3rem, 7vw, 7rem);
    4. }
    5. }
    6. @media (min-width: 35em) and (max-width: 44.999em) {
    7. .primary-navigation a > span {
    8. display: none;
    9. }
    10. }
    11. @media (min-width: 45em) {
    12. .primary-header::after {
    13. content: '';
    14. display: block;
    15. position: relative;
    16. height: 1px;
    17. width: 100%;
    18. margin-right: -2.5rem;
    19. background: hsl( var(--clr-white) / .25);
    20. order: 1;
    21. }
    22. nav {
    23. order: 2;
    24. }
    25. .primary-navigation {
    26. margin-block: 2rem;
    27. }
    28. }

    order是什么意思:

    CSS属性设置在 flex 或 grid 容器中布置项目的顺序,让他放在第一个顺序

    order - CSS: Cascading Style Sheets | MDN

    Accessibly

    按tap键,会有动态的隐藏键出来。

    1. .skip-to-content {
    2. position: absolute;
    3. z-index: 9999;
    4. background: hsl( var(--clr-white) );
    5. color: hsl( var(--clr-dark) );
    6. padding: .5em 1em;
    7. margin-inline: auto;
    8. #y轴藏着
    9. transform: translateY(-100%);
    10. transition: transform 250ms ease-in;
    11. }
    12. .skip-to-content:focus {
    13. transform: translateY(0);
    14. }

  • 相关阅读:
    YOLOv8血细胞检测(6):多维协作注意模块MCA | 原创独家创新首发
    如何让文字变成语音?推荐三个免费把文字变成音频软件
    1.centos7安装docker
    Serverless实战 - 2分钟,教你用Serverless每天给女朋友自动发土味情话
    Java--静态字段与静态方法
    一种隐私保护边云协同训练
    Linux生成动态库
    stm32 HSUSB
    SkyEye卫星篇-国的加强“芯”
    将设计模式门面模式运用到生活当中
  • 原文地址:https://blog.csdn.net/weixin_42173016/article/details/128029432