美文网首页
HTML & CSS - 进阶

HTML & CSS - 进阶

作者: 壞忎 | 来源:发表于2019-10-12 09:47 被阅读0次

    注意:以下前缀兼容性写法注释
    -o-:Opera
    -ms://IE10
    -moz://火狐
    -webkit://Safari 4-5, Chrome 1-9
    行内元素有: head meta title lable span br a style em b i strong
    块级元素有: body from select textarea h1-h6 html table button hr p ol ul dl cnter div
    行内块元素常见的有: img input td

    给图片设置
    img {
    max-width: 100%;
    max-height: 100%;
    } 可以让图片的大小自适应本身

    clear: both 清除浮动
    box-sizing: border-box; 元素将会有边框
    user-select: none; ==> 禁止选中文本
    -webkit-transform: translateZ(0); ==> 开启硬件加速
    -webkit-backface-visibility: hidden; ==> 去除动画加载闪烁
    outline: none; ==> 可以去除浏览器的框
    设置绝对定位的时候,可以把left和right设置为0;这样就可以使用margin: auto;来居中

    div * {pointer-events: none;} ==> 禁止点击事件/鼠标事件“穿透”, 都将不能使用
    .main{-webkit-overflow-scrolling: touch;} ==> 移动端滚动顺滑
    zoom: 2; ==> 可以放大和缩小元素
    <progress value="22" max="100"></progress> ==> 进度条

    在javascript中,可以通过window.devicePixelRatio获取到当前设备的dpr。
    物理像素 css像素
    设备独立像素 计算机中的点
    设备像素比 = 物理像素 / 设备独立像素;
    位图像素 一个位图像素是栅格图像(如:png, jpg, gif等)最小的数据单元。每一个位图像素都包含着一些自身的显示信息(如:显示位置,颜色值,透明度等)。


    浏览器的本地存储功能:

    localStorage: 一直存在
    sessionStorage: 本页面不销毁的话一直存在


    小技巧

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <meta http-equiv="Cache-Control" content="no-siteapp" />  <!-- 禁止百度转码 -->
        <meta name="apple-mobile-web-app-capable" content="yes" /> <!-- 是否启用 WebApp 全屏模式 -->
    </head>
    <body></body>
    </html>
    
    <meta name="viewport" content="user-scalable=no"> 禁止缩放
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /><meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <meta name="format-detection"content="telephone=no, email=no" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /><meta name="apple-mobile-web-app-capable" content="yes" /><!-- 删除苹果默认的工具栏和菜单栏 -->
    <meta name="apple-mobile-web-app-status-bar-style" content="black" /><!-- 设置苹果工具栏颜色 -->
    <meta name="format-detection" content="telphone=no, email=no" /><!-- 忽略页面中的数字识别为电话,忽略email识别 --><!-- 启用360浏览器的极速模式(webkit) -->
    <meta name="renderer" content="webkit"><!-- 避免IE使用兼容模式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- 针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓 -->
    <meta name="HandheldFriendly" content="true"><!-- 微软的老式浏览器 -->
    <meta name="MobileOptimized" content="320"><!-- uc强制竖屏 --><meta name="screen-orientation" content="portrait"><!-- QQ强制竖屏 -->
    <meta name="x5-orientation" content="portrait"><!-- UC强制全屏 -->
    <meta name="full-screen" content="yes"><!-- QQ强制全屏 -->
    <meta name="x5-fullscreen" content="true"><!-- UC应用模式 -->
    <meta name="browsermode" content="application"><!-- QQ应用模式 -->
    <meta name="x5-page-mode" content="app"><!-- windows phone 点击无高光 -->
    <meta name="msapplication-tap-highlight" content="no"><!-- 适应移动端end -->
    

    元素水平排列方法
     //==>  float: left;
     //==>  display: flex;
     //==>  display: inline;
     //==>  position: relative;
    
    

    - 图片代替文字
    使用图片代替文字的做法:  使用a标签,背景图片使用css添加
     ·1 图片和文字都要有,然后图片代替文字之后隐藏文字  设置文字的首行缩进为盒子宽度,到外面,然后隐藏
     ·2 设置容器的高度为0 然后设置内部上边距为图片的高度
    
    

     单行文本溢出问题
        white-space:nowrap;  文本禁止换行
        Overflow:hidden;  超出范围剪切
        Text-overflow:ellipsis
    多行文本溢出问题
    .box{
        width: 100%;
        overflow: hidden;
        display: -webkit-box;   //将对象作为弹性伸缩盒子模型显示  *必须结合的属性*
        -webkit-box-orient: vertical;   //设置伸缩盒对象的子元素的排列方式  *必须结合的属性*
        -webkit-line-clamp: 3;   //用来限制在一个块元素中显示的文本的行数
        word-break: break-all;   //让浏览器实现在任意位置的换行 *break-all为允许在单词内换行*
    }
    
    

    移除浏览器默认的样式 : 
    input, button, textarea, select {
            *font-size: 100%;
            -webkit-appearance:none;
    }
    
    

    边距塌陷:
     //==> 给父盒子添加border border: 1px solid transparent;
     //==> 父盒子添加  overflow: hidden;
     //==> 设置padding值
     //==> 添加 position: flxed;
     //==> 添加 display: table;
     //==> 在子元素前面添加空元素  .son::before { content:""; overflow:hidden; }
     
    

    手写表格中的内容随着表格的宽度变细自动换行增加行高: 使用display: table; display : table-cell;
    

     控制图片缩放比例的方法: 使用padding-top百分比:
     .容器 {
        padding: 15.15% 0 0;
        position: relative;
    }
    .容器 > img {
        position: absolute;
        width: 100%; height: 100%;
        left: 0; top: 0;
    }
    
    
    // 设置一个盒子等比例缩放的方法
    内下边距如果是宽度的二倍,高就是宽度的二倍
    {
        width 50%;
        height: 0;
        padding-bottom: 50%;
    
    

    一个盒子上下左右居中:
      已知宽度: ==>>
       .box {
                width: 100px;
                height: 100px;
                background-color: #eee;
                position: absolute;
                left: 0;
                top: 0;
                right: 0;
                bottom: 0;
                margin: auto;
            }
       .box {
                width: 100px;
                height: 100px;
                background-color: #eee;
                position: absolute;
                top: 50%;
                left: 50%;
                margin-top: -50px;
                margin-left: -50px;
            }
      未知宽度: ==>>
       .box {
                background-color: #eee;
                position: absolute;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
            }
       
      -- 使用弹性布局
            
    

       文字竖着排列
          p {
                height: 210px;
                line-height: 30px;
                text-align: justify;
                writing-mode: vertical-lr;  左-右
                writing-mode: tb-lr;   IE 左-右
                writing-mode: vertical-rl;  右-左
                writing-mode: tb-rl;  IE 右-左
            }
    

      点击打开QQ进行聊天
    <a href="http://wpa.qq.com/msgrd?v=3&amp;uin=QQ号&amp;site=qq&amp;menu=yes" target="_self"><img border="0" src="http://wpa.qq.com/pa?p=2:qq号:51" title="在线客服" /></a>
    
    
    <a href="tencent://message/?uin=2402475176&amp;Site=Sambow&amp;Menu=yes">80080088</a>
    

    div{
        //把div元素中的文本划分为4列
               -moz-columns: 4;
            -webkit-columns: 4;
                    columns: 4;
        //将div元素中的文本分为三列,并列间30px的间隔
            -moz-column-gap: 30px;
         -webkit-column-gap: 30px;
                 column-gap: 30px;
        //规定列之间的宽度、样式和颜色
           -moz-column-rule: 1px outset #fff;
        -webkit-column-rule: 1px outset #fff;
                column-rule: 1px outset #fff;
    }
    

        实现页面中左边盒子宽度固定, 右边盒子宽度撑开, 全部高度自适应
        
        一个盒子设置 display: table;
        剩下的两个盒子: display: table-cell;
        固定宽的盒子设置宽度就可以
        
        实现页面中左边盒子宽度固定,高度随内容变化, 右边盒子自适应
         左边盒子设置宽度和向左浮动,右边盒子margin-left: 左边盒子宽度
    

        让一个盒子上下撑满的方法:  设置一个盒子绝对定位,然后上下左右填写距离就会自动撑开
        -   position: absolute;
           top : 0;
           bottom : 0;
           
       -    .box {
                position: absolute;
                height: 100%;
                width: 100%;
             }
       -    设置html 和 body: height: 100%;
    

        高级滚动视觉差效果:
         <div class="demo">
            <div class="box">
                <div class="p">最前方主体内容</div>
                <div class="i">后排滚动</div>
                <div class="i"></div>
                <div class="i"></div>
                <div class="i"></div>
            </div>
        </div>
        
        首先给最大的滚动添加: perspective: 1px;  overflow: scroll;
        真正要滚动的部分添加: transform-style: preserve-3d;  position: relative;
        主体滚动添加: position: absolute;
                   left: 50%;
                   transform: translate3D(-50%, -120px, -1px) scale(2);
        其他辅助内容自行添加
    

        创建一个打点动画: 
        .loading::after {
                display: inline-table;
                content: "...";
                animation: spin4 2s infinite step-start;
                }
                
            @keyframes spin4 {
                33% {
                    content: '.';
                }
    
                66% {
                    content: '..';
                }
            }
    

        创建一个背景滚动变换
        .box {
                width: 100%;
                height: 200px;
                background: linear-gradient(to right, red, orange, yellow, green, cyan, blue, purple);
                animation: hue 6s linear infinite;
            }
    
            @keyframes hue {
                from {
                    filter: hue-rotate(0deg);
                }
    
                to {
                    filter: hue-rotate(360deg);
                }
            }
            
      文字背景颜色渐变
        .box {
                width: 100px;
                height: 100px;
                background: linear-gradient(to right, red, blue, yellow);
                -webkit-background-clip: text;
                color: transparent;
            }
    

    好玩儿的:
        控制台返回一个键盘图形:// 用字符串返回一个键盘图形
    (_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+'    ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
    `)()
    
    

    画布

    ···创建一个画布Canvas···
    http://www.runoob.com/tags/ref-canvas.html

    <canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"> </canvas>

                一个简单的画布,需要用这个框架,具体的实现必须使用脚本编写  js
    

    var c=document.getElementById("myCanvas");------找到canvas元素
    var ctx=c.getContext("2d"); -------创建对象
    ctx.fillStyle="#FF0000";-----设置fillStyle属性可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000(黑色)。
    ctx.fillRect(0,0,150,75);-----fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。
    ctx.shadowBlur=20; 值的大小代表阴影大小
    ctx.shadowColor="black”; 创建阴影-颜色
    ctx.shadowOffsetX=20; 水平方向的距离
    ctx.shadowOffsetY=20; 垂直方向的距离
    ctx.fillStyle="red";
    ctx.fillRect(20,20,100,80);创建最基本的样式 起始坐标和长宽
    ctx.strokeStyle="#FF0000”; 创建轮廓颜色

    ctx.strokeRect(20,20,150,100); 创建一个框框

    =================================================================================
    Canvas 线条
    在Canvas上画线,我们将使用以下两种方法:
    moveTo(x,y) 定义线条开始坐标
    lineTo(x,y) 定义线条结束坐标
    绘制线条我们必须使用到 "ink" 的方法,就像stroke().
    创建一个线条:
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    ctx.beginPath();-----开始
    ctx.lineWidth=5;——线条的宽度
    ctx.lineCap="butt”;——线条的样式
    ctx.lineCap="round”; 圆帽子
    ctx.lineCap="square”; 直线
    ctx.moveTo(20,20);———线条开始的坐标
    ctx.lineTo(200,20);———线条结束的坐标
    ctx.stroke();-----结束
    线条的转弯:
    ctx.beginPath();
    ctx.lineWidth=10;
    ctx.lineJoin="bevel”; ---斜角
    ctx.lineJoin="round”;——圆角
    ctx.lineJoin="miter”;——尖角
    ctx.moveTo(20,20);
    ctx.lineTo(100,50);
    ctx.lineTo(20,100);
    ctx.lineTo(120,120); ------可以创建坐标然后会自动相连

    ctx.stroke();

    =================================================================================
    Canvas 矩形:
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    ctx.rect(20,20,190,110);
    ctx.stroke();

    ctx.clearRect(20,20,100,50);-----指定一段距离内没有样式

    =================================================================================
    Canvas 圆形
    在canvas中绘制圆形, 我们将使用以下方法:
    arc ( x , y , r , start , stop)
    实际上我们在绘制圆形时使用了 "ink" 的方法, 比如 stroke() 或者 fill().
    var c=document.getElementById("myCanvas"); ---找到元素
    var ctx=c.getContext("2d"); ---创建对象
    ctx.beginPath(); ---开始
    ctx.arc(95,50,40,0,2Math.PI,true); -----X Y 半径 控制圆的显示部分 1或者21的时候是显示半边 true逆时针
    ctx.stroke(); ----开始
    创建圆圈的时候,开始位置为0的时候,是在最右边的点上,结束的位置为Math.PI ( 代表180度),最后的一个值
    默认的属性是顺时针方向,为true的时候是逆时针方向。角度都是按照顺时针的方向来计算的。
    Math.PI 180度
    2
    Math.PI 360度
    0.5*Math.PI 90度

    1.5*Math.PI 270度

    =================================================================================
    Canvas 文本
    使用 canvas 绘制文本,重要的属性和方法如下:
    font - 定义字体
    fillText(text,x,y) - 在 canvas 上绘制实心的文本
    strokeText(text,x,y) - 在 canvas 上绘制空心的文本
    使用 fillText():--------------------------实心文本
    JavaScript:
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    ctx.font="30px Arial"; ---字体和样式
    ctx.fillText("Hello World",10,50); -----文本 距离左边的距离 距离上边的距离
    使用 strokeText():--------------------------空心文本
    JavaScript:
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    ctx.font="30px Arial"; ----字体和样式

    ctx.strokeText("Hello World",10,50); ----文本 距离左边的距离 距离上边的距离

    =================================================================================
    Canvas 渐变
    以下有两种不同的方式来设置Canvas渐变:
    createLinearGradient(x,y,x1,y1) - 创建线条渐变
    createRadialGradient(x,y,r,x1,y1,r1) - 创建一个径向/圆渐变
    当我们使用渐变对象,必须使用两种或两种以上的停止颜色。

    addColorStop()方法指定颜色停止,参数使用坐标来描述,可以是0至1.


    使用 createLinearGradient(): ------------------线性渐变
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    // 创建渐变
    var grd=ctx.createLinearGradient(0,0,200,0); 括号里面的是起始坐标和结束坐标
    grd.addColorStop(0,"red");——开始颜色
    grd.addColorStop(0,"red”);
    grd.addColorStop(1,"white"); ——结束颜色 多个这个的时候可以添加多个渐变颜色
    // 填充渐变
    ctx.fillStyle=grd; -----运用样式 grd

    ctx.fillRect(10,10,150,80);


    使用 createRadialGradient():-----------------------圆形渐变
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    // 创建渐变
    var grd=ctx.createRadialGradient(75,50,5,90,60,100);
    grd.addColorStop(0,"red");
    grd.addColorStop(1,"white");
    // 填充渐变
    ctx.fillStyle=grd;
    x.fillRect(10,10,150,80);

    相关文章

      网友评论

          本文标题:HTML & CSS - 进阶

          本文链接:https://www.haomeiwen.com/subject/uuhkuctx.html