• CSS 基础


    CSS(Cascading Style Sheets),层叠样式表,用于控制网页样式,使网页表现和数据内容分离。

    1. css 的引入方式

    1. 行内式

    行内式即在标签内部通过 style 属性来设定 css 样式,不推荐使用

    <p style='color: red'></p>
    

    2. 嵌入式

    嵌入式是将 css 样式定义在 head 标签中的 style 标签里

    <head>
        <style>
            p{color: red;}
        </style>
    </head>
    

    3. 链接式

    通过 link 标签将 css 文件链接到 HTML 文档中,link 标签在 head 标签中,推荐使用

    <link href='xxx.css' rel='stylesheet' type='text/css'>		/*href 为 css 文件路径*/
    

    4. 导入式

    导入式也是在 head 标签中导入,但是若网络有延迟,则会导致 HTML 文档与 CSS 文件短暂的分离,在引入数量上也有限制

    <style type='text/css'>
    	@import'xxx.css';
    </style>
    

    2. CSS 选择器

    如果要为某个标签设置样式,首先需要找到该标签,而 css 选择器就可以找到标签。

    css 选择器主要可分为四类:基本选择器、组合选择器、属性选择器以及伪类选择器

    2.1 基本选择器

    基本选择器包含:通用、标签、类以及 id 选择器。

    • 通用选择器: 利用通配符 * 匹配所有标签(特殊时候有用)
    • 标签选择器: 通过标签名定位标签
    • 类选择器: 利用标签的 class 属性定位标签,在属性名前加点(.)
    • id 选择器:利用标签的 id 属性来定位标签,在属性名前加井号(#)
    <div class="box">
        <h1>基础选择器</h1>
        <p>通用、标签、类以及id选择器</p>
    </div>
    
    <div id="a">
        <p>伪类选择器</p>
    </div>
    
    <style type="text/css">
        .box{
            background: red;
        }
    
        #div{
            font-size: 12px;
        }
    </style>
    

    2.2 组合选择器

    组合选择器可以选择多个标签元素,能够选择子、后代、毗邻元素(只能往下)。

    • 多元素选择器(a,b): 同时匹配a、b 标签,中间以逗号分隔,当有几个标签要设置为相同样式时,可以选择这种方式,可以节省代码量。
    • 后代元素选择器(a b): 匹配 a 元素下的后代 b 元素,中间以空格分隔。
    • 子元素选择器(a > b): 匹配 a 元素的子元素 b,中间以大于号分隔。
    • 毗邻元素选择器(a + b): 匹配 a 元素的毗邻元素 b ,中间以加号分隔,只能往下匹配。
    <div class="box1">
        <h1>基础选择器</h1>
        <p>通用、标签、类以及id选择器</p>
    </div>
    
    <p>组合选择器</p>
    
    <div id="a">
        <a href="www.python.org">Python</a>
    </div>
    
    <style type="text/css">
    
        .box1,p{
            color: blue;
        }
    
        #a>a{
            font-size: 30px;
        }
    
        .box1 h1{
            background: red;
        }
    </style>
    

    2.3 属性选择器

    通过匹配标签属性来定位标签元素,可以是自定义属性。

    a[attr]			匹配所有具有 attr 属性的 a 元素,a 可省略
    a[attr=val]		匹配所有 attr=val 属性的 a 元素
    a[attr~=val]	匹配所有 attr 属性具有多个空格分隔的值,其中一个值为 val 的 a 元素
    a[attr^=val]	匹配 attr 属性值以 val 开头的 a 元素
    a[attr$=val]	匹配 attr 属性值以 val 结尾的 a 元素
    a[attr*=val]	匹配属性值中包含 val 的 a 元素
    
    
    <div attr="val" class="box1">
        <h1>基础选择器</h1>
        <p>通用、标签、类以及id选择器</p>
    </div>
    
    <p>组合选择器</p>
    
    <div attr="con val">
        <a href="www.python.org">Python</a>
        <p>属性选择器</p>
    </div>
    
    
    <style type="text/css">
    
        div[attr='val']{
            font-size: 39px;
        }
    
        div[attr~='con']{
            color: red;
        }
    </style>
    
    

    2.4 伪类选择器

    css 伪类(Pseudo-classes)用于给选择器添加一些特殊效果,伪类指的是标签的不同状态。

    语法

    伪类的语法:

    selector:pseudo-class{property:value}
    
    

    css 类与伪类搭配使用:

    selector.class:pseudo-class{property:value}
    
    

    锚伪类

    锚伪类可以对链接的不同状态以不同的方式显示:

    a:link {color: #FF0000}		/* 未访问的链接 */
    a:visited {color: #00FF00}	/* 已访问的链接 */
    a:hover {color: #FF00FF}	/* 鼠标移动到链接上 */
    a:active {color: #0000FF}	/* 选定的链接 */
    
    

    Tips: a:hover 必须在 a:link 和 a:visited 之后才有效,a:active 必须在 a:hover 之后才有效


    伪类与 CSS 类

    伪类与 CSS 类搭配使用:

    a.lk : visited{color: red;}				<!--链接a访问过后为红色-->
    <a class='lk' href='xxx.com'>xxx</a>
    
    

    :first-child 伪类

    可以用 :first-child 伪类来选择元素的第一个子元素

    示例 1 - 匹配第一个 p、li 元素

    div>
        <p>These are the necessary steps:</p>
        <ul>
            <li>Intert Key</li>
            <li>Turn key <strong>clockwise</strong></li>
            <li>Push accelerator</li>
        </ul>
        <p>Do <em>not</em> push the brake at the same time as the accelerator.</p>
    </div>
    
    

    匹配第一个 p 元素,和第一个 li 元素,规则如下:

    p:first-child {font-weight: bold;}			/*加粗*/
    li:first-child {color: red;}				/*变红*/
    
    

    示例 2 - 匹配 p 的子元素中第一个 i 元素

    <div>
        <p><i>text</i>some</p>
        <p><i>hello</i>Python</p>
    </div>
    
    
    p>i:first-child{font-size:20px;}
    
    

    :before after 伪类

    在某个元素前或后面插入内容。

    <div>
        <p>These are the necessary steps:</p>
        <ul>
            <li>Intert Key</li>
            <li>Turn key <strong>clockwise</strong></li>
            <li>Push accelerator</li>
        </ul>
        <p>Do <em>not</em> push the brake at the same time as the accelerator.</p>
    </div>
    
    
    /*在div中的第一个 p 元素前插入 hello,并且将颜色设置为红色*/
    div>p:first-child:before{
        content: 'hello';
        color: red;
    }
    
    

    2.5 CSS 优先级与继承

    CSS 优先级

    CSS 优先级即在浏览器中被解析的先后顺序,根据不同规则的相对权重来排序:

    • 内联样式表权重最高:1000,<div id="box3" style="color: red;">
    • id 选择器权重: 100
    • class 属性选择器权重: 10
    • 标签选择器权重: 1

    需要注意的是权重可以相加:

    <div class='box1'>
        <div class="box2">
            <div id="box3">
                CSS 优先级比较
            </div>
        </div>
    </div>
    
    
    <style>
        #box3{				/*权重 100*/	
            color: blue;
    	}
    
    	.box1 .box2{	/*权重 10 + 10*/
        	color: red;
    	}
    </style>
    
    

    box3 权重 100,.box1 .box2 为 20,因此最终显示的是蓝色。

    • 如果在样式后面添加 !import,则优先级最高
    • 如果两个都有 !import,则比较权重
    • 如果权重一样,则比较出现顺序,后者高于前者
    • 继承的样式优先级最低

    CSS 继承

    继承是 CSS 的一个主要特性,即后代没有定义样式,它会继承祖先的样式。继承的权重最低,只要给其任意定义一个样式,都会覆盖掉继承来的样式。

    <div class="box1">
        <p>继承祖先颜色</p>
    </div>
    
    
    .box1{
    	color: red;
    }
    
    

    p 标签没有定义自己的颜色,它会继承父类 div 的颜色。但是有些熟悉不能被继承,如:border、margin、padding、background 等。

    3. 常用属性

    3.1 颜色

    color: red;
    /*color: #333333;         十六进制代码颜色*/
    /*color: rgb(255, 0, 100);    红绿蓝配比(范围0-255)*/
    /*color: rgba(255, 0, 100, 0.6);  第四个参数为透明度(0-1)*/
    
    

    3.2 字体

    属性 描述
    font-size 字体尺寸(20px/50%/larger/smaller/1.8em)1em=16px
    font-family 字体家族("Times New Roman", Times, serif;)若第一种不支持,将尝试下一种字体
    font-style 字体风格(normal/italic/oblique 正常、斜体、文字向一边斜)
    font-weigh 字体粗细(normal/bold/bolder/lighter 正常、粗体、更粗、更细),也可以定义数字 100-900

    3.3 背景

    • background-color:背景颜色(颜色名称、十六进制、rgb)
    • background-image:背景图片
    • background-repeat:背景图片平铺
    • background-attachment:
    • background-position:定位

    背景图片

    语法:

    background-image: url("1.png");
    
    

    默认平铺整个实体(边框),若图片尺寸小于边框尺寸,则会呈现多个小图片平铺边框,可以使用 background-repeat:no repeat 属性消除。


    背景图片平铺与定位

    背景图片平铺:

    background-repeat: no repeat;		/*不平铺*/
    background-repeat: repeat-x;		/*平铺水平方向*/
    background-repeat: repeat-y;		/*平铺垂直方向*/
    
    

    背景图片定位:

    /*第一个参数为水平方向(left center right),第二个为垂直方向(top center bottom),也可以是像素*/
    background-position: right top;			/*图片在右上角*/
    background-position: 20px 30px;	
    
    

    Tips:如要将背景图片加在 body 上,需要加一个 height,否则无法撑起图片。要是又设置 width,那么还要设置 html。

    示例 1 - 布局抽屉新热榜图标

    display:inline-block:可以将内联元素设置为具有既有内联(在一行),又有块级元素(可以设定长宽)的特性。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            span{
                display: inline-block;
                 18px;
                height: 20px;
                background-image: url("http://dig.chouti.com/images/icon_18_118.png?v=2.13");
                background-position: 0 -100px;
            }
        </style>
    </head>
    <body>
        <span></span>
    </body>
    </html>
    
    

    3.4 文本

    属性 描述
    font-size 文本大小(单位:px、em)
    text-align 水平对齐(居中:center,left、right、px)
    line-height 行高(px、百分比),即文字高度加文字上下的空白区域高度
    vertical-align 垂直对齐(center,left、right、px),仅对行内元素有效
    text-indent 首行缩进(单位:px、em),2em 为缩进两个字符
    letter-spacing 字符间距(单位:px、em)
    word-spacing 字间距(单位:px、em)
    text-transform 文本转换(uppercase、lowercase、标题化:capitalize)
    text-descoration 文本修饰,主要用于删除链接下划线(a{text-decoration:none;})
    text-shadow 文字阴影(text-shadow: 2px 2px black;)三个参数:水平、垂直阴影位置、颜色

    文本修饰

    a{text-decoration: none;}			/*删除链接下划线*/
    p{text-decoration: overline;}		/*文本上划线*/
    p{text-decoration: line-through;}	/*删除线*/
    p{text-decoration: underline;}		/*下划线*/
    
    

    文本空白处理

    white-space: nowrap;		/*空白不换行,直到遇到 br 为止*/
    white-space: pre-warp;		/*保留空白符序列,但是正常换行*/
    white-space: preline			/*合并空白符序列,但保留换行符*/
    
    

    3.5 边框

    边框样式

    border-style: none;			/*dotted:点线,dashed:虚线,solid:实线*/
    border-style: double;				/*两个边框,两个边框宽度和 border-width 值相同*/
    
    

    边框宽度

    border- 2px; 			/*0.1 em	thick  medium	thin */
    
    

    边框颜色

    border-color: red/rgb/十六进制			/*必须与 border-style 先设置*/
    
    

    边框简写

    border: 2px solid red;			/*宽度、样式、颜色*/
    border-top: 1px solid black;	/*单独设置上边框*/
    border-bottom: 1px solid black;
    border-left: 1px solid black;
    border-right: 1px solid black;
    
    

    3.6 列表

    有序列表,无序列表的列表项标记样式:

    ul,ol{list-style: decimal-leading-zero;}		 01、02、03
    circle		空心圆
    disc		实心圆
    square		方型实心
    lower-alpha		字母(abc)
    upper-roman		罗马数字
    none			无
    
    

    列表项标记样式为图像

    list-style-image: url('xxx.gif');	
    
    

    3.7 display 显示

    display 属性可以用来隐藏某个元素,还可以将块级元素和内联元素互相转换。

    display: none;			隐藏某个元素,并且不会占用任何空间
    visibility: hidden;		隐藏某个元素,但仍然占用原来的空间
    display: inline;		将块级元素转为内联元素
    display: block;			将内联元素转为块级元素
    display: inline-block;	 既拥有块级元素的可以设置长宽功能,又拥有内联元素的可以在一行显示功能
    
    

    display: inline-block; 常用来排列布局,但是两个(边框)会有间隙,不过可以通过调节 word-spacing 属性来去掉间隙:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Display</title>
        <style type="text/css">
    
            .box3 .box1,.box2{
                display: inline-block;
                 100px;
                height: 100px;
                border: 1px solid black;
                background-color: aqua;
            }
            
     /*需要设置父亲的属性,而不是这两个(边框)的属性*/
            .box3{
                word-spacing: -5px;
            }
        </style>
    </head>
    <body>
        <div class="box3">
            <span class="box1">
                hello
            </span>
    
            <span class="box2">
                python
            </span>
        </div>
    </body>
    </html>
    
    

    4. CSS 盒子模型

    所有 HTML 元素都可以看做盒子,CSS 盒模型本质是一个盒子,封装周围的 HTML 元素,包括:内边距,外边距,边框以及实际内容。

    不同部分说明:

    • margin(外边距):控制元素与元素之间的距离
    • padding(内边距):控制内容与边框的距离
    • border(边框):围绕在内边距与内容外的边框
    • content(内容):实际内容

    内外边距都有四个方向(top、bottom、left、right):

    margin-top: 20px;		顶部外边距 20px
    margin: 20px;			四个方向外边距都设置为 20px
    padding-left: 30px;		左边内边距 30px
    padding: 30px;			四个方向内边距都设置为 30px
    
    

    简写:

    padding: 10px 20px 50px 40px;		上右下左(顺时针)
    padding: 10px 10px 10px;			上右左 下(0)
    padding: 10px 10px;					上下 右左
    padding: 10px;						上右下左
    
    

    元素宽度和高度

    当你指定一个元素的宽度和高度是,只是设置了内容区域的宽度和高度,实际元素的尺寸还需要加上内外边距,边框。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8"> 
            <title>CSS 盒子模型(runoob.com)</title>
            <style>
                div {
                    background-color: lightgrey;
                     300px;
                    border: 25px solid aqua;
                    padding: 25px;
                    margin: 25px;
                }
            </style>
        </head>
        <body>
            <h2>盒子模型演示</h2>
            <p>CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。</p>
            <div>这里是盒子内的实际内容。有 25px 内间距,25px 外间距、25px 边框。</div>
    </body>
    </html>
    
    

    实际宽度= 300px + 50px(左右内边距)+ 50px(左右边框)+ 50px(左右外边距)= 450px。

    只有一个 300px的空间,设置一个只有300像素的元素:

    {
        260px;
        padding:10px;
        border:5px solid gray;
        margin:5px;
    }
    
    

    去掉body 与 html的间隙

    浏览器会默认给body 与 html 间有很小的间隙,我们可以通过操作 margin 来去掉:

    body{
        border: 1px solid red;		/*设置一个边框以示区分*/
        margin: 0;
    }
    
    

    边界塌陷

    • 兄弟元素:若两个块级元素,上一个元素设置(margin-bottom: 20px;),下一个元素设置(margin-top: 40px;),那么会默认选择 margin 里最大值显示,即 40px。
    • 父子元素:如果父级元素中没有(border,padding,inline content,或内容)中的任何一个,那么子级的 margin 会一直向上找,直至找到某个元素包含以上属性,然后以这个元素为参照进行 margin。
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8"> 
    <title>菜鸟教程(runoob.com)</title>
    <style>
    	.box1{
    		 100px;
    		height: 100px;
    		background-color: darkorchid;
    		
    	}
    	/*若 box2 中没有设置 border,padding,inline content,内容中任意一个,那么它的子元素(p1、p2)设置margin 会越过它,向上找。这里是以 box1 为参照。*/
    	.box2{
    		background-color: aqua;
    		 300px;
    		height: 300px;
    		/*border: 1px solid black;*/
    	}
    	
    	.p1,.p2{
    		 100px;
    		height: 100px;
    		background-color: darksalmon;
    	}
    	.p1{
    		margin-top: 60px;
    	}
    </style>
    </head>
    
    <body>
    	<div class='box1'></div>
    	
    	<div class='box2'>
    		<p class='p1'>Python</p>
    		<p class='p2'>CSS</p>
    	</div>
    
    </body>
    </html>			
    
    

    5. 浮动

    5.1 float 属性

    block 元素和 inline 元素在文档流中的排列方式

    • block:独占一行,多个另起新行,默认宽度填满父元素宽度,可设置 width、height、margin、padding属性(div、form、table、p、pre、h1~h5、dl、ol、ul 等)
    • inline:多个元素排成一行,其宽度为内容尺寸,不可设置 margin、padding(span、a、strong、em、label、input、select、textarea、img、br等)。

    文档流

    文档流就是元素布局过程中,自动从左往右,从上往下流式排列。使用绝对定位(absolute)和浮动(float)可以将元素脱离文档流。


    浮动

    浮动的框可以向左或向右移动,直至它的外边缘碰到包含框或另一个浮动框的边框停止。由于浮动框不在普通文档流中,因此后面的元素将会往上移动到浮动框下,占据其原来位置。

    CSS 通过 float 属性来实现块级元素浮动效果,属性值为:

    float: left;	控制块元素左浮动
    float: right;	控制块元素右浮动
    
    

    块级元素默认独占一行,通过对其进行设置浮动可以实现一行显示:

    <div class='box1'></div>
    <div class='box2'></div>
    
    
    .box1{
    		background-color: red;
    		 100px;
    		height: 100px;
    		float: left;	/*对box1 设置向左浮动*/
    	}
    	
    .box2{
        background-color: #5857ff;
         100px;
        height: 100px;
    }
    
    

    我们给 box1 设置了向左浮动,发现 box2 不见了。其实 box2 已经和 box1 在同一行了,只是被压在 box1 下面,可以理解为 box2 漂浮在 box1 上面。

    解决办法:给 box2 也添加浮动即可:

    .box2{
        background-color: #5857ff;
         200px;
        height: 200px;
        float: left;
    }
    
    


    示例 1 - 两个块级元素分布于容器左右两端:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8"> 
    <title>左右浮动</title>
    <style>
    	.contain{
    		 400px;
    		height: 200px;
    		background-color: #cccccc;
    	}
    	
    	.box1{
    		background-color: red;
    		 100px;
    		height: 100px;
    		float: left;		/*box1 设置左浮动*/
    	}
    	
    	.box2{
    		background-color: #5857ff;
    		 100px;
    		height: 100px;
    		float: right;		/*box2 设置右浮动*/
    	}
    </style>
    </head>
    
    <body>
    	<div class='contain'>
    			<div class='box1'></div>
    			<div class='box2'></div>
    	</div>
    </body>
    
    </html>
    
    

    总结: 要多个块级元素在一行显示,那这几个块级元素都要设置 float 属性。

    5.2 清除浮动

    CSS 采用 clear属性来清除块级元素浮动效果,该属性值为:

    clear: left;	清除左浮动
    clear: right;	清除右浮动
    clear: both;	清除两端浮动
    
    

    在上面我们对 box1 设置了左浮动,紧跟后面的 box2 虽然没有设置浮动,但也跟 box1 显示在同一行(只是被box1覆盖了)。这是因为 box1 设置了浮动,导致它已经脱离了正常的文档流(漂浮在原来位置上空),box2 被顶上去,覆盖到了原来 box1 所在的文档流的位置。

    由此可知,一个紧跟在具有浮动属性的块级元素后面的块级元素,即使它不想和它前面的块级元素显示在同一行,也会受到前面块级元素浮动属性的影响,被压在前面块级元素下方。

    解决办法:使用 clear 属性清除浮动属性。

    .box1{
    		background-color: red;
    		 100px;
    		height: 100px;
    		float: left;	/*对box1 设置向左浮动*/
    	}
    	
    .box2{
        background-color: #5857ff;
         100px;
        height: 100px;
        clear: left;		/*对box2 前面的块级元素 box1 消除浮动属性*/
    }
    
    

    对 box1 设置了消除浮动属性,使得 box1、box2 依旧分布在两行,不在同一行显示,就像没有使用过浮动属性一样。


    clear 属性配合伪类消除浮动

    给要清除浮动的元素,定义一个父类(div class='clearfix'>),然后将其后面的元素设置为块级元素,并清除左右两端的浮动效果,语法如下:

    .clearfix:after{
        content: "";
        display: block;
        clear: both;
    }
    
    
    <div class="clearfix contain">
    		<div class="box1"></div>
    		<div class="box2"></div>
    </div>
    
    <div class="box3"></div>
    
    
    body{
        margin: 100px;
    }
    
    .contain{
         400px;
        background-color: #cccccc;
    }
    
    .box1{
         100px;
        height: 100px;
        background-color: red;
        float: left;
    }
    
    .box2{
         100px;
        height: 100px;
        background-color: #5857ff;
        float: right;
    }
    
    .box3{
         500px;
        height: 100px;
        background-color: yellow;
    }
    /*clear 属性与伪类搭配使用消除浮动*/
    .clearfix::after{	
        content: "";
        display: block;
        clear: both;
    }
    
    

    box1、box2 分别左右浮动,其父级 contain 只有 width,发现 box3 会直接被压在 box1、box2 下方。对其父级 contain(clearfix)设置消除左右两端元素浮动,box3 就自己单独显示一行。


    overflow 属性

    也可以通过设置 overflow 属性消除浮动效果(不过有局限性):

    .content{overflow: hidden;}
    
    

    5.3 浮动实例

    使用 float 创建一个没有表格的网页,包含(网页页面、页脚、左边侧边栏、和主要内容)

    <!DOCTYPE html>
    <html>
    <head>
        <title>浮动</title>
        <link rel="stylesheet" type="text/css" href="float.css">
    </head>
    
    <body>
        <ul class="topmenu">
            <li><a href="#" class="active">首页</a></li>
            <li><a href="#">新闻</a></li>
            <li><a href="#">联系我们</a></li>
            <li><a href="#">关于我们</a></li>
    
        </ul>
    
        <div class="clearfix">
            <div class="column sidemenu">
                <ul>
                    <li><a href="#">HTML / CSS</a></li>
                    <li><a href="#">JavaScript</a></li>
                    <li><a href="#" class="active">服务端</a></li>
                    <li><a href="#">数据库</a></li>
                    <li><a href="#">移动端</a></li>
                    <li><a href="#">XML 教程</a></li>
                    <li><a href="#">ASP.NET</a></li>
                    <li><a href="#">Web Service</a></li>
                    <li><a href="#">开发工具</a></li>
                    <li><a href="#">网站建设</a></li>
                </ul>
            </div>
    
            <div class="column content">
                <div class="header">
                    <h1>Python 3 教程</h1>
                </div>  
    
                <p>
                    Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容。
                </p>
                <p>
                    本教程主要针对Python 3.x版本的学习,如果你使用的是Python 2.x版本请移步至Python 2.X版本的教程。
                </p>
    
                <p>
                    Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容。
                </p>
                <p>
                    本教程主要针对Python 3.x版本的学习,如果你使用的是Python 2.x版本请移步至Python 2.X版本的教程。
                </p>
            </div>
        </div>
    
        <div class="footer">
            <p>底部内容</p>
        </div>
    </body>
    </html>
    
    
    /*float.css*/
    
    *{
        box-sizing: border-box;
    }
    
    body{
        margin: 0;
    }
    
    .header{
        text-align: center;
        color: white;
        background-color: #2196F3;
        padding: 15px;
    }
    
    .footer{
        text-align: center;
        color: white;
        background: #444;
        padding: 15px;
    }
    
    /*顶部菜单*/
    .topmenu{
        background-color: #777;
        padding: 0;
        margin: 0;
        list-style: none;       /*去掉列表前面的点*/
        overflow: hidden;       /*消除左右浮动*/
    }
    
    .topmenu li{                /*列表项左浮动*/
        float: left;
    }
    
    .topmenu li a{
        display: inline-block;         /*转换为inline-block,使其可以设置宽度*/
        color: white;
        padding: 16px;              /*内容撑大(内边距)*/
        text-decoration: none;      /*去掉链接下划线*/
        text-align: center;
    }
    
    .topmenu li a:hover{
        background: black;      /*鼠标移动到链接上的颜色*/
    }
    
    .topmenu li a.active{       /*固定在某一处的颜色*/
        background: #4CAF50;
        color: white;
    }
    
    /*侧边栏*/
    .sidemenu{
         25%;
    }
    
    .content{
         75%;
    }
    
    .column{
        float: left;
        padding: 15px;
    }
    
    .clearfix::after{
        content: "";
        clear: both;
        display: block;
    }
    
    .sidemenu ul{
        list-style: none;
        margin: 0;
        padding: 0;
    }
    
    .sidemenu li a{
        display: block;
        text-decoration: none;
        color: #666;
        background-color: #eee; 
        margin-bottom: 4px;
        padding: 8px;
    }
    
    .sidemenu li a:hover{
        background-color: #555; 
        color: white;
    }
    
    .sidemenu li a.active{
        background-color: #008cBA;
        color: white;
    }
    
    

    6. 定位(position)

    position 属性指定了元素的定位,它有五个值:static、absolute、relative、fixed以及sticky。

    父亲设置为 releative,儿子设置为 absolute,(儿子找对父亲定位)

    6.1 static 定位

    默认值,不能用作定位,设置 left、top 不起作用。

    6.2 relative 定位

    relative 相对定位,相对该元素在文档流中原来的位置定位。

    • 只是表面上移动,实际还在文档流中
    • 别的元素无法占据其位置
    <div class="contain">
        <div class="box1">
            盒子1
        </div>
    
        <div class="box2">
            盒子2
        </div>
    
        <div class="box3">
            盒子3
        </div>
    </div>
    
    
    .contain{
         200px;
        height: 400px;
        background-color: aqua;
        margin-left: 200px;
    }
    
    .box1{
         100px;
        height: 100px;
        background-color: red;
    }
    
    .box2{
         100px;
        height: 100px;
        background-color: pink;
        /*position: relative;*/			/*设置相对定位, 向右偏移200px,向下偏移200px*/
        /*left: 200px;*/
        /*top: 200px; */
    }
    
    .box3{
         100px;
        height: 100px;
        background-color: yellow;
    }
    
    

    6.3 absolute 定位

    absolute 绝对定位,元素的位置相对于最近的已定位的父元素,若父元素没有定位,那么就会相当于 body 定位。

    <div class="box1">
        <h1>这是一个要绝对定位的标题</h1>
        <p>绝对定位,元素位置相当于最近的已定位的父元素。若父元素没有定位,则相当于 body 定位。</p>
        <p>标题距离左面 100px,距离上面 100px</p>
    </div>
    
    
    h1{
        position: absolute;
        top: 100px;
        left: 100px;
    }
    
    

    因为其父元素 div1 没有定位,那么 h1 将相对 body 定位,前后比较:

    6.4 fixed 定位

    fixed 定位也就固定定位,元素相对于浏览器窗口定位,因为窗口是不变的,因此不会随浏览器的滚动条变化而变化。

    • 与文档流无关,不占据空间
    • 定位的元素和其他元素重叠

    常用作 返回顶部

    <div class="returnTop">
        <a href="#">返回顶部</a>
    </div>
    
    
    .returnTop{
         80px;
        height: 30px;
        bottom: 30px;
        right: 30px;
        background-color: #777777;
        position: fixed;
    }	
    
    

    6.5 使用 margin 属性布局绝对定位

    因为该元素已经脱离文档流,所有 margin 属性不会再对文档流中元素产生影响,不管其祖先是否定位,都以文档流中自己原来的位置定位。

    <div class='div1'>
        <div>
            <div>
                <div>box1</div>
                <div class='div2'>box2</div>
                <div>box3</div>
            </div>
        </div>
    </div>
    
    
    .div1{position: relative;}
    .div2{
        position: absolute;
        margin-top: 50px;
        margin-left: 120px;
    }
    
    

    在 div2 的祖先元素中,只有 div1 设置了相对定位,其余的都没有定位。div2 设置了绝对定位,并用 margin 来设定偏移量,即使它的父级元素没有定位,它也会按照自己在文档流中原来的位置定位,具体如下图:

    6.6 绝对定位与相对定位配合使用

    相对定位相对于元素在文档流中原来的位置定位,绝对定位相对于已定位的父级元素定位,两者常常一起搭配使用,其规范如下:

    • 参照定位的元素必须是绝对定位的元素的父级元素
    • 参照定位的元素必须是相对定位(relative)
    • 定位的元素是绝对定位(absolute)
    <div class="box3">
        <h1>相对定位与绝对定位</h1>
        <p>相对定位相对于元素在文档流中原来的位置定位,绝对定位相对于已定位的父级元素定位,两者常常一起搭配使用,其规范如下:</p>
        <ul>
            <li>参照定位的元素必须是绝对定位的元素的父级元素</li>
            <li>参照定位的元素必须是相对定位(relative)</li>
            <li>定位的元素是绝对定位(absolute)</li>
        </ul>
        <img src="1.png">
    </div>
    
    
    .box3{
        position: relative;
    }
    
    img{
        position: absolute;
        right: 0;
        top: 100px;
    }
    
    

    img 的父级元素 box3设置为相对定位,img 绝对定位,相当于 box3 定位,将图片定位到 box3 右下方位置:

  • 相关阅读:
    在CHROME里安装 VIMIUM 插件, 方便操作
    Python 判断变量的类型
    Python 格式化输出
    ssh 使用
    [转载] 构造linux 系统下免密码ssh登陆  _How to establish password-less login with SSH
    [转载] SSH入门学习基础教程
    SSH 常用命令解析
    【转载】 调研文献的方法介绍,适用于各个领域
    POJ 2549 Sumsets
    HDU 5858 Hard problem
  • 原文地址:https://www.cnblogs.com/midworld/p/10847290.html
Copyright © 2020-2023  润新知