【问题标题】:CSS, Text-Decoration: OverlineCSS,文本装饰:上划线
【发布时间】:2014-02-12 04:21:06
【问题描述】:

我正在尝试使用 css 创建悬停效果。到目前为止我所拥有的如下。这是我遇到的问题,过线直接出现在文本上方。我希望它们有一些空间。这是我的网站:http://baycity2014.weebly.com,这是我想要的效果:http://www.hartlevin.com。有什么建议吗?

CSS:

#nav-wrap .container {
    clear: both;
    overflow: hidden;
    position: relative;
}

#nav-wrap .container {
    /*background:url(nav-bg-medium.jpg) repeat-x top;*/
    /*height:45px;*/
}

#nav-wrap .container ul {
    list-style: none;
}

#nav-wrap .container ul li {
    list-style: none;
    float: left;
    /* background:url(nav-saperator-medium.jpg) no-repeat right;*/
    padding-right:2px;
}

#nav-wrap .container ul > li:first-child a,
#nav-wrap .container ul > li:first-child a:hover,
#nav-wrap .container ul span:first-child li a,
#nav-wrap .container ul span:first-child li a:hover{
    border-radius:5px 0px 0px 5px;
}

#nav-wrap .container ul li a {
    float: left;
    display: block;
    font-family: 'Helvetica', san-serif;
    color: #000;
    padding: 0px 30px;
    border: 0px solid;
    outline: 0;
    list-style-type: none;
    font-size: 16px;
    line-height:45px;
    /*text-shadow: 0px -1px 0px #333333;*/
}

#nav-wrap .container ul li:hover {
    /*background:url(nav-saperator-hover-medium.jpg) no-repeat right;*/
}

#nav-wrap .container ul li a:hover {
    /*background:url(nav-bg-hover-medium.jpg) repeat-x top ;*/
    color: #145D85;
    text-decoration:overline;
}

HTML:

    <div id="left_content_nav">
    <ul class='wsite-menu-default'>
        <li id='active'><a href='/'>Home</a>

        </li>
        <li id='pg886612977153583720'><a href='/about.html'>About</a>

            <div class='wsite-menu-wrap' style='display:none'>
                <ul class='wsite-menu'>
                    <li id='wsite-nav-226730044254468285'><a href='/blog.html'><span class='wsite-menu-title'>Blog</span></a>

                    </li>
                </ul>
            </div>
        </li>
        <li id='pg336904325932674008'><a href='/practice-areas.html'>Practice Areas</a>

        </li>
        <li id='pg342722679661255807'><a href='/press.html'>Press</a>

        </li>
        <li id='pg204649403653981064'><a href='/contact.html'>Contact</a>

        </li>
    </ul>
</div>

【问题讨论】:

    标签: html css


    【解决方案1】:

    您应该使用border-top 而不是overline,并使用一些padding-top 来填充字符串和顶部上划线之间的间距。

    请注意,我正在使用 border-top: 4px solid transparent;,它只是一个 transparent border 来保留空间,因为如果您不使用它,您的菜单项将在 :hover 上抖动,因为 CSS 默认框模型计数border 在元素外部而不是内部,这将导致元素轻推..

    Demo

    HTML

    <ul>
        <li><a href="#">Hello</a></li>
        <li><a href="#">World</a></li>
    </ul>
    

    CSS

    ul {
        margin: 40px;
    }
    
    ul li {
        display: inline-block;
        padding-top: 5px;
        margin-right: 10px;
        border-top: 4px solid transparent;
    }
    
    ul li:hover {
        border-top: 4px solid #f00;
    }
    

    使用:before:after 伪控制width,HTML 保持如上..

    Demo 2

    CSS

    ul {
        margin: 40px;
    }
    
    ul li {
        display: inline-block;
        padding-top: 8px;
        margin-right: 10px;
        position: relative;
    }
    
    ul li:after {
        position: absolute;
        width: 90%;
        content: "";
        top: 0;
        left: 50%;
        margin-left: -45%;
    }
    
    ul li:hover:after {
        border-top: 4px solid #f00;
    }
    

    【讨论】:

    • 您好,如果我使用border-top,我可以设置border-top 的长度,使边框与它悬停的单词大小相同吗?那有意义吗?一开始我尝试了border-top,但是over line比word大。这就是为什么我改用超线的原因。总之,如果我使用border-top,我可以控制线条的大小吗?
    • @user3117275 您必须针对li 而不是a 元素...您也可以使用:before:after 伪进行控制
    • 尝试使用 display:block 到您的锚链接 以便它接管其父宽度。您的 宽度应与
    • 宽度相同,因此边框与其悬停的单词大小相同。
    【解决方案2】:

    他们使用边框顶部而不是上划线。请改一下

    #nav-wrap .container ul li a:hover {
       /*background:url(nav-bg-hover-medium.jpg) repeat-x top ;*/
       color: #145D85;
       text-decoration:overline;
    }
    

    进入这个

    #nav-wrap .container ul li a {
       border-top:2px solid transparent;
    }
    #nav-wrap .container ul li a:hover {
       color: #145D85;
       border-top:2px solid #145D85;
    }
    

    【讨论】:

      【解决方案3】:
      <ul> 
          <li> <a href="#"> Item 1 </a> </li>
          <li> <a href="#"> Item 2 </a> </li>
          <li> <a href="#"> Item 3 </a>
          <ul>
              <li> <a href="#"> Sub Item 1 </a> </li>
              <li> <a href="#"> sub Item 1 </a> </li>
              </ul>
          </li>
      </ul>
      

      CSS

      body
      {
          background:grey;
      }
      ul li ul
      {
          display:none;
      }
      
      ul
      {
          list-style-type:none;
      }
      
      ul li
      {
          float:left;
          width:130px;
          margin:0px;
          padding:10px;
          background-color:#003366;
          text-align:center;
         }
      ul li a{
          color:white;
          text-decoration:none;
      }
      
      ul li:hover
      {
          border-top:4px solid white;
          margin-top:-4px;
      }
      ul li:hover ul
      {
          display:block;
         margin-left:-50px;
          margin-top:10px;
      }
      ul li ul li
      {
         background-color:#ffffff;
          height:100%;
          padding:10px;
      }
      ul li ul li a
      {
          color:#003366;
      
      }
      

      fiddle

      输出:

      【讨论】:

        【解决方案4】:

        您可以将菜单放在&lt;span&gt;&lt;/span&gt; 中并为该范围设置border-top。

        【讨论】:

          猜你喜欢
          相关资源
          最近更新 更多
          热门标签