平时遇到的常用方法

$pathname = APP_PATH . '/../public/upload/personal/qrcode/dao_fans/';
        if(!is_dir($pathname)) { //若目录不存在则创建之
            mkdir($pathname,0777,true);
        }

 

fputs(fopen('支付宝支付异步日志.txt','a+'),json_encode($arr).PHP_EOL);

 

/**
 * 打印日志
 * $msg 日志内容
 */
function printLog($type,$msg,$id) {
    if (!is_dir('log')){
        mkdir('log',0777,true);
    }

    switch ($type)
    {
        case 1:
            //任务协作
            $path="log/rwxz/".date('Y-m-d').".log";
    break;
        case 2:
           // 账号监控
            $path="log/zhjk/".date('Y-m-d').".log";
            break;
        case 3:
            // 监控问题
            $path="log/jkwt/".date('Y-m-d').".log";
            break;
        case 4:
            // 统计排名-单条录入
            $path="log/tjpm_dt/".date('Y-m-d').".log";
            break;
        case 5:
            // 统计排名-账号录入
            $path="log/tjpm_zh/".date('Y-m-d').".log";
            break;
        case 6:
            // 监控问题 10分钟更新一次
            $path="log/crontab/jkwt/".date('Y-m-d').".log";
            break;
        case 7:
            // 任务协作-定时 每分钟一次
            $path="log/crontab/task/".date('Y-m-d').".log";
            break;
        case 8:
            // 统计排名更新实际  240分钟
            $path="log/crontab/tjpm/".date('Y-m-d').".log";
            break;
        case 9:
            // 账号监控,每天0点更新一次
            $path="log/crontab/zhjk/".date('Y-m-d').".log";
            break;
//        case 10:
//            // 任务协作-定时 每分钟一次
//            $path="log/crontab/task/".date('Y-m-d').".log";
    break;
        default:
           // 如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
    }


    file_put_contents($path, "【" . date('Y-m-d H:i:s') . "】". '主键id 或 url地址: ' .$id ." ;" . $msg . "\r\n\r\n", FILE_APPEND);
}

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

读取json文件

demo1.json文件 :
{
  "code": 0
  ,"msg": ""
  ,"count": 3000000
  ,"data": [{
    "id": "10001"
    ,"username": "杜甫"
    ,"email": "xianxin@layui.com"
    ,"sex": "男"
    ,"city": "浙江杭州"
    ,"sign": "点击此处,显示更多。当内容超出时,点击单元格会自动显示更多内容。"
    ,"experience": "116"
    ,"ip": "192.168.0.8"
    ,"logins": "108"
    ,"joinTime": "2016-10-14"
  }, {
    "id": "10002"
    ,"username": "李白"
    ,"email": "xianxin@layui.com"
    ,"sex": "男"
    ,"city": "浙江杭州"
    ,"sign": "君不见,黄河之水天上来,奔流到海不复回。 君不见,高堂明镜悲白发,朝如青丝暮成雪。 人生得意须尽欢,莫使金樽空对月。 天生我材必有用,千金散尽还复来。 烹羊宰牛且为乐,会须一饮三百杯。 岑夫子,丹丘生,将进酒,杯莫停。 与君歌一曲,请君为我倾耳听。(倾耳听 一作:侧耳听) 钟鼓馔玉不足贵,但愿长醉不复醒。(不足贵 一作:何足贵;不复醒 一作:不愿醒/不用醒) 古来圣贤皆寂寞,惟有饮者留其名。(古来 一作:自古;惟 通:唯) 陈王昔时宴平乐,斗酒十千恣欢谑。 主人何为言少钱,径须沽取对君酌。 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。"
    ,"experience": "12"
    ,"ip": "192.168.0.8"
    ,"logins": "106"
    ,"joinTime": "2016-10-14"
    ,"LAY_CHECKED": true
  }, {
    "id": "10003"
    ,"username": "王勃"
    ,"email": "xianxin@layui.com"
    ,"sex": "男"
    ,"city": "浙江杭州"
    ,"sign": "人生恰似一场修行"
    ,"experience": "65"
    ,"ip": "192.168.0.8"
    ,"logins": "106"
    ,"joinTime": "2016-10-14"
  }, {
    "id": "10004"
    ,"username": "李清照"
    ,"email": "xianxin@layui.com"
    ,"sex": "女"
    ,"city": "浙江杭州"
    ,"sign": "人生恰似一场修行"
    ,"experience": "666"
    ,"ip": "192.168.0.8"
    ,"logins": "106"
    ,"joinTime": "2016-10-14"
  }, {
    "id": "10005"
    ,"username": "冰心"
    ,"email": "xianxin@layui.com"
    ,"sex": "女"
    ,"city": "浙江杭州"
    ,"sign": "人生恰似一场修行"
    ,"experience": "86"
    ,"ip": "192.168.0.8"
    ,"logins": "106"
    ,"joinTime": "2016-10-14"
  }, {
    "id": "10006"
    ,"username": "贤心"
    ,"email": "xianxin@layui.com"
    ,"sex": "男"
    ,"city": "浙江杭州"
    ,"sign": "人生恰似一场修行"
    ,"experience": "12"
    ,"ip": "192.168.0.8"
    ,"logins": "106"
    ,"joinTime": "2016-10-14"
  }, {
    "id": "10007"
    ,"username": "贤心"
    ,"email": "xianxin@layui.com"
    ,"sex": "男"
    ,"city": "浙江杭州"
    ,"sign": "人生恰似一场修行"
    ,"experience": "16"
    ,"ip": "192.168.0.8"
    ,"logins": "106"
    ,"joinTime": "2016-10-14"
  }, {
    "id": "10008"
    ,"username": "贤心"
    ,"email": "xianxin@layui.com"
    ,"sex": "男"
    ,"city": "浙江杭州"
    ,"sign": "人生恰似一场修行"
    ,"experience": "106"
    ,"ip": "192.168.0.8"
    ,"logins": "106"
    ,"joinTime": "2016-10-14"
  }]
}  
 //读取json文件
        $path = EXTEND_PATH."demo1.json";
        $data = json_decode(file_get_contents($path),true);

 

 

 

 

-------------------------------------------------------------------------------------------------------------------------------------------

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

网站分享 http://www.bshare.cn/

 --------------------------------------------------------------------------------------------------------------------------------------------------

thinkphp5.0 / thinkphp5.1 index.php文件中

// 支持事先使用静态方法设置Request对象和Config对象
//extend目录
define('DS', DIRECTORY_SEPARATOR);
defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS);
defined('ROOT_PATH') or define('ROOT_PATH', dirname(realpath(APP_PATH)) . DS);

defined('VENDOR_PATH') or define('VENDOR_PATH', ROOT_PATH . 'vendor' . DS);
defined('EXTEND_PATH') or define('EXTEND_PATH', ROOT_PATH . 'extend' . DS);
defined('PUBLIC_PATH') or define('PUBLIC_PATH', ROOT_PATH . 'public' . DS);
defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS);
defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS);
defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH . 'cache' . DS); //缓存地址 cache
//defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH . 'temp' . DS);

-----------------------------------------------------------------------------------------------------------------------------

 

        $where = ['fromid'=>$fromid,'toid'=>$toid];
            $whereOr = ['fromid'=>$toid,'toid'=>$fromid];

                $data = Db::name('ht_workerman_communication')
                    ->where(function($query) use ($where){
                        $query->where($where);
                    })
                    ->whereOr(function($query) use ($whereOr){
                        $query->where($whereOr);
                    })
                    ->select();

        

 

 $map1 = [
                ['users_id', 'like',$bei_users_id],
                ['fans_users_id', 'like', $arr['users_id']],
            ];

            $map2 = [
                ['users_id', 'like', $arr['users_id']],
                ['fans_users_id', 'like', $bei_users_id],
            ];

            $res = Db::name('ht_bind_users')
                ->whereOr([$map1,$map2])
                ->find();

 

 

 -------------------------------------------------------------方框样式--------------------------------------------------------

 

 

 box-shadow: 0 0px 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);
    -webkit-border-radius: 5px;
    border-radius: 5px;




 

.feifei-solid-logo-banner {
  margin: 18px auto 30px;
  border-radius: 16px;
  padding: 28px 24px 28px 48px;
  box-shadow: 0 3px 6px 0 rgba(0, 0, 0, .1);
}

 

 

 

--------------------------------------------------------------------------------------------------------------------------------

php url去掉http , https

$str=preg_replace('#^http(s)?://#',"",$domain_name);

 

   foreach ($order_buy_info as $k => $v)
            {

                try{
                    if($v['trade_type'] == 1){
                        //微信支付--退款是 微信
                        //微信退款
                        $this->return_money($v['id']);
                    }elseif ($v['trade_type'] == 2){
                        //支付宝支付 ---退款是 支付宝
                        $this->zfb_refund($v['id']);
                    }
                }catch (\Exception $e){
                    echo $e->getMessage();
                    $data = [
                      'error'=>  $e->getMessage(),
                      'wx_order_buy_id'=> $v['id'],
                    ];
                 fputs(fopen('支付宝退款捕获异常.txt','a+'),json_encode($data).PHP_EOL);
                }

                sleep(1);
            }

 

 


//监听提交
form.on('submit(demo1)', function (data) {


// var index = layer.msg('正在检测中...', {icon: 16,shade: [0.5, '#f5f5f5'],scrollbar: false,offset: 'auto', time:false });
if(data.field.domain_name == ""){
layer.msg("域名不能为空!");
return false;
}
if(data.field.word_by_domain == ""){
layer.msg("关键词不能为空!");
return false;
}
//数组 checkbox 复选框,数组 search_type_id
//获取复选框,多选,组成的数组
var arr_box = [];
$('input[type=checkbox]:checked').each(function() {
arr_box.push($(this).val());
});

// console.log(arr_box);

localStorage.setItem("key", arr_box);
let word_by_domain = data.field.word_by_domain;
let word_by_domain1 = word_by_domain.replace(/(^\s*)|(\s*$)/g, ""); //去左右空格
snsArr = word_by_domain1.split(/[(\r\n)\r\n]+/); //根据换行符变成数组 关键词数组
let arr_length = snsArr.length;
// console.log(typeof arr_length);
if(arr_length > 200){
layer.msg("超过了最大关键词数200个");
}

//域名
let domain_name = data.field.word_by_domain;
//分组
let word_group_id = data.field.word_group_id;

for(let item of snsArr)
{
console.log(item);
$.ajax({
type:'post',
url:"{:url('agent/demo/index')}",
async: false,//是否为同步
// data:data.field,
data:{word_by_domain:item,search_type_id:arr_box,domain_name:domain_name,word_group_id:word_group_id},
success:function (res) {
console.log(res);
},
error:function(e)
{
//错误的关键词,打标记,不调接口,直接入库
$.ajax({
type: 'post',
url: "{:url('agent/demo/index11')}",
data: {word_by_domain: item},
success: function (res) {
console.log(res);
},
});
console.log('请求失败:',item);
}

})
}

// console.log(data.field);
// $.ajax({
// type:'post',
// url:"{:url('agent/demo/index')}",
// data:data.field,
// async : false,//是否为同步
// success:function (res) {
// console.log(res);
//
// // if(res.status == 200){
// //
// // layer.close(index);
// // table.render({
// // elem: '#currentTableId',
// // url: "{:url('agent/diy_word/json_list')}",
// // toolbar: '#toolbarDemo',
// // defaultToolbar: [ 'exports', {
// // title: '提示',
// // layEvent: 'LAYTABLE_TIPS',
// // icon: 'layui-icon-tips'
// // }],
// // title: '自定义添加关键词列表',
// // cols: [[
// // {type: "checkbox", width: 50, fixed: 'left'},
// // {field: 'key_id', width: 80, title: 'ID', sort: true, fixed: 'left'},
// // {field: 'is_api_status', width: 120, title: '查询状态', templet: function(res){
// // if(res.is_api_status == 1) {
// // return '<span style="color: blue">成功</span>'
// // }else{
// // return '<span style="color: red">失败</span>'
// // }
// // }
// // },
// // {field: 'is_buy_status', width: 120, title: '订单状态', templet: function(res){
// // if(res.is_buy_status == 1) {
// // return '<span style="color: blue">已下单</span>'
// // }else{
// // return '<span style="color: red">待下单</span>'
// // }
// // }
// // },
// // {field: 'domain_name', width: 200, title: '域名'},
// // {field: 'search_type_name', width: 130, title: '搜索引擎'},
// // {field: 'word_by_domain', width: 180, title: '关键词'},
// // // {field: 'rank', width: 100, title: '排名'},
// // {field: 'index', width: 100, title: '指数'},
// // {field: 'price', width: 100, title: '价格'},
// // // {field: 'create_time', width: 180, title: '创建时间'},
// // {fixed: 'right',title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
// // ]],
// // limits: [10, 15, 20, 25, 50, 100],
// // limit: 20,
// // page: true,
// // id: 'testReload',
// // parseData: function(res){ //将原始数据解析成 table 组件所规定的数据
// // return {
// // "code": res.code, //解析接口状态
// // "msg": res.msg, //解析提示文本
// // "count": res.count, //解析数据长度
// // "data": res.data.data //解析数据列表
// // };
// // },
// // where: {
// // //传值 startDate : startDate,
// // domain_name:data.field.domain_name,
// // search_type_id:arr_box
// // },
// // request: {
// // pageName: 'page' // 页码的参数名称,默认:page
// // , limitName: 'size' //每页数据量的参数名,默认:limit
// // //页码和显示数量
// // }
// // });
// //
// //
// // }else if(res.status == 400) {
// // layer.close(index);
// // layer.msg(res.msg,{time: 1200,offset: '200px' },function () {
// // //location.reload()
// // })
// // }else if(res.status == 10001){
// // layer.close(index);
// // layer.msg(res.msg,{time:1200,offset:'200px'},function () {
// // // location.reload()
// // })
// // }
// }
// });
return false;
});
 

 

   //监听提交
     form.on('submit(demo1)', function (data) {

         
      var index =  layer.msg('正在检测中...', {icon: 16,shade: [0.5, '#f5f5f5'],scrollbar: false,offset: 'auto', time:false });
         if(data.field.domain_name == ""){
             layer.msg("域名不能为空!");
             return false;
         }
         if(data.field.word_by_domain == ""){
             layer.msg("关键词不能为空!");
             return false;
         }
         //数组  checkbox 复选框,数组 search_type_id
         //获取复选框,多选,组成的数组
         var arr_box = [];
         $('input[type=checkbox]:checked').each(function() {
             arr_box.push($(this).val());
         });
         
         // console.log(arr_box);

         localStorage.setItem("key", arr_box);
        let word_by_domain = data.field.word_by_domain;
        let word_by_domain1 = word_by_domain.replace(/(^\s*)|(\s*$)/g, ""); //去左右空格
        snsArr = word_by_domain1.split(/[(\r\n)\r\n]+/); //根据换行符变成数组  关键词数组
        let arr_length = snsArr.length;
        // console.log(typeof arr_length);
        if(arr_length > 200){
            layer.msg("超过了最大关键词数200个");
        }
        
        //域名
        let domain_name =  data.field.domain_name;
        //分组
         let word_group_id = data.field.word_group_id;

         //开始时间戳
         let start_time = Date.parse(new Date());
        
         
         $.ajax({
             type: 'post',
             url: "{:url('agent/diy_word/delete_old_data')}",
             data:data.field,
             success: function (res) {
                 // console.log(res);
                 if(res.status == 200){
                     for(let item of snsArr)
                     {
                         // console.log(item);
                         $.ajax({
                             type:'post',
                             url:"{:url('agent/diy_word/save_diy')}",
                             async: false,//这里设置为同步请求
                             // data:data.field,
                             data:{word_by_domain:item,search_type_id:arr_box,domain_name:domain_name,word_group_id:word_group_id},
                             success:function (res) {
                             },
                             error:function(e)
                             {
                                 //错误的关键词,打标记,不调接口,直接入库
                                 // $.ajax({
                                 //     type: 'post',
                                 //     url: "{:url('agent/demo/index11')}",
                                 //     data: {word_by_domain: item},
                                 //     success: function (res) {
                                 //         console.log(res);
                                 //     },
                                 // });
                                 console.log('请求失败:',item);
                             }

                         })
                     }

                     //for 循环完成之后,再把数据库里面数据调出来,展示
                         layer.close(index);
                             table.render({
                                 elem: '#currentTableId',
                                 url: "{:url('agent/diy_word/json_list')}",
                                 toolbar: '#toolbarDemo',
                                 defaultToolbar: [ 'exports', {
                                     title: '提示',
                                     layEvent: 'LAYTABLE_TIPS',
                                     icon: 'layui-icon-tips'
                                 }],
                                 title: '自定义添加关键词列表',
                                 cols: [[
                                     {type: "checkbox", width: 50, fixed: 'left'},
                                     {field: 'key_id', width: 80, title: 'ID', sort: true, fixed: 'left'},
                                     {field: 'is_api_status', width: 120, title: '查询状态', templet: function(res){
                                             if(res.is_api_status == 1) {
                                                 return '<span style="color: blue">成功</span>'
                                             }else{
                                                 return '<span style="color: red">失败</span>'
                                             }
                                         }
                                     },
                                     {field: 'is_buy_status', width: 120, title: '订单状态', templet: function(res){
                                             if(res.is_buy_status == 1) {
                                                 return '<span style="color: blue">已下单</span>'
                                             }else{
                                                 return '<span style="color: red">待下单</span>'
                                             }
                                         }
                                     },
                                     {field: 'domain_name', width: 200, title: '域名'},
                                     {field: 'search_type_name', width: 130, title: '搜索引擎'},
                                     {field: 'word_by_domain', width: 180, title: '关键词'},
                                     // {field: 'rank', width: 100, title: '排名'},
                                     {field: 'index', width: 100, title: '指数'},
                                     {field: 'price', width: 100, title: '价格'},
                                     // {field: 'create_time', width: 180, title: '创建时间'},
                                     {fixed: 'right',title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
                                 ]],
                                 limits: [10, 15, 20, 25, 50, 100],
                                 limit: 20,
                                 page: true,
                                 id: 'testReload',
                                 parseData: function(res){ //将原始数据解析成 table 组件所规定的数据
                                     return {
                                         "code": res.code, //解析接口状态
                                         "msg": res.msg, //解析提示文本
                                         "count": res.count, //解析数据长度
                                         "data": res.data.data //解析数据列表
                                     };
                                 },
                                 where: {
                                     //传值 startDate : startDate,
                                     domain_name:data.field.domain_name,
                                     search_type_id:arr_box
                                 },
                                 request: {
                                     pageName: 'page' // 页码的参数名称,默认:page
                                     , limitName: 'size' //每页数据量的参数名,默认:limit
                                     //页码和显示数量
                                 }
                             });
                     
                     let end_time = Date.parse(new Date());
                     
                     // console.log('for 循环结束');
                     console.log(('耗时: '+(end_time-start_time)/1000)+' s');
                 }else {
                     layer.msg('接口失败',{time:500},function () {
                         location.reload()
                     });
                 }
            },
         });
         
        
    
        // console.log(data.field);
        //  $.ajax({
        //      type:'post',
        //      url:"{:url('agent/demo/index')}",
        //      data:data.field,
        //      async : false,//是否为同步
        //      success:function (res) {
        //         console.log(res);
        //
        //          // if(res.status == 200){
        //          //
        //          //     layer.close(index);
        //          //         table.render({
        //          //             elem: '#currentTableId',
        //          //             url: "{:url('agent/diy_word/json_list')}",
        //          //             toolbar: '#toolbarDemo',
        //          //             defaultToolbar: [ 'exports', {
        //          //                 title: '提示',
        //          //                 layEvent: 'LAYTABLE_TIPS',
        //          //                 icon: 'layui-icon-tips'
        //          //             }],
        //          //             title: '自定义添加关键词列表',
        //          //             cols: [[
        //          //                 {type: "checkbox", width: 50, fixed: 'left'},
        //          //                 {field: 'key_id', width: 80, title: 'ID', sort: true, fixed: 'left'},
        //          //                 {field: 'is_api_status', width: 120, title: '查询状态', templet: function(res){
        //          //                         if(res.is_api_status == 1) {
        //          //                             return '<span style="color: blue">成功</span>'
        //          //                         }else{
        //          //                             return '<span style="color: red">失败</span>'
        //          //                         }
        //          //                     }
        //          //                 },
        //          //                 {field: 'is_buy_status', width: 120, title: '订单状态', templet: function(res){
        //          //                         if(res.is_buy_status == 1) {
        //          //                             return '<span style="color: blue">已下单</span>'
        //          //                         }else{
        //          //                             return '<span style="color: red">待下单</span>'
        //          //                         }
        //          //                     }
        //          //                 },
        //          //                 {field: 'domain_name', width: 200, title: '域名'},
        //          //                 {field: 'search_type_name', width: 130, title: '搜索引擎'},
        //          //                 {field: 'word_by_domain', width: 180, title: '关键词'},
        //          //                 // {field: 'rank', width: 100, title: '排名'},
        //          //                 {field: 'index', width: 100, title: '指数'},
        //          //                 {field: 'price', width: 100, title: '价格'},
        //          //                 // {field: 'create_time', width: 180, title: '创建时间'},
        //          //                 {fixed: 'right',title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
        //          //             ]],
        //          //             limits: [10, 15, 20, 25, 50, 100],
        //          //             limit: 20,
        //          //             page: true,
        //          //             id: 'testReload',
        //          //             parseData: function(res){ //将原始数据解析成 table 组件所规定的数据
        //          //                 return {
        //          //                     "code": res.code, //解析接口状态
        //          //                     "msg": res.msg, //解析提示文本
        //          //                     "count": res.count, //解析数据长度
        //          //                     "data": res.data.data //解析数据列表
        //          //                 };
        //          //             },
        //          //             where: {
        //          //                 //传值 startDate : startDate,
        //          //                 domain_name:data.field.domain_name,
        //          //                 search_type_id:arr_box
        //          //             },
        //          //             request: {
        //          //                 pageName: 'page' // 页码的参数名称,默认:page
        //          //                 , limitName: 'size' //每页数据量的参数名,默认:limit
        //          //                 //页码和显示数量
        //          //             }
        //          //         });
        //          //
        //          //
        //          // }else if(res.status == 400) {
        //          //     layer.close(index);
        //          //     layer.msg(res.msg,{time: 1200,offset: '200px' },function () {
        //          //         //location.reload()
        //          //     })
        //          // }else if(res.status == 10001){
        //          //     layer.close(index);
        //          //     layer.msg(res.msg,{time:1200,offset:'200px'},function () {
        //          //        // location.reload()
        //          //     })
        //          // }
        //      }
        //  });
         return false;
     });

 

 -----------------------------------------------------------------定位----------------------------------------------------------------------------------
 1.6 子绝父相的由来    
弄清楚这个口诀,就明白了绝对定位和相对定位的使用场景
这个 "子绝父相" 太重要了,是我们学习定位的口诀,是定位中最常用的一种方式这句话的意思就是: 子级是绝对定位的话,父级要用相对定位.
(绝对定位是:不会占有位置,是以父类位置为坐标,移动;相对定位是:占位置,以自己所在位置为坐标,移动)
1.子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子.
2.父盒子需要加定位限制盒子在父盒子内显示
3.父盒子布局时,需要占有位置,因此父亲只能是相对定位
 
这就是子绝父相的由来,所以相对定位经常用来作为绝对定位的父级。
总结:因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位
 当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到的
 

 

 

 

 

 

 网页布局总结:
      通过盒子模型,清楚知道大部分html标签是一个盒子。
      通过CSS浮动、定位可以让每个盒子排列成为网页。
      一个完整的网页,是标准流、浮动、定位一起完成布局的,每个都有自己的专有用法。
     1.标准流
        可以让盒子上下排列或者左右排列,【垂直的块级盒子显示就用标注流布局】
     2.浮动
        可以让多个块级元素一行显示或者左右对齐盒子,【多个块级盒子水平显示就用浮动布局】
     3.定位
        定位最大的特点是有层叠的概念,就是可以让多个盒子前后叠压来显示。【如果元素自由在某个盒子内移动就用定位布局】

 

vertical-align 属性应用

 

溢出的文字省略号显示
    1.单行文本溢出显示省略号--必须满足三个条件
   /* 这个单词的意思是如果文字显示不开自动换行 */  
   /* white-space: normal */ /* 1. 先强制一行内显示文本 | 这个单词的意思是如果文字显示不开也必须强制一行内显示 */ white-space:nowrap; (默认 normal自动换行) /* 2. 超出的部分隐藏 */ overflow:hidden; /* 3. 文字用省略号替代超出的部分 */ text-overflow:ellipsis;
  
  2.多行文本溢出显示省略号
  多行文本溢出显示省略号,有较大的兼容性问题,适合于webKit浏览器或移动端(移动端大部分是webKit内核)
  overflow:hidden;
  text-overflow:ellipsis;
/* 弹性伸缩盒子模型显示 */
  display: -webkit-box;
  /*限制在一个块元素显示的文本的行数 */
  -webkit-line-clamp:2;
/* 设置或检索伸缩盒对象的子元素的排列方式 */
-webkit-box-orient:verical;

   overflow:hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
 

 

 

 

 

 

 

 

CSS3盒子模型
    CSS3的可以通过box-sizing来指定盒模型,有2个值:即可指定为content-box、border-box,这样我们计算盒子的大小方式就发生了改变。
    可以分成两种情况:
    1、box-sizing:content-box 盒子大小为 width + padding + border (以前默认的)
    2、box-sizing:border-box 盒子大小为 width

如果盒子模型我们改变为了box-sizing:border-box,那padding和border就不会撑大盒子了(前提padding和border不会超过width宽度)

 

HTML5 新增的语义化标签
<header> : 头部标签
<nav>: 导航标签
<article> : 内容标签
<section> : 定义文档某个区域
<aside> : 侧边栏标签
<footer>: 尾部标签

CSS3 过渡
transition:要过渡的属性 花费时间 运动曲线 何时开始;
1.属性:想要变化的css 属性,宽度高度 背景颜色 内外边距都可以,如果想要所有的属性都变化
    过渡,写一个all就可以。
2.花费时间:单位是秒(必须写单位) 比如0.5s
3.运动曲线:默认是 ease(可以省略)
4.何时开始:单位是 秒(必须写单位) 可以设置延迟触发时间 默认是0s(可以省略)    
记住过渡的使用口诀:谁做过渡给谁加
[ transition: all 0.5s; ] [ transition: width 0.5s,height 0.5s;


css3中旋转:
.box img{
    width: 200px;
    /* transform: rotate(45deg); */
    /* 过渡 css3中 */
    transition: all 0.3s;//过渡动画效果
}
.box img:hover{
    transform: rotate(350deg); //旋转度数效果
}
 
transform-origin:left bottom; //改变旋转中心点
 
 
 
checkbox与文字底部对齐:
<input type="checkbox" name="text" id=""> 注册协议
    <br>
    <input type="checkbox" name="text" id="" style="vertical-align: middle;"> 全部勾选

 

 

 
 
 
 
 
posted @ 2020-08-15 09:39  搬砖小伙子  阅读(204)  评论(0)    收藏  举报