JavaScript--兼容问题总结
以下兼容主要面向IE8以上的兼容。
一.window.navigator浏览器信息
<script>
console.log(window.navigator);
// 用户浏览器的类型 到底是 谷歌还是火狐,ie等
console.log(window.navigator.userAgent);
// 判断浏览器所在的系统平台类型 ,window还是mac
console.log(window.navigator.platform);
</script>
二.查找页面元素的几种方式
<script>
window.onload = function () {
// 无兼容问题放心使用
// 1) 通过id查找元素,获取到匹配的第一个id元素
// var btn = document.getElementById('btn');
// console.log(btn);
// 2) 通过标签名称查找元素,获取到的是伪数组
// var buttons = document.getElementsByTagName('button');
//// 伪数组不能调用数组里的全部方法和属性
//// console.log( buttons.push("123") ); // 报错
// console.log( buttons ); // 了解:兼容问题 ie 9+
// 3) 通过类名查找元素,获取到的是伪数组 ie 9+
// var btnClass = document.getElementsByClassName("btn-class");
// console.log(btnClass); // 4) 通过name属性查找元素,获取到的是伪数组
// name标准用法应该是表单的,如提交表单数据时,name是作为数据的key
// var btnName = document.getElementsByName('btn-name');
// console.log(btnName); // 5) 通过合法的css选择器去查找到第一个元素
// var query1 = document.querySelector("#btn");
// var query1 = document.querySelector("[name='btn-name']");
// console.log(query1);
//
// 6) 通过合法的css选择器去查找到所有元素(做手机项目的时候常用)
// var query2 = document.querySelectorAll("#btn"); // 不推荐用这种方式找id
var query2 = document.querySelectorAll(".btn-class");
console.log(query2); }
</script>
三.innerText、innerHTML、textContent兼容问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/**
* innerHTML
* 全部浏览器都兼容
* innerText firefox45+后支持
* ie,chrome,opera,safari,firefox45+
* textContent ie9+
* firefox,chrome, ie9+
*
* */
window.onload = function () {
var btns = document.getElementsByTagName('button');
var uls = document.getElementsByTagName('ul');
btns[0].onclick = function () {
// 如果innerText获取到不是undefined,说明兼容innerText
if( uls[0].innerText !== undefined ){
uls[0].innerText = "123";
}else{
// 其他情况:如低版本获取用另一种方式修改
uls[0].textContent = "低版本火狐修改";
}
} }
</script>
</head>
<body>
<button>换一换新闻</button>
<ul>
<li>牛大</li>
<li>拉面的老板去参加比赛了</li>
</ul>
</body>
</html>
四.注册事件的三种方式、解绑事件的兼容方式、阻止事件传播(冒泡)
1.注册事件的三种方式
<script>
window.onload = function () { /**
* 一、事件三要素
* 事件源
* 事件类型
* 事件处理程序
*
*
* 二、注册事件三种方式
* 第一种:
* 事件源.on事件类型 = 事件处理程序
* 第二种: ie8不支持
* 事件源.addEventListener('事件类型',事件处理程序,false)
* 第三种: chrome、Firefox、Safari、ie11都不支持,ie6~10支持
* 事件源.attachEvent('on事件类型',事件处理程序)
*
* */
var btn = document.getElementById('btn'); // 第一种:快速注册事件
// btn.onclick = function () {
// alert("我们给按钮添加了一个事件");
// } // 第二种:事件监听 不支持ie8
// 事件源.addEventListener('事件类型',事件处理程序) false是事件冒泡(默认) true是事件捕获
btn.addEventListener('click',function () {
alert("我们给按钮添加了一个事件");
}); btn.addEventListener('click',function () {
alert("AAAAAAA");
},false); // 第三种:事件监听 Chrome、Firefox、Safari,ie11都不支持,ie6~10支持
// btn.attachEvent('onclick',function () {
// alert("我们给按钮添加了一个事件");
// });
// btn.attachEvent('onclick',function () {
// alert("我们给按钮添加了一个事件2222");
// });
// btn.attachEvent('onclick',function () {
// alert("我们给按钮添加了一个事件3333");
// }); }
</script>
事件注册兼容处理:
<script>
/*
谷歌和ie8注册方式不同,
所以我们要进行判断支持哪种注册方式,就使用哪种注册方式添加事件
*/
function myEventListener(element,type,fn) {
if( element.addEventListener ){
element.addEventListener(type,fn);
}else if( element.attachEvent ){
element.attachEvent("on"+type,fn);
}else{
element["on"+type] = fn;
}
}
myEventListener(btn,'click',function () {
alert("兼容版的事件注册方式");
});
</script>
2.解绑事件的兼容方式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.onload = function () {
/**
* 一、事件三要素
* 事件源
* 事件类型
* 事件处理程序
*
*
* 二、注册事件三种方式
* 第一种:
* 事件源.on事件类型 = 事件处理程序
* 第二种: ie8不支持
* 事件源.addEventListener('事件类型',事件处理程序,false)
* 第三种: chrome不支持
* 事件源.attachEvent('on事件类型',事件处理程序)
*
*
* 三、事件解绑
* 第一种:
* 事件源.on事件类型 = null
* 第二种: ie8不支持
* 事件源.removeEventListener('事件类型',事件处理程序,false)
* 第三种: chrome不支持
* 事件源.detachEvent('on事件类型',事件处理程序)
*
*
* */
var btn = document.getElementById('btn');
var btn2 = document.getElementById('btn2');
// 事件注册兼容方式
function myEventListener(element,type,fn) {
// 主流浏览器注册方式
if( element.addEventListener ){
element.addEventListener(type,fn,false);
//
}else if( element.attachEvent ){
element.attachEvent("on"+type,fn);
}else{
element["on"+type] = fn;
}
}// 事件解绑兼容方式
function myRemoveEventListener(element,type,fn) {
if( element.removeEventListener ){
element.removeEventListener(type,fn,false);
}else if( element.detachEvent ){
element.detachEvent("on"+type,fn);
}else{
element["on"+type] = null;
}
} function fn() {
alert("兼容版的事件注册方式");
}
myEventListener(btn,'click',fn);
// 独立fn是为了浏览器能区分每个事件注册
btn2.onclick = function () {
myRemoveEventListener(btn,'click',fn);
} console.log( btn.addEventListener );
console.log( btn.attachEvent ); }
</script>
</head>
<body>
<button id="btn">按钮</button>
<button id="btn2">解绑事件</button>
</body>
</html>
3.阻止事件传播(冒泡)兼容
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#yeye{
width: 500px;
height: 500px;
background-color: #f24b4b;
}
#baba{
width: 400px;
height: 400px;
background-color: #44c28d;
}
#erzi{
width: 300px;
height: 300px;
background-color: #6e8cd5;
}
</style>
<script>
window.onload = function () { /**
*
*
* 事件捕获:
* 浏览器就好像盲人一样,要找某个元素,其实挨个挨个问的方式去找
* 这个过程我们叫事件的捕获过程.
* // 从外到里,直到找到目标
*
* 事件冒泡:
* 找到到目标后,其实还有一个回馈的过程,逐级往上传播
* 这个过程我们叫事件的冒泡过程.
* // 从里到外,直到传到window
*
* 注意:
* 我们一般都是事件冒泡的方式注册事件的
*
*
* 事件的三个阶段 1. 捕获阶段
2. 当前目标阶段
3. 冒泡阶段
事件对象.eventPhase属性可以查看事件触发时所处的阶段 *
* */ var yeye = document.getElementById("yeye");
var baba = document.getElementById("baba");
var erzi = document.getElementById("erzi"); erzi.onclick = function (event) {
event = event || window.event;
if(event.stopPropagation) {
// ie9+ 其余全支持
event.stopPropagation();
}else{
// 全部兼容,火狐不兼容
event.cancelBubble = true;
}
console.log("儿子", event);
}
baba.onclick = function (event) {
event = event || window.event;
if(event.stopPropagation) {
// ie9+ 其余全支持
event.stopPropagation();
}else{
// 全部兼容,火狐不兼容
event.cancelBubble = true;
}
console.log("爸爸", event);
}
yeye.onclick = function (event) {
event = event || window.event;
if(event.stopPropagation) {
// ie9+ 其余全支持
event.stopPropagation();
}else{
// 全部兼容,火狐不兼容
event.cancelBubble = true;
}
console.log("爷爷", event);
}
}
</script>
</head>
<body>
<div id="yeye">
<div id="baba">
<div id="erzi"></div>
</div>
</div>
</body>
</html>
五.event事件对象兼容问题
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/**
*
* 事件对象兼容写法:
* event IE不兼容 window.event火狐(Firefox 不支持)
* event = event || window.event;
*
* 事件目标元素兼容写法:
* event.target IE9.0版本才开始支持
* event.srcElement 火狐(Firefox 不支持)
* event.target = event.target || event.srcElement;
*
*
* */ window.onload = function () {
var btn = document.getElementById('btn');
btn.onclick = function (event) {
// console.log(event);
// console.log(window.event);
event = event || window.event; // 短路写法
event.target = event.target || event.srcElement; // 短路写法
// event.target
console.log( event.target );
console.log( event.srcElement );
} }
</script>
</head>
<body>
<button id="btn">按钮</button>
</body>
</html>
六.兼容ie8的获取样式函数
注意点
// window.getComputedStyle(box,null) -- box 是目标标签
// 这种写法是获取到计算完成的样式,所以这种写法能获取到各种样式表
// 甚至可以获取到继承过来的属性和默认样式
console.log(boxStyle);
console.log(boxStyle.width);
console.log(boxStyle["width"]);
console.log(boxStyle['padding-left']);
console.log(boxStyle['paddingLeft']); // 推荐驼峰写法
console.log(box.style.width);*/ //兼容IE6~8
// console.log(box.currentStyle); // if(window.getComputedStyle) {
// var boxStyle = window.getComputedStyle(box,null);
// }else if(box.currentStyle){
// var boxStyle = box.currentStyle;
// }
// console.log(boxStryle);
封装函数
/**
* 获取样式函数
* @param element 要获取的样式的对象
* return 目标css样式对象
* */
function getStyle(element) {
if(window.getComputedStyle) {
return window.getComputedStyle(element,null);
}else if(element.currentStyle){
return element.currentStyle;
}
}
应用例子--缓动动画函数:
/**
* 获取样式函数
* @param element 要获取的样式的对象
* return 目标css样式对象
* */
function getStyle(element) {
if(window.getComputedStyle) {
return window.getComputedStyle(element,null);
}else if(element.currentStyle){
return element.currentStyle;
}
} /**
* 动画函数
* @param element html标签
* @param attr 标签属性
* @param target 目标参数
* */
function animate(element,obj) {
clearInterval(element.timer);
element.timer = setInterval(function () {
var flag = true;
for(var attr in obj){
// 在for in 的内部要区别开到底是透明度还是像素px的变化
if( attr == "opacity") {
var current = getStyle(element)[attr];
var target = obj[attr];
current = current * 100;
target = target * 100;
// Math.round() 函数返回一个数字四舍五入后最接近的整数值。
current = Math.round(current);
var step = (target - current) / 10;
current += current <= target ? Math.ceil(step):Math.floor(step);
if(current != target) {
flag = false;
}
// element.style.left等
element.style[attr] = current / 100;
}else if(attr == "zIndex"){
element.style[attr] = obj[attr];
} else{
var current = parseInt(getStyle(element)[attr]);
var target = obj[attr];
var step = (target - current) / 10;
current += current <= target ? Math.ceil(step):Math.floor(step);
if(current != target) {
flag = false;
}
// element.style.left等
element.style[attr] = current+ "px";
}
}
if(flag) {
clearInterval(element.timer);
}
},40);
}
七.pageX、pageY还有event、clientX、clientY等兼容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
.box {
width: 200px;
height: 200px;
background-color: pink;
margin-top:1000px;
margin-left:100px;
margin-bottom:100px;
position: absolute;
/*left: 100px;*/ }
.txt {
color: red;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box" id="box">
width: 200px<br>
height: 200px<br>
background-color: pink<br>
margin-top:1000px<br>
margin-left:100px<br>
margin-bottom:100px<br>
<h2 class="txt" id="txt" ></h2>
</div> </body>
</html>
<script>
/*封装event*/
var eventTool = {
getEvent : function (event) {
return event || window.event;
}, getClienX: function (event) {
return this.getEvent(event).clientX;
},
getClienY: function (event) {
return this.getEvent(event).clientY;
},
getPageY : function () {
// pageY = 页面滚动出去垂直距离 + 事件在当前视口的距离
return (window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0) + this.getClienY(event);
}, getPageX : function () {
// pageX = 页面滚动出去横向距离 + 事件在当前视口的距离
return (window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0) + this.getClienX(event);
} }
var box = document.getElementById('box');
var txt = document.getElementById('txt');
box.onclick = function (event) {
// ie8下event兼容
// var event = eventTool.getEvent(event);
// console.log(event);
// pageY = 页面滚动出去垂直距离 + 事件在当前视口的距离
// console.log(window.pageYOffset + event.clientY);
// console.log(window.pageYOffset);
// console.log(event.pageY); console.log(eventTool.getPageY(event));
txt.innerHTML = eventTool.getPageX(event);
// txt.innerHTML += eventTool.getClienY(event);
// txt.innerHTML = "pageX:"+event.pageX+"<br> pageY:"+event.pageY; // 获取window滚动条滚动的距离window.pageYOffset/scrollY的别名 window.pageXOffset/ scrollX的别名 }
</script>
封装写法
eventTool.js
/*封装eventTool*/
var eventTool = {
getEvent : function (event) {
return event || window.event;
}, getClienX: function (event) {
return this.getEvent(event).clientX;
},
getClienY: function (event) {
return this.getEvent(event).clientY;
},
getPageY : function () {
// pageY = 页面滚动出去垂直距离 + 事件在当前视口的距离
return (window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0) + this.getClienY(event);
}, getPageX : function () {
// pageX = 页面滚动出去横向距离 + 事件在当前视口的距离
return (window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0) + this.getClienX(event);
} }
封装方法2:
my.js
function $(id) {return document.getElementById(id);}
function show(obj) { obj.style.display = "block";}
function hide(obj) { obj.style.display = "none";}
function scroll() {
if(window.pageYOffset != null) // ie9+ 和其他浏览器
{
return {
left: window.pageXOffset,
top: window.pageYOffset
}
}
else if(document.compatMode == "CSS1Compat") // 声明的了 DTD
// 检测是不是怪异模式的浏览器 -- 就是没有 声明<!DOCTYPE html>
{
return {
left: document.documentElement.scrollLeft,
top: document.documentElement.scrollTop
}
}
return { // 剩下的肯定是怪异模式的
left: document.body.scrollLeft,
top: document.body.scrollTop
}
}
使用例子--返回顶部小火箭:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
width: 2000px;
}
.top{
position: fixed;
right: 50px;
bottom: 100px;
display: none;
} </style>
<script src="my.js"></script>
<script>
window.onload = function () {
var goTop = $("gotop");
window.onscroll = function () {
scroll().top > 0 ?show(goTop) : hide(goTop);
leader = scroll().top; // 把减去的头部给起始位置
console.log(scroll().top);
} var leader = 0,target = 0 ,timer = null;
goTop.onclick = function () {
target = 0;
timer = setInterval(function () {
leader = leader + (target - leader) / 10;
window.scrollTo(0,leader); // 去往页面的某个位置
if(leader == target) {
clearInterval(timer);
}
},20);
}
}
</script>
</head>
<body>
<div id="gotop" class="top">
<img src="data:images/Top.jpg" alt="">
</div>
<p>我是顶部</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是内容部分</p>
<p>我是底部</p>
</body>
</html>
目前暂时那么多,遇到就更新!
JavaScript--兼容问题总结的更多相关文章
- JavaScript 兼容各大浏览器阻止冒泡事件
JavaScript 兼容各大浏览器阻止冒泡事件 function stopEvent(event) { //阻止冒泡事件 //取消事件冒泡 var e = arguments.callee.call ...
- Javascript兼容和CSS兼容总结
javascript部分 1. document.form.item 问题问题:代码中存在 document.formName.item(“itemName”) 这样的语句,不能在FF下运行解决方法: ...
- JavaScript 兼容处理IE67之 !"a"[0]
IE67对字符串进行取值需要使用charAt()方法,不能直接通过数组方式的坐标访问: <!DOCTYPE html> <html> <head> <meta ...
- JavaScript 兼容 Array.prototype.slice.call
IE9之前的IE版本的HTMLCollection以及NodeList不是Object的子类. 在通过Array.prototype.slice.call进行数组化的时候,IE9之前的IE版本会抛出异 ...
- ie7下的javascript兼容
<a href="javascript:;" onclick="functionone();"></a> <script> ...
- Front End中Javascript兼容问题收集(转)
1 select标签,就有诸多不兼容: A. cloneNode方法,对于非IE浏览器没有问题,对于IE浏览器, 遇到的问题包括: 1)option selected的会clone不过去,然后 ...
- javascript 兼容各个浏览器的事件
- Javascript兼容各浏览器的日期转换
var date = new Date(Date.parse("2015-09-05".replace(/-/g,"/")));'2015-09-05'是无法被 ...
- web前端 javascript 兼容低版本 IE 6 7 8复合写法
1. 返回检测屏幕宽度(可视区域) function client() { if(window.innerWidth != null) // ie9 + 最新浏览器 { return { width: ...
- 【JavaScript兼容】关于IE8及以下无法通过getElementsByClassName()方法获得元素的解决方法
try{ var a = document.getElementsByClassName("cla"); console.log(a); }catch(ex){ var array ...
随机推荐
- 【JAVA】Class.getResource()与ClassLoader.getResource()的区别
转载自:https://blog.csdn.net/qq_33591903/article/details/91444342 Class.getResource()与ClassLoader.getRe ...
- LeetCode简单算法之分割平衡字符串 #1221
在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的. 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串. 返回可以通过分割得到的平衡字符串的最大数量. 示例 1: 输入:s = ...
- Eclipse:Eclipse所有发布版本的下载地址
官方镜像:http://eclipse.mirror.rafal.ca/technology/epp/downloads/release/ 国内镜像:http://mirrors.neusoft.ed ...
- RDS for PostgreSQL 云盘加密功能使用方法
RDS for PostgreSQL支持数据盘的加密功能,提供更高的数据存储安全等级.(加密KEY可以由用户提供,也可以由KMS服务生成.) 使用方法: 1.选中需要购买数据库实例的region,创建 ...
- canvas扇形进度圈动态加载
效果图如下:动态加载的 实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- spring cloud深入学习(五)-----熔断器Hystrix
雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者” ...
- Python中3种内建数据结构:列表、元组和字典
Python中3种内建数据结构:列表.元组和字典 Python中有3种内建的数据结构:列表.元组和字典.参考简明Python教程 1. 列表 list是处理一组有序项目的数据结构,即你可以在一个列表中 ...
- python基础--魔法方法、迭代器、上下文管理
isinstance:判断一个对象是否是某个类的实例 参数一:要判断的对象 参数二:要判断的类型 issubclass:判断一个类是否是另一个类的子类 参数一:是待判断的子类 参数二:待判断的父类 _ ...
- CSS制作的32种图形效果[梯形|三角|椭圆|平行四边形|菱形|四分之一圆|旗帜]
转载链接:http://www.w3cplus.com/css/css-simple-shapes-cheat-sheet 前面在<纯CSS制作的图形效果>一文中介绍了十六种CSS画各种不 ...
- 【CRT相关配置】
1.选项——会话选项 2.回话调整如下: 3.日志文件记录保存,即保存所有输入的命令 文件名:%S-%T-%M-%D.txt,表示每天会存放到一个文件 选择:在连接上启动记录 和 追加到文件