美文网首页
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