css写法,css选择器,css几种常见样式,盒模型定位,浮动,元素塌陷问题,雪碧图

css的写法

1.内联样式:样式直接写在标签里面。
2.内部样式:样式写在<style>中。
3.外部样式:样式写在另一个文件中,使用<link rel="stylesheeet" href="style.css">
当属性设置有冲突时,就近原则 ,内联>内部>外部,同样的内部样式,顺序是从上到下。

selector()选择器

1.标签选择器 权重值1
2.类选择器 权重值10

<style>
    .cc{
        color: red;
       }
   .dd{
        color: blue;
       }
</style>
  <body>
        <h1 class="cc dd">哈哈</h1>
  </body>
  哈哈是蓝色

<style>
    .cc{
        color: red;
       }
   .dd{
        color: blue;
       }
</style>
  <body>
        <h1 class="dd cc">哈哈</h1>
  </body>
  交换类选择器的顺序,哈哈还是蓝色

   <style>
   .dd{
        color: blue;
       }
   .cc{
        color: red;
       }
 </style>
  <body>
        <h1 class="dd cc">哈哈</h1>style>
  </body>
  交换类选择器定义的顺序,哈哈变成了红色

<style>
 .dd{
       color: blue;
   }
 .ee{
      background: green;
  }
</style>
 <body>
        <h1 class="dd">哈哈</h1>
        <div class="dd ee">嘎嘎</div>
</body>

嘎嘎的样式会重叠,蓝色字体,绿色背景,这样实现多样化,没有多id选择器,尽量使用类选择器。

<style>

.ff{
     color: aqua;
   }

</style>
<body>

<h1 class="ff">h1</h1>
   <p class="ff">p</p>

</body>

h1,p全是浅蓝色
 
 
<style>
  h1.ff{
     color: aqua;
   }

</style>
<body>

<h1 class="ff">h1</h1>
   <p class="ff">p</p>

</body>

h1是浅蓝色,选中了同时满足既是h1标签又是ff类的。

3.id选择器 权重值100

css选择器在选择的时候是从后往前选择的,不是从前往后。比如
<style>
    div#div1{
    background: blue;
</style>
<body>
    <div id="div1">DIV</div>
</body>
他是先找id是div的,再看他是不是div标签,css中id是唯一的,这里多判断了一次,多此一举。

4.分组选择器(用,分隔 表示同时选中不同的选择器)
5.后代选择器(用空格表示 谁的后代)
6.子代选择器(用>表示 )

#div h1{
    background: blue;
    }
<div id="div1">
    <h1>h1</h1>
    <div>
        <h1>h11</h1>
    </div>  
</div>
h1,h11全是蓝色。

只想让儿子h1是蓝色
 #div1 > h1{
    background: blue;
    }
<div id="div1">
    <h1>h1</h1>
    <div>
        <h1>h11</h1>
    </div>  
</div>
h1是蓝色。

7.伪类选择器

#div2:hover{
    background: red;
}
<div id="div2">div2</div>
鼠标划到div2上背景变成红色,IE6只支持给<a>加hover

#ul1 li:first-child{
    background: red;
 }
 <ul id="ul1">
     <li>item1</li>
     <li>item2</li>
 </ul>
 item1背景是红色。
 
 #ul1 li:nth-child(2)
      }
表示第二个列表项是红色

#ul1 li:nth-child(2n)
      }
表示偶数项列表项是红色

#ul1 li:nth-child(2n+1)
      }
表示奇数项列表项是红色

#div3 h1:nth-child(1){
    color: red;
   }
<div id="div3">
    <h1>h1</h1>
    <p>pppppp</p>
    <h1>h1h1h1h1</h1>
</div>
h1是红色


 #div3 p:nth-child(1){
    color: red;
   }
<div id="div3">
    <h1>h1</h1>
    <p>pppppp</p>
    <h1>h1h1h1h1</h1>
</div>

都没有变化,nth-child(1)和前面什么标签没有关系,就表示第一个孩子。想要和标签类型与关要使用nth-of-type(1)

#div3 p:nth-of-type(1){
    color: red;
   }
<div id="div3">
    <h1>h1</h1>
    <p>pppppp</p>
    <h1>h1h1h1h1</h1>
</div>

pppppp是红色

8.伪对象选择器

#p1{
       height: 200px;
       width: 100px;
       background: #ccc;
     }
    #p1;first-line{
        color: red;
        }
   <p id="p1">
       哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
       哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
       哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
       哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
   </p>  
   显示出来的每一行不一点就是代码中写的字数,加了伪对象选择器,第一行哈哈哈。。。是红色。

伪类 伪对象区别?

伪类的对象是真实存在的,想给她设置样式的时候直接选中。
伪对象的对象是不存在的,相当于浏览器选中的一行哈哈哈,给它加了一个隐式的元素,对这个元素设置样式。

内联权重值 1000

常用的几个css样式

*表示通配符,所有标签都使用。

rgba( , , , )最后一个值是透明度 0-1 值越小越透明
opacity的值是会继承的,解决办法1:把两个div设置成兄弟,不是父子。

解决方法2:使用rgba()。

把background的属性写在一行 background: url("1.jpg") no-repeat rgba(80,80,80,0.5);

#div1{
        width: 200px;
        height: 200px;
        background: #ccc;
        text-align: center;
        line-height: 200px;
        }
     <div id="div1">哈哈</div>
     哈哈会水平垂直居中在灰色框中,但是line-height=height只能设置单行文本。
     
     #div1{
        height: 150px;
        width: 150px;
        background: #ccc;
        display: table;
     }
    #div2{
        display: table-cell;
        vertical-align: middle;
    }
    <div id="div1">
        <div id="div2">
               哈哈哈哈哈哈哈哈哈
               或或或或或或或或或或或或或或
               或或或或或或或或或或或或或或或或或或或</div>
        </div>
    </div>
    实现多行文本垂直居中
    
    text-decoration: none;可以去掉<a>下划线。
    text-indent :20px; 首行缩进20像素。

盒模型

网页中所有的元素都是框
行框:由内容大小撑起来的。

display: block转化成块级元素。

块框:垂直分布。

宽是自适应的,意思是占据父元素的剩余空间,高是内容的高度。
 可以设置宽高。
 display: inline转化成行级元素。    

display: inline-block 元素水平排列并且可以设置宽高。

margin设置一个值:上 下 左 右

两个值:上下 左右
      三个值:上 左右 下
      四个值:上 右 下 左

外边距合并问题

#a, #b{
        height: 100px;
        width: 100px;
        background: #f00;
    }
    #a{
        margin-bottom: 50px;
        }
    #b{
        margin-top: 30p取了较大值x;
        }
    <div id="a">a</div>
    <div id="b">b</div>
    兄弟关系,两个红框垂直分布,取了较大值,间距是50px。
    
    #a, #b{
        height: 100px;
        width: 100px;
        background: #f00;
    }
    #a{
        width :200px;
        height: 200px;
        }
    #b{
        margin-top: 30px;
        background: #0f0;
        }
    <div id="a">
        <div id="b"></div>
    </div>
    父子关系,父子会一起向下移动30px。
    解决方法: 1.给父元素加边框,设置边框透明也会有阴影。
              2.给父元素加下内边距,但是父元素会变宽,设置狂傲是给内容设置。
              3.给子元素加浮动 float: left;
              4.给子元素加绝对定位:poosition: absolute;
              5.给父元素加 overflow: hidden;
   
   去掉<!DOCTYPE html>在IE6下会生成怪异盒模型,设置的宽高包括内容,padding,border. 
   box-sizing: content-box; 标准浏览器下
   box-sizing: border-box; IE6浏览器下 宽高包括三部分。

定位

相对定位:相对于自己之前的位置
             不释放空间,后面的元素不会挤上来。    
    绝对定位:相对于最近已定位的祖先元素,不一定是父元素
             会释放空间,后面的元素会挤上来。  
    固定定位:相对于浏览器定位
             释放空间
             块级元素加了这个属性之后,宽度不再是自适应,而是由内容撑开。

浮动

#a,#b, #c{
         width: 100px;
         height: 100px;
         }
   #a{
           background: red;
           float: left:
          }
   #b{
           background: green;
          }
   #
           background: blue;
          }   
    <div id="a"></div>     
    <div id="b"></div>  
    <div id="c"></div>    
    红色会把绿色盖住
    如果全都向左浮动,三个快排列在左侧,从左向右 红 绿 蓝
    如果全都向右浮动,三个快排列在右侧,从右向左 红 绿 蓝
    
    float可以让块级元素横过来,display:block也可以让元素横过来,两者的区别?
    display:block 块之间会有间隙,float是紧贴着的。这个间隙是代码中不同的div换行导致的。
    inLine-block不会导致元素释放空间。浮动会导致元素空间释放,后面的挤上来。
    
    不想让某个元素浮动: clear: both;

元素塌陷问题

浮动导致元素塌陷问题

list-style: decimal数字
    
    #ul1{
        background: #ccc;
        list-style: none;
        }
    #ul1 li{
            background: #f00;
            float: left;
        }
    <ul id="ul1">  
        <li>item1</li> 
        <li>item2</li> 
        <li>item3</li> 
    </ul>   
    ul的高度变成0,因为子元素浮动,空间释放了,没有子元素撑着父元素,父元素没有高了。
    解决方法1:已知父元素高度直接加高度。
           2: 在列表项最后再加一个li,设置样式 float: none clear:both, 相当于新加一个空列表项,他不浮动,自己撑着空间。
           3:父元素加 overflow: hidden       
           overflow:hidden是解决溢出问题的,这场来说不能解决其他问题,但是他在这就是好使,这叫做css hack ,用特殊手段解决浏览器兼容性问题。

雪碧图

#div1{         
          width: 136px;
          height: 63px;
          background: url("1.jpg") no-repeat -152px -402px #ccc; 数字是小块图片的左、上外边距
          }
     <div id="div1"></div>     
     性能优化的一种方式

相关推荐