侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

详解CSS3浏览器兼容

前端  /  管理员 发布于 7年前   141

本篇介绍了CSS3与页面布局学习总结——浏览器兼容与前端性能优化,具体如下:

一、浏览器兼容

1.1、概要

世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题。不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运行平台还存在差异、屏幕分辨率不一样,大小不一样,比例不一样。兼容性主要考虑三方面:

1)、CSS兼容

2)、JavaScript兼容

3)、HTML兼容

这三类也是前端的主要组成部分,都存在一定的兼容性问题,知己知彼,百战百胜,我们先了解浏览器的发动机—内核。

多年前我们一直为IE6兼容烦恼,为它没少加班;盼走了IE6现在又出现了IE8,看来兼容没有尽头...

1.2、浏览器内核

Trident

Microsoft公司浏览器内核,IE6、IE7、IE8(Trident 4.0)、IE9(Trident 5.0)、IE10(Trident 6.0)及许多品牌浏览器的内核。其中部分浏览器的新版本是“双核”甚至是“多核”,其中一个内核是Trident,然后再增加一个其他内核。

Gecko

Firefox内核,Netscape6开始采用的内核,后来的Mozilla FireFox(火狐浏览器) ,Mozilla Firefox、Mozilla SeaMonkey、waterfox(Firefox的64位开源版)、Iceweasel、Epiphany(早期版本)、Flock(早期版本)、K-Meleon使用的内核。

Presto

Opera前内核,已废弃,Opera现已改用Google Chrome的Blink内核。

Webkit

Safari内核,Chrome内核原型,开源,它是苹果公司自己的内核,也是苹果的Safari浏览器使用的内核。 傲游浏览器3、Apple Safari、(Win/Mac/iPhone/iPad)、Symbian手机浏览器、Android 默认浏览器

Blink

Blink是一个由Google和Opera Software开发的浏览器排版引擎,Google计划将这个渲染引擎作为Chromium计划的一部分,这一渲染引擎是开源引擎WebKit中WebCore组件的一个分支,并且在Chrome(28及往后版本)、Opera(15及往后版本)。

edge

微软专门为新IE打造的引擎,速度快,目前已经基于此引擎开发了浏览器,目前IE11使用该内核,估计以后微软的新浏览器会继续采用该内核。

1.3、浏览器市场份额(Browser Market Share)

能过浏览器的市份额我们可以在处理浏览器兼容性时会更加关注市场份额高的浏览器,适当的时候可以放弃市场份额占有量小的浏览器。

国际:

查询地址:https://www.netmarketshare.com

2016年12月PC浏览器数据

2016年12月平板+移动数据

2016年浏览器份额变化

国内:

查询地址:http://tongji.baidu.com/data/browser

从上图可以看出,我们在针对PC Web开发时需要重点关注Chrome、IE浏览器,开发Mobile项目时要重点关注Chrome浏览器与Safari。

1.4、兼容的一般标准

1)、在不同的主流的浏览器上表现效果一致

2)、能适应不同的屏幕大小

3)、能适应不同的分辨率与色彩深度

浏览器兼容在线测试:

http://browsershots.org/

http://browsershots.org/

IE测试可以安装:IETester在本地测试。

 1.5、CSS Reset

每种浏览器都有一套默认的样式表,即user agent stylesheet,网页在没有指定的样式时,按浏览器内置的样式表来渲染。这是合理的,像word中也有一些预留样式,可以让我们的排版更美观整齐。不同浏览器甚至同一浏览器不同版本的默认样式是不同的。但这样会有很多兼容问题,CSSReset可以将所有浏览器默认样式设置成一样。

如全局重置*{ padding: 0; margin: 0; border:}虽然能全部重置,但由于性能较低,不推荐使用。因为*需要遍历整个DOM树,当页面节点较多时,会影响页面的渲染性能。这个网站http://cssreset.com/有最新的CSSReset提供给大家参考。

Normalize (号称是CSS reset的替代方案,保留了一些内置的样式,并不是清除所有)

http://nicolasgallagher.com/about-normalize-css/

https://github.com/necolas/normalize.css

示例:请看第2章的内容

1.6、CSS Hack

CSS Hack就是针对不同的浏览器或不同版本浏览器写特定的CSS样式达到让浏览器兼容的过程。

1.6.1、条件注释法

IE条件注释(Conditional comments)是IE浏览器私有的代码,在其它浏览器中被视为注释。

gt : greater than,选择条件版本以上版本,不包含条件版本 >

lt : less than,选择条件版本以下版本,不包含条件版本 <

gte : greater than or equal,选择条件版本以上版本,包含条件版本>=

lte : less than or equal,选择条件版本以下版本,包含条件版本 <=

! : 选择条件版本以外所有版本,无论高低

*只有IE浏览器认识条件注释、其它浏览器会跳过

示例:

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>        <!--[if gt IE 6]><style>    body{        background:lightblue;    }</style>        <![endif]-->    <!--[if lt IE 8]>        <script type="text/javascript">alert("您的浏览器Out了,请下载更新。");        </script>        <![endif]-->    </head>    <body>        <!--[if gt IE 6]><h2>大于IE6版本的浏览器</h2>        <![endif]-->    </body></html>

效果:

 IE8

chrome

ie6

 1.6.2、样式内属性标记法

在CSS样式的属性名前或值后面添加特殊的字符让不同的浏览器解析。

http://browserhacks.com/在线查询, 这一个功能强大的提供各种针对性兼容办法的网站,非常实用。

“-″下划线是IE6专有的hack

“\9″ IE6/IE7/IE8/IE9/IE10都生效

“\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack

“\9\0″ 只对IE9/IE10生效,是IE9/10的hack

这里以IE6双边距问题为例。

代码:

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>        <style type="text/css">#div1{    width: 100px;    height: 100px;    background: lightgreen;    float: left;margin-left: 100px;    _margin-left: 50px;        }        </style>    </head>    <body>        <div id="div1"></div>    </body></html>

效果:

 1.6.3、选择器前缀法

*html *前缀只对IE6生效

*+html *+前缀只对IE7生效

@media screen\9{...}只对IE6/7生效

@media \0screen {body { background: red; }}只对IE8有效

@media \0screen\,screen\9{body { background: blue; }}只对IE6/7/8有效

@media screen\0 {body { background: green; }} 只对IE8/9/10有效

@media screen and (min-width:0\0) {body { background: gray; }} 只对IE9/10有效

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效

《hack速查表》:

<!DOCTYPE html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>hack速查表</title>    <style type="text/css">        /*reset*/    * {margin: 0;padding: 0;        }    body {font: normal 12px/2 Tahoma, Arial, "\5b8b\4f53", Helvetica, sans-serif;height: 100%;text-align: center;background: #fff;        }    h1,        h2,        h3,        h4,        h5,        h6 {font-size: 100%;font-weight: normal;        }        /* Tables still need 'cellspacing="0"' in the markup. */    table {border-collapse: collapse;border-spacing: 0;        }    ul,        ol {list-style: none;        }    em {font-style: normal;color: #f00;        }    h1 {font-size: 2em;font-weight: 700;        }    .hack {width: 1000px;margin: 0 auto;text-align: left;        }    .hack table {width: 100%;margin: 10px 0;        }    .hack td,        .hack th {height: 30px;padding: 0 5px;border: 1px solid #ccc;        }    .hack th {color: #cc0bf6;        }    .hack th.eq,        .hack td.eq {width: 350px;color: #333;        }    .hack th.identifier,        .hack td.hack-data {width: 350px;color: #61602f;        }    .hack td.no {color: #fff;text-align: center;background-color: red;        }    .hack td.yes {color: #fff;text-align: center;background-color: green;        }    .hack p b {color: green;        }    .hack p b.red {color: red;        }    .hack h2 {margin: 10px 0 0 0;font-size: 1.5em;font-weight: 700;        }    .hack-list {margin: 10px 0;        }    .hack-list li {margin-bottom: 5px;zoom: 1;        }    .hack-list span {float: left;width: 15px;font-family: "\5b8b\4f53";        }    .hack-list-inf {padding: 0 0 0 15px;        }    .hack-list em {display: inline-block;margin: 0 5px;        }    </style></head><body>    <h1>hack速查表</h1>    <div class="hack">        <p>建议:以标准浏览器为准书写代码,如遇到兼容问题,尝试其他方法解决问题,在万不得已怕情况下,采用HACK解决。</p>        <p>以下是我总结的HACK书写方法:</p>        <p>浏览器:仅限IE6+,FF,safari,chrome,opera;(截止到2011.10.12非IE均为最新版本)。</p>        <p>测试环境:windows系统;</p>        <p>DOCTYPE:<!doctype html>.</p>        <table cellpadding="0"><thead>    <tr>        <th class="identifier">标志符</th>        <th class="eq">示例</th>        <th>IE6</th>        <th>IE7</th>        <th>IE8</th>        <th>IE9</th>        <th>FF</th>        <th>OP</th>        <th>SA</th>        <th>CH</th>    </tr></thead><tbody>    <tr>        <td class="hack-data">*</td>        <td>.eq {*color:#000;}</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">_</td>        <td>.eq {_color:#000;}</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">+</td>        <td>.eq {+color:#000;}</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">-</td>        <td>.eq {-color:#000;}</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">></td>        <td>.eq {>color:#000;}</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">\0</td>        <td>.eq {color:#000\0;}</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">\9</td>        <td>.eq {color:#000\9;}</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">\9\0</td>        <td>.eq {color:#000\0;}</td>        <td class="no">N</td>        <td class="no">N</td>        <td>N\Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">:root .xx{xxx:xxx\9;}</td>        <td>:root .eq {color:#a00\9;}</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">*+</td>        <td>.eq {*+color:#000;}</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">*-</td>        <td>.eq {*-color:#000;}</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">*html</td>        <td><span class="hack-data">*html</span> .eq {color:#000;}</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">*+html</td>        <td><span class="hack-data">*+html</span> .eq {color:#000;}</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">html*</td>        <td>html* .eq {color:#000;}</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">[;</td>        <td>.eq {color:red;[;color:blue;}</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="yes">Y</td>    </tr>    <tr>        <td class="hack-data">html>body</td>        <td>html>body .eq {color:blue;}</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>    </tr>    <tr>        <td class="hack-data">html>/**/body</td>        <td>html>/**/body .eq {color:blue;}</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>    </tr>    <tr>        <td class="hack-data">html/**/>body</td>        <td>html/**/>body .eq {color:blue;}</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>    </tr>    <tr>        <td class="hack-data">@media all and (min-width:0px){}</td>        <td><span class="hack-data">@media all and (min-width:0px){.eq {color:#000;}}</span></td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>    </tr>    <tr>        <td class="hack-data">*:first-child+html</td>        <td>*:first-child+html .eq {color:blue;}</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">*:first-child+html{} *html</td>        <td>*:first-child+html{} *html .eq {color:blue;}</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">@-moz-document url-prefix(){}</td>        <td>@-moz-document url-prefix(){ .eq {color:blue;}}</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">@media screen and (-webkit-min-device-pixel-ratio:0){}</td>        <td>@media screen and (-webkit-min-device-pixel-ratio:0){.eq {color:blue;}}</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="yes">Y</td>    </tr>    <tr>        <td class="hack-data">@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0){}</td>        <td><span class="hack-data">@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0){.eq {color:blue;}}</span></td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="no">N</td>        <td class="no">N</td>    </tr>    <tr>        <td class="hack-data">body:nth-of-type(1)</td>        <td>body:nth-of-type(1) .eq {color:blue;}</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="no">N</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>        <td class="yes">Y</td>    </tr></tbody><tfoot>    <tr>        <th class="identifier">标志符</th>        <th class="eq">示例</th>        <th>IE6</th>        <th>IE7</th>        <th>IE8</th>        <th>IE9</th>        <th>FF</th>        <th>OP</th>        <th>SA</th>        <th>CH</th>    </tr></tfoot>        </table>        <p>FF:firefox; OP:opera; SA:safari; CH:chrome; <b>Y</b>代表支持,<b class="red">N</b>代表不支持。</p>        <h2>注意事项:</h2>        <ul class="hack-list"><li><span>·</span>    <div class="hack-list-inf">由于各浏览器更新神速,所以有些HACK可能会有变化,所以请大家注意。</div></li><li><span>·</span>    <div class="hack-list-inf"><em>[;</em>此种方式会影响后续样式,不可取。</div></li><li><span>·</span>    <div class="hack-list-inf"><em>\9\0</em>并非对所有属性都能区分IE8和IE9.比如:background-color可以,但background不可以,还有border也不可以。所以在实际用时要测试下。</div></li><li><span>·</span>    <div class="hack-list-inf">当同时出现<em>\0</em>;<em>*</em>;<em>_</em>;时,推荐将\0写在*和_前面。例如:color:red\0;*color:blue;_color:green;可行,否则IE7和IE6里的效果会失效。但border例外,放在前后都可以。保险起见,还是放在前面。 </div></li>        </ul>        <h2>推荐写法:</h2>        <h3>demo:</h3>        <pre>        .eq { color:#f00;/*标准浏览器*/ color:#f30\0;/*IE8,IE9,opera*/ *color:#c00;/*IE7及IE6*/ _color:#600;/*IE6专属*/}        :root .eq {color:#a00\9;}/*IE9专属*/        @media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0){.eq {color:#450;}}/*opera专属*/        @media screen and (-webkit-min-device-pixel-ratio:0){.eq {color:#879;}}/*webkit专属*/        @-moz-document url-prefix(){ .eq {color:#4dd;}}/*firefox专属*/  </pre>    </div></body>

 示例:

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>        <style type="text/css">@media screen\0 {    body {        background: lightblue;    }}        </style>    </head>    <body>    </body></html>

 运行结果:

 1.7、文档模式 (X-UA-Compatible)

文档模式是IE8浏览器以后的一种独有技术,他可以通过meta指定当前文档的渲染模式,如可以把IE8降级成IE6、IE7使用。文档模式的主要作用是影响浏览器显示网页HTML的方式,用于指定IE的页面排版引擎(Trident)以哪个版本的方式来解析并渲染网页代码。

<meta http-equiv="X-UA-Compatible" content="IE=6" ><meta http-equiv="X-UA-Compatible" content="IE=7" ><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" ><meta http-equiv="X-UA-Compatible" content="IE=edge" >//最新IE

“X-UA-Compatible”的值有两种方式:Emulate+IE版本号,单纯版本号

EmulateIE8:如果声明了文档类型,则以IE8标准模式渲染页面,否则将文档模式设置为IE5

9:强制以IE9标准模式渲染页面,忽略文档类型声明

x-ua-compatible 头标签大小写不敏感,必须用在 head 中,必须在除 title 外的其他 meta 之前使用。

<meta http-equiv="x-ua-compatible" content="IE=7,9,10" ><meta http-equiv ="X-UA-Compatible" content = "IE=edge,chrome=1" />

Google Chrome Frame(谷歌内嵌浏览器框架GCF)

插件可以让用户的IE浏览器外不变,但用户在浏览网页时,实际上使用的是Google Chrome浏览器内核

未指定文档模式时使用默认的文档模式示例: 

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title>X-UA-Compatible</title>        <style>#div1 {    width: 100px;    height: 100px;    background: lightgreen;    float: left;    margin-left: 100px;    _margin-left: 50px;}        </style>    </head>    <body>        <div id="div1"></div>    </body></html>

运行结果:

强制指定文档模式为IE6,在IE8下会自动变成怪异模式,简单说IE8被当作IE6在用。

多数情况下我们不会这样降级使用,一般会将IE选择为最新版本的文档模式(注意不是文档类型),如果IE浏览器使用了GCF技术我们应该强制使用最新版内核,写入如下:

<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1" />

现在多数网站这是这种写法如baidu。

 1.8、javascript兼容


  • 上一条:
    利用CSS实现书签效果实例源码
    下一条:
    用CSS设定一个元素半透明
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客