zoukankan      html  css  js  c++  java
  • CSS滑动门

    感谢原文作者:Rocin
    原文链接:https://www.cnblogs.com/allen2333/p/9027482.html

    概念

    1.1 为了使各种特殊形状的背景能够自适应元素中文本内容的多少,出现了CSS滑动门技术。
    1.2 使各种特殊形状的背景能够自由拉伸滑动,以适应元素内部的文本内容,可用性更强。
    1.3 最常见于各种导航栏的滑动门。
    在这里插入图片描述

    原理

    2.1 利用CSS精灵Sprite(主要是背景位置position)和盒子padding撑开宽度, 以便能适应不同字数的导航栏。
    2.2 原背景图–> 切开左边 --> 剩下的右边随着文字的增多从左往右滑动(这也是文字增长的方向)
    在这里插入图片描述
    在这里插入图片描述

    具体做法

    核心技术:利用css精灵(主要是背景位置)和盒子padding撑开宽度,以便能适应不用字数的导航栏。
    1. 使用a设置背景左侧,并用padding-left撑开合适的宽度
    2. span设置背景右侧,padding-right撑开合适的宽度,最好和上面的padding-left设置为同一个值,以实现文字左右居中的效果。
    3. 使用a标签包含span就是因为整个导航都是可以点击的。

    HTML

    
    ...
    <li>
      <a href="#">
        <span>导航栏内容</span>
      </a>
    </li>
    ...
    

    示例

    to.png
    在这里插入图片描述
    ao.png
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            body {
                background: url(images/wx.jpg) repeat-x;
            }
    
            .nav li {
                float: left;
                list-style: none;
            }
    
            .nav a {
                /*1. a 左边放 左圆角   但是文字需要往右走 15px*/
                height: 33px;
                line-height: 33px;
                color: #fff;
                text-decoration: none;
                background: url(images/to.png) no-repeat left;
                display: inline-block;
                padding-left: 15px;
            }
    
            .nav span {
                /* 2. span 右边放右圆角 但是文字需要往左走 15px,*/
                background: url(images/to.png) no-repeat right;
                display: inline-block;
                height: 33px;
                padding-right: 15px;
    
            }
    
            /*       凹下去, 第一个为左边,第二个为右边*/
    
            .nav a:hover,
            .nav a:hover span {
                background-image: url(images/ao.png);
            }
        </style>
    </head>
    
    <body>
        <ul class="nav">
            <li>
                <a href="#">
                    <span>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span>
    		      </a>
            </li>
            <li>
                <a href="#">
    		      		<span>第二个页面</span>
    		      </a>
            </li>
            <li>
                <a href="#">
    		      		<span>第三个页面</span>
    		      </a>
            </li>
    
        </ul>
    </body>
    </html>
    

    在这里插入图片描述
    注意:微信导航栏有特殊形状的背景:有凸起和凹下去的感觉。微信导航栏使用滑动门技术自适应文字,使很长的文字都能有相同的背景(其实是有限制的,取决于背景图片的右侧长度)

    补充(根据大佬做出的简单示例)

    nav_item_bg.png
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="zh-cn">
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<style type="text/css">
    			*{padding: 0;margin: 0;}
    			
    			/*居一下先*/
    			.container{position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);}
    			.nav{background-color: #000;border-radius: 10px;padding: 5px 10px;}
    			/*省的左浮动了*/
    			.nav li{display: inline-block;list-style: none;}
    			
    			.nav a{display: inline-block;text-decoration: none;color: #FFF;font-weight: bold;background-position: left center;background-repeat: no-repeat;padding-left: 10px;white-space: nowrap;}
    			.nav span{display: inline-block;height: 40px;line-height: 40px;background-position: right center;background-repeat: no-repeat;padding-right: 10px;}
    			/*并集选择器妙用*/
    			.nav a:hover,.nav a:hover span{background-image: url(img/nav_item_bg.png);}
    			/*响应式,为防止li换行*/
    			@media (max-width:730px) {
    				.nav{width: 363px;}
    				
    			}
    		</style>
    	</head>
    	<body>
    		<div class="container">
    			<ul class="nav">
    				<li><a href="#"><span>首页</span></a></li>
    				<li><a href="#"><span>大帅哥</span></a></li>
    				<li><a href="#"><span>大帅哥</span></a></li>
    				<li><a href="#"><span>大帅哥</span></a></li>
    				<li><a href="#"><span>大帅哥</span></a></li>
    				
    			</ul>
    			
    		</div>
    	</body>
    </html>
    

    效果
    在这里插入图片描述

    我的简单理解

    就是父子小元素都设置设置长背景,然后父元素设置背景一边,子元素设置背景另一边,这样就算子元素的内容增加了,只要不超过背景图片的长度,就一直像是自适应一样。

    参考
    https://www.jianshu.com/p/081cc391c430

  • 相关阅读:
    100以内质数的算法
    WebAPI和WebService的区别
    .net core 2.0 数据访问-迁移
    .net core 2.0 Redis的基本使用
    .net core 2.0 Autofac
    net core 2.0 + Autofac的坑
    MVC路由机制
    MVC原理
    CentOS安装GIt、上传项目到git仓库
    ARM 汇编指令集 特点5:ARM 多级指令流水线
  • 原文地址:https://www.cnblogs.com/tfxz/p/12701695.html
Copyright © 2011-2022 走看看