【问题标题】:how to round off the tabs above and below the current tab in the nav bar, also shadow the nav bar except the current tab如何在导航栏中舍入当前选项卡上方和下方的选项卡,除了当前选项卡之外,还隐藏导航栏
【发布时间】:2021-11-05 15:21:33
【问题描述】:

我之前从未问过 css 问题,所以提前道歉。

这是我的导航栏目前的样子

full sized image here

我真正想要实现的两件事:

  1. 当前选项卡正上方和下方的圆形选项卡
    (在这张图片中是建议关于我们
  2. 在除当前选项卡之外的右侧隐藏导航栏

(顺便说一句,我正在使用 jinja2。由于当前选项卡不固定,因此无法对角进行硬编码)

我不知道 1。但我尝试了 2。这是不满意的结果:

想摆脱突兀的角落

这是我当前的样式表

:root {
    /* colour palette */
    --cream : hsl(40, 100%, 96%);
    --cream-light:hsl(40, 100%, 98%);
    --coffee: hsl(40,  14%, 62%);
    --purple: hsl(258, 14%, 62%);
    --dark  : hsl(109,  7%, 33%);
    --green : hsl(128, 30%, 42%);
    --green2: hsl(140, 15%, 55%);
    --green2-dark: hsl(140, 11%, 36%);

    /*  */
    --shadow-in: inset 1px .15rem .3rem -.1rem rgba(50, 50, 93, 0.25), inset 1px .1rem .2rem -.1rem rgba(0, 0, 0, 0.3), inset -1px -1px .3rem -.1rem rgba(50, 50, 93, 0.25), inset -1px -1px .2rem -.1rem rgba(0, 0, 0, 0.3);
    --shadow-nav: .3rem 0 .6rem -.2rem rgba(50, 50, 93, 0.25), .2rem 0 .4rem -.2rem rgba(0, 0, 0, 0.3);
    --shadow-current: inset .3rem .3rem .6rem -.2rem rgba(50, 50, 93, 0.25), inset .2rem .2rem .4rem -.2rem rgba(0, 0, 0, 0.3);
    --shadow-hover: inset 1px .3rem .6rem -.2rem rgba(50, 50, 93, 0.25), inset 1px .2rem .4rem -.2rem rgba(0, 0, 0, 0.3), inset -1px -1px .6rem -.2rem rgba(50, 50, 93, 0.25), inset -1px -1px .4rem -.2rem rgba(0, 0, 0, 0.3);

    /* themes */
    --nav-bg   : var(--green2-dark);
    --nav-text : white;
    --nav-hover: hsl(140, 11%, 27%);
    --main     : var(--cream );
    --text     : var(--dark  );
    --highlight: var(--green);
    --card     : var(--cream-light);
}
html, body {
    margin: 0;
    font-size: 1.5vw;
    background: var(--nav-bg);
    transition: all .5s ease;
}
a {
    color: var(--text);
    text-decoration: none;
}
a:hover {
    color: var(--green);
}
nav {
    position: fixed;
    top: 0;
    left: 0;
    width: 18%;
    height: 100vh;
    /*box-shadow: var(--shadow-nav);*/
    /*box-shadow: .3rem 0 .6rem rgba(50, 93, 50, 0.25), .2rem 0 .4rem rgba(0, 0, 0, 0.3);*/
    background: var(--nav-bg);
}
nav h2 {
    margin: 0;
    padding: 10%;
    padding-right: 0 !important;
    height: 1.8rem;

    background: var(--nav-bg);
    color: var(--nav-text);
    transition: margin .5s, padding .5s, border .5s, background .5s, color .3s;
}
/*nav div.current {
    width: 100%;
    padding-right: .9rem;
    background: linear-gradient(90deg, hsl(140, 11%, 36%) 50%, hsl(40, 100%, 96%) 50%);
}
nav div.current:hover {
    padding-right: 0;
}*/
nav h2.current {
    margin-left: 5%;
    padding-left: 5%;
    border-radius: .5rem 0 0 .5rem;
    box-shadow: var(--shadow-current);
    background: var(--main);
    color: var(--text);
}
nav h2:hover {
    margin: 0;
    padding: 10%;
    padding-left: 15%;
    border-radius: 0;
    box-shadow: var(--shadow-hover);
    background: var(--nav-hover);
    color: var(--nav-text);
}
main {
    padding-left: 22.5%;
    padding-right: 7.5%;
    min-height: 100vh;

    background: var(--main);
    color: var(--text);

    display: flex;
    flex-direction: column;
}
main h1 {
    color: var(--green2);
}
footer {
    margin-top: auto;
    margin-bottom: .35rem;
    padding: .25rem;
    padding-right: 2.5rem;
    border-radius: .25rem;

    font: .5rem sans-serif;
    text-align: right;

    background: hsl(40, 39%, 90%);
    box-shadow: var(--shadow-in);
}

这是 layout.html

<!DOCTYPE html>
<html lang='en'>
<head>
    <title>Library</title>
    <meta charset='UTF-8'>
</head>
<body>
    <nav>
        {% include 'navigation.html' %}
    </nav>
    <main>
        {% block main %} {% endblock %}
        <footer>Copyright 2021 mightbesimon | github.com/mightbesimon</footer>
    </main>
</body>
</html>

这是navigation.html

{% for url, name in (('/'           , 'Home'         ),
                     ('/register'   , 'Register'     ),
                     ('/login'      , 'Login'        ),
                     ('/suggestions', 'Suggestions'  ),
                     ('/catalogue'  , 'Our Catalogue'),
                     ('/aboutus'    , 'About Us'     ),
                     ('/contact'    , 'Contact'      ),
) %}
    <a href="{{ url }}">
        <!-- <div {% if url_for(request.endpoint, **request.view_args)==url %} class="current" {% endif %}> -->
            <h2 {% if url_for(request.endpoint, **request.view_args)==url %} class="current" {% endif %}>
                {{ name }}
            </h2>
        <!-- </div> -->
    </a>
{% endfor %}

【问题讨论】:

    标签: css jinja2 nav border-radius


    【解决方案1】:

    你可以试试

    • drop-shadow()(但它适用于任何半透明边缘 => 不幸的是文本)通过 filter 绘制阴影。
    • box-shadow.current 绘制导航background
    • overflow:hiddennav 上以避免阴影在main 上流血
    • position: relative 用于 h2 保持在阴影顶部 & static 用于.current

    这是可能的更新的想法

    :root {
      /* colour palette */
      --cream: hsl(40, 100%, 96%);
      --cream-light: hsl(40, 100%, 98%);
      --coffee: hsl(40, 14%, 62%);
      --purple: hsl(258, 14%, 62%);
      --dark: hsl(109, 7%, 33%);
      --green: hsl(128, 30%, 42%);
      --green2: hsl(140, 15%, 55%);
      --green2-dark: hsl(140, 11%, 36%);
    
      /*  */
      --shadow-in: inset 1px 0.15rem 0.3rem -0.1rem rgba(50, 50, 93, 0.25),
        inset 1px 0.1rem 0.2rem -0.1rem rgba(0, 0, 0, 0.3),
        inset -1px -1px 0.3rem -0.1rem rgba(50, 50, 93, 0.25),
        inset -1px -1px 0.2rem -0.1rem rgba(0, 0, 0, 0.3);
      --shadow-nav: 0.3rem 0 0.6rem -0.2rem rgba(50, 50, 93, 0.25),
        0.2rem 0 0.4rem -0.2rem rgba(0, 0, 0, 0.3);
      --shadow-current: inset 0.3rem 0.3rem 0.6rem -0.2rem rgba(50, 50, 93, 0.25),
        inset 0.2rem 0.2rem 0.4rem -0.2rem rgba(0, 0, 0, 0.3);
      --shadow-hover: inset 1px 0.3rem 0.6rem -0.2rem rgba(50, 50, 93, 0.25),
        inset 1px 0.2rem 0.4rem -0.2rem rgba(0, 0, 0, 0.3),
        inset -1px -1px 0.6rem -0.2rem rgba(50, 50, 93, 0.25),
        inset -1px -1px 0.4rem -0.2rem rgba(0, 0, 0, 0.3);
    
      /* themes */
      --nav-bg: var(--green2-dark);
      --nav-text: white;
      --nav-hover: hsl(140, 11%, 27%);
      --main: var(--cream);
      --text: var(--dark);
      --highlight: var(--green);
      --card: var(--cream-light);
    }
    html,
    body {
      margin: 0;
      font-size: 1.5vw;
      background: var(--nav-bg);
      transition: all 0.5s ease;
    }
    a {
      color: var(--text);
      text-decoration: none;
    }
    a:hover {
      color: var(--green);
    }
    nav {
      position: fixed;
      top: -1rem;
      bottom: -1rem;
      left: 0;
      width: 18%;
      padding: 1rem 0;
      min-height:100vh;
      overflow: hidden;
      filter: drop-shadow(0.3rem 0.3rem 0.6rem);
      
    }
    nav h2 {
      margin: 0;
      padding: 10%;
      padding-right: 0 !important;
      height: 1.8rem;
      transition: margin 0.5s, padding 0.5s, border 0.5s, background 0.5s,
        color 0.3s;
      position: relative;
      color: var(--nav-text);
    }
    
    nav h2.current:hover {
      box-shadow: var(--shadow-hover), 0 0 0 100vw var(--nav-bg);
    }
    nav h2.current {
      margin-left: 5%;
      padding-left: 5%;
      border-radius: 0.5rem 0 0 0.5rem;
      box-shadow: 0 0 0 100vmax var(--nav-bg);
      color: var(--text);
      position: static;
    }
    nav h2:hover {
      margin: 0;
      padding: 10%;
      padding-left: 15%;
      border-radius: 0;
      box-shadow: var(--shadow-hover);
      background: var(--nav-hover);
      color: var(--nav-text);
    }
    main {
      padding-left: 22.5%;
      padding-right: 7.5%;
      min-height: 100vh;
      background: var(--main);
      color: var(--text);
      display: flex;
      flex-direction: column;
    }
    main h1 {
      color: var(--green2);
    }
    footer {
      margin-top: auto;
      margin-bottom: 0.35rem;
      padding: 0.25rem;
      padding-right: 2.5rem;
      border-radius: 0.25rem;
      font: 0.5rem sans-serif;
      text-align: right;
      background: hsl(40, 39%, 90%);
      box-shadow: var(--shadow-in);
    }
    

    https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/drop-shadow()

    注意:这个函数有点类似于box-shadow 属性。 box-shadow 属性在元素的整个框后面创建一个矩形阴影,而 drop-shadow() 过滤器函数创建一个符合图像本身形状(alpha 通道)的阴影。

    【讨论】:

    • 谢谢@G-Cyrillus :) 由于几周内没有其他人提供答案,因此我接受您的答案作为迄今为止最好和唯一的解决方案。干杯
    猜你喜欢
    • 1970-01-01
    • 2016-03-28
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多