欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

css

程序员文章站 2022-06-30 15:06:19
CSS html补充: 有两个在css中常操作的标签,
标签。 相对于前面html中介绍的标签,他们是最没用的,因为他们最大的特点就是没有特点。而这个也造就它们的使用场景更加的广泛。如果用其他标签来包裹一个标签,往往会带有外层标签的某个特征,如标签会加粗文字,而这些我们特 ......

CSS

html补充:

有两个在css中常操作的标签,<div>和<span>标签。

相对于前面html中介绍的标签,他们是最没用的,因为他们最大的特点就是没有特点。而这个也造就它们的使用场景更加的广泛。如果用其他标签来包裹一个标签,往往会带有外层标签的某个特征,如<b>标签会加粗文字,而这些我们特征我们往往不需要,但是我们确实需要一个容器来装其他的标签,这时候div和span就会特别适合。好了,补充完了,接下来开始进入css的学习。

css概述

CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离

css的四种引入方式

1、行内式:

  在html的标签属性中用style属性,属性用引号包住,然后里面通过“键:值;键:值,.....”这样的方式来设置,不推荐  

<div style="width:20px; height:20px;background-color:red"></div>

 

2、嵌入式

  <head>标签里面加入<style>标签,在其中写入“标签名{键值对设置}”进行设置

<style>
    div{
        width:20px;
        height:20px;
        background-color: red;
    }
</style>

 

3、链接式

  建立一个css文件,在<head>标签中,写入<link href="test1.css" rel="stylesheet">,这个是先加载css的,推荐使用,这个没有限制次数

4、导入式

  导入式:建立一个css文件,在<head>标签中,写入<style>标签,在里面写"“@import "test1.css”;"这个是先加载html的,有限制次数

注:导入式会在整个网页装载完后再装载CSS文件,因此这就导致了一个问题,如果网页比较大则会儿出现先显示无样式的页面,闪烁一下之后,再出现网页的样式。这是导入式固有的一个缺陷。使用链接式时与导入式不同的是它会以网页文件主体装载前装载CSS文件,因此显示出来的网页从一开始就是带样式的效果的,它不会像导入式那样先显示无样式的网页,然后再显示有样式的网页,这是链接式的优点。

选择器

标签选择器

*{}:所有标签都设置

标签名{}:给相应的标签进行设置

#id名{}:给id对应的标签设置,id值定义的时候相当于身份证,不可重复

.class{}:根据类名来进行标签设置,class值定义的时候,相当于人名,可以重

组合选择器

例如:div.div1{}     这三个可以组合使用,中间连在一起,不能空格隔开

例如:div,.P{}                  几种东西要按一个设置,选择器中间用逗号隔开

例如:.div1 div2{} 如果要设置一个盒子里面的标签属性,先用选择器定位到盒子,然后一个空格加要设置的标签就可以

例如:.div1>.div3{}        只在一个盒子的儿子这个一层找,用“>”,孙子层的那些都不找

例如:div + p{}                只改变紧挨着前面的选择器,而且满足后面选择器的标签

属性选择器

在标签中可以插入自己的自定义的属性,如:chenduxiu="qingzuoxia ",这个属性需要在css的样式中设置

设置的格式是:[自定义属性名]{样式设置}。如果属性名有相同的就需要把属性值也写入[]中。属性标签值前面可以加入选择器,两者之间不加分隔符号

E[att]       匹配所有具有att属性的E元素,不考虑它的值,在style中写入[alex]{样式设计}

E[att=val]        匹配所有的att属性等于“val”的E元素

E[att~=val]      匹配有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素

E[att^=val]      匹配属性值以指定值开头的每个元素

E[att$=val]      匹配属性值以指定值结尾的每个元素

E[att*=val]      匹配属性值中包含指定值的每个元素

如果你表示看不懂的话,看下面我给出的例子。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <style>
 9         
10         span{
11             display: inline-block;  /*这个先不说,后面会介绍*/  
12             width:20px;
13             height:20px;
14             background-color: green;
15         }
16         div{
17             width:20px;
18             height:20px;
19             background-color: yellow;
20         }
21         
22         [chenduxiu]{
23             width:20px;
24             height:20px;
25             background-color: black;
26         }
27 
28         [chenduxiu='yes']{
29             width:20px;
30             height:20px;
31             background-color: red;
32         }
33     </style>
34 </head>
35 <body>
36     <span chenduxiu></span>
37     <div></div>
38     <div chenduxiu></div>
39     <div chenduxiu='yes'></div>
40 
41 </body>
42 </html>

 

生成效果是:

css

上面的看懂的话,你尝试在在第22行的”[chenduxiu]”改成div[chenduxiu]运行后会发现结果是这样的:

css

 

为什么会产生这种现象呢,这就要看后面说到选择器优先级了

选择器优先级

样式                                                                      权重

内联样式表(标签中的style属性)                1000

统计选择符中属性个数(#id)                      100

统计选择符中class属性的个数(.class)          10

统计选择符中html标签名个数(p)                   1

比如

样式                          权重

div                              10

.div1 .div2                 20

#div1 .div3                110

如果多个选择器要给一个标签设置不同的值,浏览器会先计算选择器的权重,取舍按照从左到右顺序进行比较。设置最大权重的。权重一样的,后来居上。如果不想要按照权重比,可以在设置的值后面加上!important ,如果两个都有!important的话,继续比较权重。  

上面遗留问题解答:

div[chenduxiu]是一个是一个标签选择器(div)和一个属性选择器([class),所以权重是10 + 1;

而[chenduxiu]是一个属选择器(class)所以权重是10

css的继承性

继承是css的一个主要特征。只是css继承性的权重是非常低的,是比普通元素的权重还要低的0。css的继承也是有限制的,有一些属性不能被继承,如border,margin,padding,background等

伪类

a:link {color: #FF0000}            /* 未访问的链接 */

a:visited {color: #00FF00}      /* 已访问的链接 */

a:hover {color: #FF00FF}        /* 鼠标移动到链接上 */

a:active {color: #0000FF}       /* 选定的链接 */

a:after{content:"Hello World"}     #表示在该标签后面加入后面字符串这个并不是改变文本,而是通过css的方式加入进来的,可以通过检查元素查看,可以在这个框中对这个加入的进行css设置

 

提示:

1、在 CSS 定义中,a:hover 必须被置于 a:link 和 a:visited 之后,才是有效的。

2、在 CSS 定义中,a:active 必须被置于 a:hover 之后,才是有效的。

3、伪类名称对大小写不敏感。

4、实际使用中,hover,after等不局限于在a标签中使用他们在后面会有更有用的使用场景

例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    a:link{
        color: red;
    }
    a:visited {
        color: blue;
    }
    a:hover {
        color: green;
    }
    a:active {        /*这个是鼠标左键按住不动时显示*/
        color: yellow;
    }
    a::after{content: ",你好"}
    </style>
</head>
<body>
    <a href="#">我是一个链接</a>
</body>
</html>

 

这个是做好的例子,有兴趣的试验一下

css常用属性

颜色属性

color:red

color:#ffee33                            #可以上网找到颜色代码表来查看 +

color:rgb(255,0,2)                    #RGB颜色

color:rgba(255,3,2,0.1)            #第四个图片是设置透明度的,范围是1到0,越小越透明

字体属性

font-size:20px                  #设置字号

font-family:"宋体" #设置字体,有的浏览器不支持中文的,有需要的网上找到对应的英文表示

font-weight:lighter/bold/border/ #设置字体粗细,这个很模糊,也可以写用像素来设置

font-style:italic/oblique          #斜体,这两个都可以设置斜体。

背景属性

background-color                                      #背景颜色

background-image:url("图片路径")      #如果背景图片的小,盒子大,会不断复制图片,从左到右,从上到下平铺到盒子上

background-repeat:no-repeat              #不让图片平铺,设置为repeat-x,则是横向平铺,纵向平铺同理

background-position:center                  #图片放到网页的中心,前面参数控制横向的,后面的控制列的,center也可以用数字加px代替,进行图片位置设置,这个其实是一个缩写,控制在中间的应该是两个center center参数,这里省略了一个,可以设置为0 center表示只是y轴的居中,还有一个使用方法就是将一些背景放到一个整体的图片中,然后在页面中设置一个空间,通过不断的变换他的位置实现背景的替换。详细的看网址

 

这些参数都可以放到background:后面一起设置

比如:background:no-repeat 0 -100px url(“图片路径”);

文本属性

text-align:center; #可以将这个文字在容器中横向居中

line-height:20px;    #这个数字大小设置为盒子的大小。从效果上来看可以实现文字的纵向居中,设置文本行高,通俗的来讲,文字高度加上文字上下的空白区域的高度,50%基于文字大小的百分比

vertical-align:-4px; #设置元素内容的垂直对齐方式,只对行内元素有效,对块级元素无效。

text-indent:150px; #首行缩进

letter-spacing:10px;       #字符间距

word-spaceing:20px;      #单词和单词之间的距离

text-transform:capitalize;      #所有单词首字母大写

将文字放到盒子中间的例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div{
            width:200px;
            height: 50px;
            background-color: red;
            line-height: 50px;      /*设置成盒子一样的高度*/
            text-align: center;
        }
    </style>
</head>
<body>
    <div>我是一个字符串</div>
</body>
</html>

 

边框属性

border-color: blueviolet; #设置颜色

border-style: solid; #设置样式

border-width: 5px; #设置宽度

 

border 5px solid blue               #合起来写

如果要对特定的边进行设置的话可以用border-top,border-bottom,border-left,border-right来进行设置

列表属性

<ol><ul>这些可以通过list-style属性来进行设置。

最常用的是:list-style: none;      #用来将它的样式去掉,后期用css进行设计

display属性

display:block;          #内联标签不可以设置宽高一些属性,可以用这个属性值将其设置成为一个块级标签

display:inline;          #块级变成内联

display:inline-block;       #内联和块级标签的东西都可以用,这样设置的标签可以按块级标签一样设置宽高,也可以像内联标签一样同行显示

display:none;                  #设置的标签位置丢失,会隐藏起来

 

将内联设置成为块级元素的时候,会在块的周围产生间隙,去除间隙的方法是

设置margin:-3px                 #数字根据实际情况调整,而margin是什么,后面的盒子概念会给出答案。

盒子概念

在盒子标签中设置宽和高是设置的盒子里面内容的大小,整个盒子从里到外依次是:内容(自己设置的宽和高)》 padding(内容到外边框的距离)》 border(边框的宽度)》 margin(盒子和其他的内容之间的距离)

css

找外边距的时候,找附近的的元素进行排列

margin属性:

margin:10px 5px 15px 20px;

    #上,右,下,左 (顺时针顺序)其他的padding这些也是这样的

margin:10px 15px 20px;   #上,左右,下

margin:10px 5px;                        #上下,左右

margin:10px;                               #上,右,下,左

margin:0 auto;            #设置该标签到父类标签的横向的中        

关于margin的塌陷问题

兄弟级的边界塌陷

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .div1{
            width:100px;
            height: 100px;
            background-color: red;
            margin-bottom: 50px;
        }
        .div2{
            width:100px;
            height: 100px;
            background-color: yellow;
            margin-top: 100px;
        }

    </style>
</head>
<body>
        <div class="div1"></div>
        <div class="div2"></div>
</body>
</html>

 

结果是:

css

很明显,两个之间的间隔取的是较大的那个

父级的边界塌陷

在说这个之前,你们先自己做一个例子:

css

如果没有出现问题请跳过这部分,如果出现可以看一下下面的解释。

如果父级的div中没有border(不能为0),padding,文本内容,子级的div的margin会一直向上找,直到找到某个标签包括border,padding,内容中的其中一个,然后按此div进行margin。如果这个盒子在包括它的最外层盒子中没有找到,就找最外层盒子外面的最近的盒子(可以没有那三个属性)进行margin距离排列。注意:这个不影响兄弟盒子间的margin设置

      关于盒子塌陷的几种解决方法

    1. 最简单,直接,粗暴的方法就是盒子大小写死,给每个盒子设定固定的width和height,直到合适为止,这样的好处是简单方便,兼容性好,适合只改动少量内容不涉及盒子排布的版面,缺点是非自适应,浏览器的窗口大小直接影响用户体验。
    2. 往父盒子里添加文本内容也就是标签体
    3. 给父盒子加border边框,边框不能为0px
    4. 给父盒子添加padding属性
    5. 给父盒子添加overflow属性。
      overflow:auto; 或者overflow:hidden;

例如:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
        *{
           margin: 0px;
            padding: 0px;
        }
        .div1{
           width:200px;
           height:200px;
          background-color: red;
           /* border: 1px solid black;   */
          /* padding: 1px; */
          overflow: auto; 
         }
      .div2{
           width:100px;
          height: 100px;
           background-color: blue;
           margin-top: 20px;
        }
</style>
</head>
<body>
      <div class="div1">
      <div class="div2"></div>
</div>
</body>
</html>

 

文档流

所谓文档流就是元素布局排版布局的时候,元素会自动从左到右,从上到下的流式排列

脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位

只有绝对定位absolute和浮动float才会脱离文档流

float浮动

float:left;         #浮动到父盒子的左边

float:right;#浮动到父盒子的右边

浮动设置的时候看的是这个标签上面的兄弟标签,如果是漂浮的,它也按顺序漂浮,如果它的上面的兄弟标签不是浮动的,它就在原位置浮动

 

clear: none(允许两边有浮动对象) | left | right |both(不允许两边有浮动对象)      #清除浮动,如果一个盒子设置了clear left,而这个盒子1的的左边正好是个浮动对象盒子2,盒子1就会下移,不和盒子2在一行,盒子1的的右边正好是个浮动对象盒子3,盒子1设置了clear:right,,盒子1的位置不动,因为clear并不能影响其他盒子

当一个盒子里面有两个子标签都漂浮起来,它就会失去原来的位置

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .div1{
            border: 1px solid black;
            clear: both;
            width: 300px;
        }
        .div2{

            width:100px;
            height: 100px;
            background-color: red;
            float: left;
        }
        .div3{

            width: 100px;
            height: 100px;
            background-color: yellow;
            float: right;
        }
    </style>
</head>
<body>
    
    <div class="div1">
        <div class="div2"></div>
        <div class="div3"></div>
    </div>
</body>
</html>

 

结果如下:

css

可以看到他们的父盒子没有位置了,只有两个像素的边框

有一个办法可以解决这个问题就是:

往标签里面添加一个去除浮动的标签,他会保证当盒子的所有元素都是浮动的话,能保证这个空盒子还占据位置。

css

结果如下

css

但是这样写不是很好,因为在内容中添加了一个无用的东西,下面是人们经常用的使用伪类的方法来解决这个问题:

.类名:after {

content:"";      #在类名为clearfix的元素后面加入内容,内容不写

display:block;  #把这个元素变为块级元素。

clear: both;     #清除两边浮动

visibility:hidden;      #可见度为隐藏,注意它和display:none是有区别的,这个仍占据空间,只是看不到而已

line-height:0;

height:0;

font-size:0;

}

 

补充:

.clearfix{*zoom:1;}        #这个是针对IE6的,因为IE6不支持:after伪类,这个神奇的zoom:1让IE6的元素可以清除浮动来包裹内容元素

position定位属性

position:static;       #默认值,无定位,设置标签属性left和top等值是不起作用的

position:relative;    #相对定位,相对于自己文档流中的位置进行偏移,其在文档流中的位置还继续保持,位置通过left,right,top,bottom设置,相对是左上角顶点。一般父级的标签有很多子标签,就设置这个,让他们进行定位。

position:absolute;  #绝对定位,从文档流中删除,并相对于自己最近的已定位祖先元素(设置的position的盒子)进行定位,如果没有祖先元素,那么就以body标签作为参照,无论原来它是何种类型的框,都会生成一个块级标签。如果给这个盒子设置margin属性的话,是相当于它原来的位置进行移动的,位置通过left,right,top,bottom设置

position:fixed;                  #以窗口为参照点,无论滚动条怎么移动,它在页面的位置不变,回到顶部就是用的这个

 

 

关于css的介绍差不多了,可以尝试的做一个小型的页面看看了,下面链接有已经做好的网页,还有相应的素材,可以下载尝试做一下(里面有很多的鼠标悬浮效果,可以先试试看,还有再次声明本人不从事前端,审美也比较次,就是做着玩,务吐槽)。

https://files.cnblogs.com/files/kuxingseng95/css.rar

效果大致如下:

css