css伪元素::after与::before的应用


首先附上案例代码(小米版心导航栏)

<style>
      body{
        background: #cccccc;
      }
      .container {
        width: 1226px;
        margin: 0 auto;
      }
      .header {
        background-color: #fff;
        height: 100px;
        position: relative;
      }
      .header-logo,
      .header-nav {
        float: left;
      }
      .header-search {
        float: right;
      }
      .header-logo a {
        display: inline-block;
        margin-top: 23px;
        height: 55px;
      }
      .logo {
        background-color: #ff6700;
        width: 55px;
        position: absolute;
        top: 0;
        left: 0;
        overflow: hidden;
      }
      .logo::before,
      .logo::after {
        content: "";
        position: absolute;
        width: 55px;
        height: 55px;
        background: url(./img/mi-logo.png) no-repeat center center;
        transition: left 0.2s;
      }
      .logo::before {
        left: -55px;
        top: 0;
        background-image: url(./img/mi-home.png);
      }
      .logo::after {
        left: 0;
        top: 0;
      }
      .logo:hover::before {
        left: 0;
      }
      .logo:hover::after {
        left: 55px;
      }
      .logo-gif {
        position: absolute;
        left: 62px;
      }
      .header-nav {
        height: 88px;
        position: absolute;
        left: 220px;
        padding: 12px 0 0 30px;
        line-height: 88px;
        font-size: 16px;
      }
      .nav-list .nav-items {
        float: left;
        margin-right: 20px;
      }
      .nav-list .nav-items a{
        color: #000000;
      }
      .nav-items:hover  a{
        color: #ff6700;
      }
      .header-search{
        height: 50px;
      }
      .header-search .btn-text{
        position: absolute;
        top: 25px;
        right:52px;
        width: 225px;
        height: 50px;
        padding: 0 10px;
        /* border: 1px solid #e0e0e0; */
        outline: 0;
        -webkit-transition: all .2s;
        transition: all .2s;
        
        /* width: 225px;
        height: 46px;
        margin: 30px auto;
        padding: 0 10px;
        margin-right: 52px; */
      }
     .btn-submit{
      position: absolute;
      right: 0;
      top:25px;
      width: 52px;
      height: 54px;
      padding: 1px 6px;
     }
    </style>

html代码如下

 <body>
    <div class="container header">
      <div class="header-logo">
        <a class="logo" href=""></a>
        <a class="logo-gif" href="">
          <img src="./img/logo.gif" alt="" />
        </a>
      </div>
      <div class="header-nav">
        <ul class="nav-list">
          <li class="nav-items">
            <a href="">小米手机</a>
          </li>

          <li class="nav-items">
            <a href="">Redmi 红米</a>
          </li>

          <li class="nav-items">
            <a href="">电视</a>
          </li>

          <li class="nav-items">
            <a href="">笔记本</a>
          </li>

          <li class="nav-items">
            <a href="">家电</a>
          </li>

          <li class="nav-items">
            <a href="">路由器</a>
          </li>

          <li class="nav-items">
            <a href="">智能硬件</a>
          </li>

          <li class="nav-items">
            <a href="">服务</a>
          </li>

          <li class="nav-items">
            <a href="">社区</a>
          </li>
        </ul>
      </div>
      <div class="header-search">
        <form action="">
          <input class="btn-text" type="text">
          <input class="btn-submit" type="submit">
        </form>
      </div>
    </div>
  </body>

个人总结


本案例中,中心思想,在不向文档流中增加新元素的同时,解决logo图片的动画移动效果.

  • 1.首先,不增加新元素的解决方法用到了after与before两个伪元素
  • 2.解决logo图片的动画,用的一个解决方法,定位,首先将默认显示图上显示,鼠标放在默认显示图上才显示出来的图利用绝对定位left定成负值,在hover效果中将2图left归零即可。
                                                        2020-6-2案例解决

声明:Zhuzm'Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - css伪元素::after与::before的应用


你好世界!