1.HTMLElement.style

可读可写
小驼峰写法 例如:backgroundColor
值 :字符串
复合值一定拆解赋值
例如 element.style.border = ‘1px solid red’ => element.style.borderWidth = ‘1px’ + element.style.borderStyle = ‘solid’ + element.style.borderColor = ‘red’
保留字前面加css 例如 cssFloat

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. <style>
  9. div{
  10. width: 100px;
  11. height: 100px;
  12. background-color: green;
  13. }
  14. </style>
  15. </head>
  16. <div style="width: 200px;"></div>
  17. <body>
  18. <script>
  19. var oDiv=document.getElementsByTagName('div')[0];
  20. console.log(oDiv.style.width)
  21. </script>
  22. </body>
  23. </html>

不能读取css,修改css,读取修改的是内联样式style

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. <style>
  9. div{
  10. width: 100px;
  11. height: 100px;
  12. background-color: green;
  13. }
  14. </style>
  15. </head>
  16. <div style=""></div>
  17. <body>
  18. <script>
  19. var oDiv=document.getElementsByTagName('div')[0];
  20. console.log(oDiv.style.width)
  21. oDiv.style.width='200px';
  22. oDiv.style.height='200px';
  23. oDiv.style.backgroundColor='green';
  24. // oDiv.style.border='5px soild #000';
  25. oDiv.style.borderWidth='5px';
  26. oDiv.style.borderStyle='soild';
  27. oDiv.style.borderColor='#000';
  28. oDiv.style.position='absolute';
  29. oDiv.style.left = '200px';
  30. oDiv.style.top = '300px';
  31. oDiv.style.cssFloat='left';//因为float是js的关键字 保留字
  32. //elem.style.xxx ->可读可写
  33. //小驼峰写
  34. //值->字符串
  35. //复合值一定拆解赋值
  36. //保留字前面加css
  37. //查看css属性的方法
  38. console.log(oDiv.style)
  39. </script>
  40. </body>
  41. </html>
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. <style>
  9. div{
  10. width: 100px;
  11. height: 100px;
  12. background-color: green;
  13. }
  14. </style>
  15. </head>
  16. <div style=""></div>
  17. <body>
  18. <script>
  19. var oDiv=document.getElementsByTagName('div')[0];
  20. console.log(oDiv.style.width)
  21. oDiv.style.width='200px';
  22. oDiv.style.height='200px';
  23. oDiv.style.backgroundColor='green';
  24. oDiv.style.border='5px soild #000';
  25. oDiv.style.position='absolute';
  26. oDiv.style.left = '200px'
  27. oDiv.style.top = '300px'
  28. </script>
  29. </body>
  30. </html>

image.png
image.png
image.png
image.png
打印所有元素可设定的style的值
image.png
访问元素相应的属性

image.png
image.png
offsetWidth是靠底层信息渲染的,查询底层信息,与css无关
style是css

2.window.getComputedStyle() 查看属性的css属性集合

查看计算样式
window.getComputedStyle(elem,null)[prop]; prop变量或是没有确定的属性值查询
window.getComputedStyle(elem,null).prop; 有确定的属性值查询时
IE8及以下不支持
//elem.currentStyle

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. <style>
  9. /* div{
  10. width: 100px;
  11. height: 100px;
  12. background-color: green;
  13. } */
  14. </style>
  15. </head>
  16. <div style=""></div>
  17. <body>
  18. <script>
  19. var div=document.getElementsByTagName('div')[0];
  20. console.log(window.getComputedStyle(div,null));
  21. </script>
  22. </body>
  23. </html>

获取当前元素所有设置值和默认值,一般用它获取属性值,比较准
image.png

image.png
ie8以下不支持

封装获取属性的方法(兼容IE)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. </head>
  9. <body>
  10. <div style="width: 100px; height: 200px;
  11. background-color: green;"></div>
  12. <script>
  13. var div=document.getElementsByTagName('div')[0];
  14. //获取元素属性
  15. function getStyles(elem,prop){
  16. if(window.getComputedStyle){
  17. if(prop){
  18. return window.getComputedStyle(elem,null)[prop];
  19. }else{
  20. return window.getComputedStyle(elem,null);
  21. //没有写属性,就返回全部
  22. }
  23. }else{
  24. if(prop){
  25. return elem.currentStyle(prop);
  26. /*如果有属性,就返回属性值,与window.getComputedStyle(elem,null)[prop]
  27. 的结果一样,因为不同的浏览器对方法的支持程度不同*/
  28. }
  29. else{
  30. return elem.currentStyle;
  31. //返回所有
  32. }
  33. }
  34. }
  35. console.log(getStyles(div,'height'));//200px
  36. </script>
  37. </body>
  38. </html>

image.png

image.png
读取伪元素
image.png
image.png
指明写好

  1. <body>
  2. <div style="color:hotpink;"></div>
  3. </body>
  4. <script>
  5. var div = document.getElementsByTagName('div')[0];
  6. function getStyles(elem,prop){
  7. if(window.getComputedStyle){
  8. if(prop){
  9. return window.getComputedStyle(elem,null)[prop];
  10. }else{
  11. return window.getComputedStyle(elem,null);
  12. }
  13. }else{
  14. if(prop){
  15. return elem.currentStyle[prop];
  16. }else{
  17. return elem.currentStyle;
  18. }
  19. }
  20. }
  21. </script>

注 遇到需直接数字类型值时 需加二重判断将其转换为数值 例如偏移量 parseInt()

  1. function getStyles(elem,prop){
  2. if(window.getComputedStyle){
  3. if(prop){
  4. if(prop==='left'||prop==='top'){
  5. return parseInt(window.getComputedStyle(elem,null)[prop]);//把left返回的100px变成100
  6. }
  7. return window.getComputedStyle(elem,null)[prop];
  8. }else{
  9. return window.getComputedStyle(elem,null);
  10. }
  11. }else{
  12. if(prop){
  13. if(prop==='left'||prop==='top'){
  14. return parseInt(elem.currentStyle[prop]);
  15. }
  16. return elem.currentStyle[prop];
  17. }else{
  18. return elem.currentStyle;
  19. }
  20. }
  21. }

image.png

3.offsetWidth、offsetHeight

底层的数据,不止css中的
缺陷:会包含padding等内边距,有些布局是依靠padding布局的
**HTMLElement.offsetWidth** 是一个只读属性,返回一个元素的布局宽度。一个典型的(译者注:各浏览器的offsetWidth可能有所不同)offsetWidth是测量包含元素的边框(border)、水平线上的内边距(padding)、竖直方向滚动条(scrollbar)(如果存在的话)、以及CSS设置的宽

字符串加数字 转换成数字技巧 例如’100px’ =>parseInt(‘100px’);

4.操作伪元素(更改伪元素样式)技巧

  1. <style>
  2. *{
  3. margin: 0px;
  4. padding: 0px;
  5. }
  6. .box{
  7. width: 100px;
  8. height: 100px;
  9. background-color: hotpink;
  10. }
  11. .box::after{
  12. content: "";
  13. display: block;
  14. width: 50px;
  15. height: 50px;
  16. background-color: greenyellow; //绿色
  17. }
  18. .box.active::after{
  19. background-color: blueviolet; //紫色
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div class="box active"></div>
  25. </body>

image.png

总结:在同一个元素上面设置不同的class类名+伪元素 要更改替换的样式写在后面

获取伪元素

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. </head>
  9. <style>
  10. div{
  11. width: 100px;
  12. height: 100px;
  13. padding: 10px;
  14. background-color: red;
  15. }
  16. div::after{
  17. content: '';
  18. display: block;
  19. width: 50px;
  20. height: 50px;
  21. background-color: red;
  22. }
  23. </style>
  24. <body>
  25. <div></div>
  26. <script>
  27. var div=document.getElementsByTagName('div')[0];
  28. console.log(window.getComputedStyle(div,'after').width);//50px 通过伪元素的类型名字获取伪元素
  29. console.log(window.getComputedStyle(div, "after").height);//50px
  30. console.log(window.getComputedStyle(div, "after").backgroundColor);
  31. </script>
  32. </body>
  33. </html>

改变伪元素

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. </head>
  9. <style>
  10. .box{
  11. width: 100px;
  12. height: 100px;
  13. padding: 10px;
  14. background-color: green;
  15. }
  16. .box::after{
  17. content: '';
  18. display: block;
  19. width: 50px;
  20. height: 50px;
  21. background-color: red;
  22. }
  23. .box.active::after{
  24. background-color: black;
  25. }
  26. </style>
  27. <body>
  28. <div class="box"></div>
  29. <script>
  30. var div=document.getElementsByTagName('div')[0];
  31. console.log(window.getComputedStyle(div,'after').width);
  32. console.log(window.getComputedStyle(div, "after").height);
  33. console.log(window.getComputedStyle(div, "after").backgroundColor);
  34. div.onclick = function() {
  35. this.className+=' active'//通过加类修改伪元素
  36. }
  37. </script>
  38. </body>
  39. </html>

运动

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. </head>
  9. <body>
  10. <div style="width: 100px; height: 200px;
  11. background-color: green;"></div>
  12. <script>
  13. var div=document.getElementsByTagName('div')[0];
  14. //获取元素属性
  15. function getStyles(elem,prop){
  16. if(window.getComputedStyle){
  17. if(prop){
  18. return window.getComputedStyle(elem,null)[prop];
  19. }else{
  20. return window.getComputedStyle(elem,null);
  21. //没有写属性,就返回全部
  22. }
  23. }else{
  24. if(prop){
  25. return elem.currentStyle(prop);
  26. /*如果有属性,就返回属性值,与window.getComputedStyle(elem,null)[prop]
  27. 的结果一样,因为不同的浏览器对方法的支持程度不同*/
  28. }
  29. else{
  30. return elem.currentStyle;
  31. //返回所有
  32. }
  33. }
  34. }
  35. console.log(getStyles(div,'height'));//200px
  36. div.onclick=function() {
  37. // var width=this.offsetWidth;
  38. var width=parseInt(getStyles(this,'width'));
  39. this.style.width=width+10+'px';
  40. }
  41. </script>
  42. </body>
  43. </html>

5.JS操作dom样式style 技巧

  1. <style>
  2. *{
  3. margin: 0px;
  4. padding: 0px;
  5. }
  6. .box{
  7. width: 100px;
  8. height: 100px;
  9. background-color: hotpink;
  10. }
  11. .box::after{
  12. content: "";
  13. display: block;
  14. width: 50px;
  15. height: 50px;
  16. background-color: greenyellow;
  17. }
  18. .box.active::after{
  19. background-color: blueviolet;
  20. width: 100px;
  21. height: 100px;
  22. border-radius: 50%;
  23. }
  24. </style>
  25. <body>
  26. <div class="box"></div>
  27. </body>
  28. <script>
  29. var div = document.getElementsByTagName('div')[0];
  30. div.onclick = function(){
  31. this.className +=' active';
  32. }

性能操作

image.png

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title></title>
  8. </head>
  9. <style>
  10. *{
  11. margin: 0px;
  12. padding: 0px;
  13. }
  14. .box{
  15. width: 100px;
  16. height: 100px;
  17. background-color: hotpink;
  18. }
  19. .box::after{
  20. content: '';
  21. display: block;
  22. width: 50px;
  23. height: 50px;
  24. background-color: greenyellow;
  25. }
  26. .box.active::after{
  27. background-color: blueviolet;
  28. width: 100px;
  29. height: 100px;
  30. border-radius: 50%;
  31. }
  32. </style>
  33. <body>
  34. <div class="box"></div>
  35. <script>
  36. var div=document.getElementsByTagName('div')[0];
  37. // this.style.background='red';
  38. // this.style.width='200px';
  39. // this.style.height = '200px'
  40. // this.style.borderRadius='50%';
  41. div.onclick = function() {
  42. this.className+=' active'//改变css 比上面写的改变css的好很多 性能好 也容易修改
  43. }
  44. </script>
  45. </body>
  46. </html>

总结:把要设置的样式写在css里 然后通过 this.className+= ‘ 类名’ 的方式添加样式


课内作业未做:下拉菜单

55min

可以做一下

课内作业未做:轮播图