第二节 前端基础之CSS

1.CSS简介和基础用法

1.1 定义

CSS:层叠样式表。

1.2 语法

/*一条规则*/
div{ //标签选择器 /*声明块*/
	color:red; //字体颜色 /*一条声明*/
	font-size:20px;//字体尺寸
}

1.3 用法

1.3.1 内部样式:放在head标签中的style。

1.3.2 行内样式:直接在标签上的style。

1.3.3 外联样式:通过link引入到head标签中的style。

1.4 块级元素与行内元素

//块级元素:(所有盒模型的属性都可正常设置)
div,p,ul,ol,li,dl,dt,dd,table,form

//行内元素
行内非替换元素:a,span(宽、高不能正常设置)
行内替换元素:img,input,textarea(内置宽、高属性,可以重新设置)

 

2.CSS选择器和优先级

2.1 基本选择器

2.1.1 标签选择器:调整形如div、p、span的样式。使用格式:div{color:red;}

2.1.2 类选择器:调整形如class=“box”的样式。使用格式:.box{color:red;}

2.1.3 id选择器:调整形如id="name"的样式。使用格式:#name{color:red;}

2.2 选择器优先级

行内选择器(1000)>id选择器(100)>类选择器(10)>标签选择器(1)。如果优先级一样,后面的样式会覆盖前面的样式(即后面的样式优先)。数字越大,优先级越高。

2.3 派生选择器

2.3.1 后代选择器(包含选择器):就是有多个标签嵌套的,越详细的越优先。

2.3.2 子选择器:选择该标签下的一级子标签,结合“>”号使用。例如:

HTML:
<div class="container">
    <div class="parent">
        <div class="child-1">
            <div class="child-2">1号</div>
        </div>
        <div class="child-1">
            <div class="child-2">2号</div>
        </div>
    </div>
</div>

CSS:
/*预设样式*/
.parent{
    border: 2px solid black;
}
.child-1{
    border: 1px solid red;
    width: 300px;
    height: 300px;
}
.child-2{
    border: 1px solid blue;
    width: 200px;
    height: 200px;
}

/*子选择器*/
.parent > div{
    border: 1px solid #05d410;
}

2.3.3 群组选择器:使用“,”号将样式相同的几个标签结合在一起。例如:

.name,.sex,.age{
	color:red;
	font-size:20px;
}

 

3.字体和文本样式

3.1 字体样式

font-size:字体大小,如20px。

font-style:字体风格,如italic(斜体)、oblique(斜体)、normal(正常)。

font-weight:加粗,可以为数值,如lighter、bold、bolder、401px。

font-family:字体,可以写多个(前面优先),如“微软雅黑”、“宋体”。

font:综合写法,4个参数依次为:font-style font-weight font-size font-family; 前面2个参数可省略,但后面2个参数必须写,且顺序不能乱!

3.2 文本样式

color:文字颜色,参数可为:英文单词 / #fb845 / rgb(100,200,255)。

text-align:对齐方式,参数有:left、center、right。

text-indent:首行缩进,为数值,如2px。

text-decoration:文本修饰,参数有underline(下划线)、line-though(删除线,可加颜色)、overline(上划线)、none(无)。

text-transform:调整字母大小写,参数有capitalize(首字母大写)、uppercase(全部大写)、lowercase(全部小写)。

line-height:行高,通常与height 数值相等,设置文字垂直居中。

 

4.超链接样式(伪类选择器)

a{color:black;}无论访问前后,一直是黑色。

a:link(未被访问之前,只用于a标签)

a:visited(访问后,只用于a标签)

a:hover(鼠标划过,可用于所有标签)

a:active(鼠标点击时,可用于按钮和a标签)

注意:一定要按上面的顺序写超链接样式,否则当以上规则同时存在时,可能无法起作用!

 

5.列表样式

list-style-type:circle;(列表前面的形状)

list-style-image:url(../imgs/weixin.jpg);(列表前面的形状图片)

list-style-positon:inside;(形状图片位置,在li里面或外面)

list-style:url(../imgs/weixin.jpg) inside;(组合写法)

list-style:none;(无样式)

 

6.背景样式

background-color:背景色

background-image:背景图片(可与“背景色”同存,但会显示在上方,会挡住“背景色”)

background-repeat:no-repeat(不重复平铺图片),repeat-x(水平平铺)、repeat-y(垂直平铺)

background-positon:top、center、数值(200px 20px)

background-size:数值(一个值就等比例缩放,两个值就拉伸,如50% 80%)、cover(铺满整个容器)

background:url(../imgs/p1.png) no-repeat center;(组合写法)

 

7.盒模型

width:数值/百分比,如200px/50%;

height:数值/百分比,如200px/50%;

padding:内边界,4个值(上,右,下,左),3个值(上,左右,下),2个值(上下,左右),1个值(四边等距) padding-top/right/bottom/left。

border:边框,如 1px solid red; border-top/right/bottom/left/width/color/style(solid/dashed/double/dotted)。

margin:外边界,同padding。

 

8.展示属性

display:设置元素展示的形式(块级/行内、隐藏/显示) block(块级) inline(行内) inline-block(行内块元素):既可在同一行,又可设置宽高属性。 none:隐藏元素,除此之外的属性值都会显示。

 

9.浮动

9.1 文档流

普通流(normal flow)。 浮动流(float):浮动到父元素边界(不超过父元素边界),会脱离文档流(其后的非浮动元素会无视该元素的存在),但不会脱离文本流(后边的文本内容会为其留出位置)。 定位流(position):完全脱离文档流和文本流。

9.2 float

属性值:left、right、none(无) 注意事项:①包裹性,浮动后它与子元素同宽(相当于行内块元素了);它的父元素高度没有了;到最右侧会自动换行。②向上性,浮动元素会尽可能向上排布;③浮动元素不会重叠,浮动后其父元素的高度会塌陷(解决办法是给父设高度,或清除浮动)。

 

10.清除浮动及伪元素

10.1 清除浮动(用clear或伪元素)

clear:both(常用),left,right。

10.2 伪元素

给需要清浮动的父元素添加即可(如果需要清除的div很多,可在class中新增clear类名)。

①:before ②:after { content:' '; height: 0; display: block; clear: both;}

 

11.定位

position:static(无定位)/relative(相对定位)/positive(绝对定位)/fixed(固定定位);需要与left/right/top/bottom属性连用。

①相对定位:保留自身位置,不脱离文档流,但会提高一个层级(多个层级一样的,后写的在上层)。

②绝对定位:相对于其有定位属性(positive或relative)的祖先元素定位(不一定是父元素),若祖先元素都无定位属性,则相对于body定位;会完全脱离文档流。

③固定定位:相对于浏览器窗口定位;会完全脱离文档流。

 

12.层级(上下文)

12.1 z-index:整数(无单位),数值越大越靠顶,只对定位元素有效。

12.2 overflow(溢出处理): 属性值:visible(默认,表示不处理)hidden(隐藏)、scroll(滚动条)、auto(超过则有滚动条,未超则无)。

 

13.BFC

13.1 定义

BFC全称“block formatting context”,即块级格式化上下文,就是页面中的一块渲染区域,并且有一套渲染规则。它决定了其子元素如何定位,以及和其它元素的关系、相互作用等。【同理,还有IFC(inline formatting context)即“行内格式化上下文”,规则与BFC类似。】

13.2 创建BFC

(1)html根元素

(2)浮动元素(folat属性值中除none以外的)

(3)定位元素(固定和绝对定位,会脱离文档流)

(4)display 为 inline-block, flex, inline-flex 等其中之一的元素

(5)设置了overflow 属性,属性值为除了 visible 以外的值。

13.3普通文档流布局

(1)浮动元素不会被父级计算高度;

(2)非浮动元素会覆盖浮动元素的位置;

(3)第一个子元素的 margin 会传递给父级(以大的值为最终值);

(4)两个相邻的子元素上下 margin 会重叠(以大的值为最终值)。

13.4 BFC的布局

(1)如果父级触发了BFC,浮动子元素会被父级计算高度(BFC可以识别浮动子元素);

(2)非浮动元素(触发了BFC)不会覆盖浮动元素的位置(BFC可以识别浮动的同级元素);

(3)如果父级触发了BFC,第一个子元素的 margin 不会传递给父级;

(4)给其中一个元素添加一个父级并触发BFC,这些元素的上下 margin 就不会重叠;

(5)BFC是一个独立、封闭的渲染区域,子元素的样式对BFC外部的元素不产生影响。

13.4 BFC的应用

(1)解决浮动的高度塌陷问题;

(2)解决盒子之间外边距重叠或传递问题;

(3)制作弹性布局(双飞翼布局)。

提示:双飞翼布局就是在浏览器中,左右各一块固定大小区域,只有中间区域可随浏览器窗口缩放。

 

14.网页实战

14.1 目标样式图:

14.2 HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>酒店预订</title>
    <link rel="stylesheet" href="index.css">
</head>

<body>
    <div class="header">
        <div class="w1200">
            <ul class="clear">
                <li><a href="#">注册</a></li>
                <li><a href="#">登录</a></li>
                <li><span>400-808-8682</span></li>
                <li><img src="imgs/phone.png"></li>
            </ul>
        </div>
    </div>

    <div class="nav w1200 clear">
        <img src="imgs/logo.png">
        <div class="navlist">
            <a class="active" href="#">首页</a>
            <a href="#">目的地</a>
            <a href="#">亲子游学</a>
            <a href="#">亲子游学</a>
            <a href="#">亲子游学</a>
            <a href="#">亲子游学</a>
            <a href="#">亲子游学</a>
        </div>
    </div>

<!--    主要内容-->
    <div class="content">

<!--        面包屑导航-->
        <div class="breadcrumb w1200 clear">
            <ul>
                <li><a href="#">首页</a></li>
                <li><a href="#">酒店预订</a></li>
                <li><a href="#">酒店名称</a></li>
            </ul>
        </div>

<!--        中间图片与介绍-->
        <div class="contain w1200 clear">
            <div class="cont-left">
                <div class="left-top">
                    <img src="imgs/hotel.jpg">
                </div>
                <div class="left-bottom">
                    <li><img src="imgs/s1.jpg"></li>
                    <li><img src="imgs/s2.jpg"></li>
                    <li><img src="imgs/s3.jpg"></li>
                    <li><img src="imgs/s4.jpg"></li>
                </div>
            </div>
            <div class="cont-right">
                <h2>曼谷悦榕庄酒店(酒店名称)</h2>
                <p>所属集团:悦榕酒店及度假村集团/Banyan Tree</p>
                <p>所属集团:悦榕酒店及度假村集团/Banyan Tree</p>
                <p>所属集团:悦榕酒店及度假村集团/Banyan Tree</p>
                <p>所属集团:悦榕酒店及度假村集团/Banyan Tree</p>
            </div>
        </div>

    </div>

<!--    页脚-->
    <div class="footer">
        <div class="links w1200 clear">
            <div class="links-left">
                <ul>
                    <li><a>关于我们</a></li>
                    <li><a href="#">公司简介</a></li>
                    <li><a href="#">公司简介</a></li>
                    <li><a href="#">公司简介</a></li>
                </ul>
                <ul>
                    <li><a>网站须知</a></li>
                    <li><a href="#">公司简介</a></li>
                    <li><a href="#">公司简介</a></li>
                    <li><a href="#">公司简介</a></li>
                </ul>
                <ul>
                    <li><a>支付方式</a></li>
                    <li><a href="#">公司简介</a></li>
                    <li><a href="#">公司简介</a></li>
                    <li><a href="#">公司简介</a></li>
                    <li><a href="#">公司简介</a></li>
                </ul>
                <ul class="clear">
                    <li><a>关注我们</a></li>
                    <div>
                        <img src="imgs/wb.png">
                        <p>新浪微博</p>
                    </div>

                    <div>
                        <img src="imgs/wx.png">
                        <p>官方微信</p>
                    </div>

                </ul>
            </div>

            <div class="links-right">
                <div class="clear">
                    <img src="imgs/phone.png">
                    <div class="link-r1">
                        <p>咨询热线</p>
                        <p>customer hotline</p>
                    </div>
                    <div class="link-r2">
                        <P>400 - 808 - 8682</P>
                        <p>0512 - 86862063</p>
                    </div>
                </div>
                <div class="link-3">
                    <p>邮箱:cs@yhyiyou.com</p>
                    <p>地址:苏州市姑苏区三元二村16号兴元楼2楼东</p>
                </div>
            </div>
        </div>

<!--        版权-->
        <div class="copyright">
            <div class="w1200">
                <p>苏ICP备14019690号、2014-2017 @苏州英华国际旅游有限公司 版权所有</p>
                <P>技术支持 杭州联橙科技</P>
            </div>
        </div>
    </div>

<!--        右侧固定栏-->
    <div class="fixbox">
        <ul>
            <li><img src="imgs/qq.png"></li>
            <li><img src="imgs/phone.png"></li>
            <li><img src="imgs/wx.png"></li>
            <li><img src="imgs/wb.png"></li>
            <li><img src="imgs/img.png"></li>
            <li>
                <img src="imgs/img2.png">
                <p>尊享定制</p>
            </li>
        </ul>
    </div>

</body>

</html>

14.3 CSS代码

/*重置样式*/
*{
    padding: 0;
    margin: 0;
}
ol,ul,li{
    list-style: none;
}
a{
    text-decoration: none;
}
/*清除浮动(利用伪元素)*/
.clear::after{
    content: '';
    display: block;
    height: 0;
    clear: both;
}

/*头部*/
.header{
    height: 45px;
    background-color: #333;
}
.header span{
    font-size: 20px;
    color: #fff;
}
.header a{
    font-size: 14px;
    color: #fff;
}
.header a:hover{
    color: orange;
}
.w1200{
    width: 1200px;
    margin: 0 auto;
}
.header ul li{
    float: right;
    line-height: 45px;
    margin-right: 20px;
}
.header ul li img{
    margin-top: 10px;

}

/*nav*/
.nav{
    background-color: #fff;
    /*border: 1px solid red;*/
}
.nav img{
    float: left;
    margin-top: 15px;
}
.navlist{
    float: right;
}
.nav a{
    color: #000;
    font-size: 20px;
    float: left;
    margin-left: 20px;
    height: 80px;
    width: 100px;
    line-height: 80px;
    text-align: center;
}
.nav a:hover{
    border-bottom: 4px solid #e8420a;
}
.nav .active{
    border-bottom: 4px solid #e8420a;
}

/*主要内容*/
.content{
    background-color: #f5f5f5;
    height: 700px;
}

/*面包屑导航*/
.breadcrumb{
    height: 100px;
}
.breadcrumb li{
    float: left;
    margin-right: 10px;
}
.breadcrumb li a {
    color: #000;
    line-height: 100px;
}
.breadcrumb ul li+li::before{
    content: '>';
    margin-right: 10px;
}

/*中间图片与介绍*/
.contain{
    background-color: #fff;
    height: 546px;
    padding: 14px;
    /*border: 1px solid red;*/
    overflow: hidden;
}
.cont-left{
    float: left;
    /*border: 1px solid red;*/
}
.cont-right{
    float: left;
    margin-left: 40px;
    /*border: 1px solid #05d410;*/
}
.left-bottom li{
    float: left;
}
.left-bottom li+li::before{
    content: '';
    margin-left: 4px;
}
.cont-right h2{
    height: 100px;
    line-height: 100px;
}
.cont-right p{
    height: 40px;
    line-height: 40px;
    font-size: 16px;
    color: #666;
}

/*页脚部分*/
.footer{
    height: 340px;
    background-color: #000;
    padding-top: 60px;
}
.links-left{
    float: left;
}
/*链接*/
.footer a, .footer p{
    color: #fff;
    font-size: 14px;
}
.footer ul{
    float: left;
    margin-right: 50px;
}
.footer ul li:first-child{
    height: 48px;
}
.footer ul li:first-child a{
    font-size: 20px;
}
.footer ul li+li{
    height: 28px;
}
.footer ul div{
    float: left;
    margin-right: 8px;
}
.footer ul div:hover p,.footer ul div:hover img{
    color: orange;
}
.footer ul img{
    height: 24px;
    margin-left: 8px;
}
.footer ul div p{
    height: 40px;
    line-height: 40px;
}

.links-right{
    float: right;
    position: relative;
}
.links-right img{
    float: left;
    position: absolute;
    left: -50px;
    top: 6px;
}
.link-r1 {
    float: left;
}
.link-r1 p:first-child{
    font-size: 26px;
}
.link-r1 p:last-child{
    font-size: 12px;
    line-height: 35px;
}
.link-r2 {
    float: left;
    margin-left: 30px;
}
.link-r2 p{
    font-size: 26px;
}
.link-3 p{
    font-size: 16px;
}

/*版权*/
.copyright{
    text-align: center;
    border-top: 1px solid #404040;
    margin-top: 20px;
    padding-top: 20px;
}
.copyright p{
    font-size: 16px;
    line-height: 30px;
}

/*右侧固定栏*/
.fixbox{
    position: fixed;
    width: 47px;
    top: 135px;
    right: 0;
}
.fixbox li{
    background-color: #1c5080;
    text-align: center;
    margin-top: 1px;
    height: 47px;
    cursor: pointer;
}
.fixbox img{
    margin-top: 10px;
}
.fixbox li:last-child{
    background-color: orangered;
    height: 100%;
    padding-bottom: 10px;
}
.fixbox li:last-child p{
    font-size: 18px;
    padding: 0 15px;
    color: #fff;
}

14.4 源码下载

 

15.CSS3

15.1 简介

CSS3是CSS的一个全新版本,新增了一些功能。

15.2 选择器

  • 属性选择器:E[ class= ]{ },E[ id= ]{ }

  • 伪类选择器:first-child,last-child,nth-child(num)【num从1开始】,nth-child(odd)【奇数行】,nth-child(even)【偶数行】

/**属性选择器**/
/*选择类名为box的div*/
div[class=box]{
	width:100px;
}
/*选择类名以box开头的div*/
div[class^=box]{
	width:100px;
}
/*选择类名以box结尾的div*/
div[class$=box]{
	width:100px;
}
/*选择类名含有box的div*/
div[class*=box]{
	width:100px;
}
/*选择类名以box开头的div*/


/**伪类选择器**/
/*第一行背景色为红色*/
.list li:nth-child(1){
    background:red;
}
/*奇数行背景色设为灰色*/
.list li:nth-child(odd){
    background-color:#ccc;
}

15.3 变换

transform:scale(1.5)【沿中心放大1.5倍】、rotateX(90deg)【沿X轴转90度】、rotateY()、rotate()、skew(90deg)【倾斜90度】、translate(100px)【向右平移100px】、translateX()、translateY()

15.4 过渡

transition: all 1s;【1秒钟】

transiton-propety: 后面可写宽高、背景色等(用逗号隔开)

transiton-duration: 1s;【持续时间】

transiton-timing-function: ease; 【过渡动画】

transiton-delay: 1s;【延迟时间】

15.5 动画

@keyframes 动画名{ from { } to { } }

@keyframes 动画名{ 10%{ } 50%{ } 100%{ } }【表示达到animation时间的百分之几,就运行哪个动画】

animation: 动画名 2s;【后面可接多个值】

15.6 弹性盒布局(flexible box)

可以轻松实现div垂直居中、div水平等距离布局等。

(1)声明容器:

display: flex; 声明块级弹性盒子,然后再用flex-direction属性声明里面盒子的排列方向。

display: inline-flex; 声明行块弹性盒子

(2)项目:所有子元素自动成为容器的flex项目;容器默认存在两根轴,水平的主轴和垂直的交叉轴。

(3)容器样式:

  • flex-direction: column(垂直方向)、row(水平方向)

  • justify-content: center(居中)、space-between(两端对齐)、space-around(贴边对齐)

  • flex-wrap: wrap; 换行

  • align-item: center; 垂直方向居中

(4)项目样式:

  • flex-grow: 项目放大的比例,默认是0不放大

  • flex-shrink: 项目缩小的比例,默认是1不缩小

  • flex-basis: 项目伸缩基准值,可以是像素、百分比,默认为auto

  • flex: 0,1,auto; 前三项的综合写法。注意:flex:auto;表示(1 1 auto)相当放大。flex:none;表示(0 0 auto)相当缩小。flex:1;表示所有项目等分剩余空间。

/* 假设一个box里面有3个div */
.box div:nth-child(1){
	flex-basis: 500px;
}
.box div:nth-child(2),.box div:nth-child(3){
	flex-grow: 1;
}
/*结果:第一个div固定宽度,而另外2个div自动平分剩余的宽度*/

15.7 媒体查询

根据屏幕的不同尺寸,可以设置不同的CSS样式,比如同一个网页在电脑、平板、手机上的显示样式不同。常用的框架有Bootstrap。

/*用法:*/
1.直接在html中写相关css(仅适合少量代码)
@media screen and (max-width: 500px) and (min-width: 100px){ css code }

2.通过link添加media属性,引入外部css(适合大量代码)
<link rel="stylesheet" media="screen and (min-width:1000px)" href="1.css">
<link rel="stylesheet" media="screen and (min-width:700px)and (max-width:999px)" href="2.css">
<link rel="stylesheet" media="screen and (max-width:699px)" href="3.css">

15.8 多列布局

.box{
	column-count: 4; 分成4栏
	conlumn-width: 200px; 最小宽度
	column-gap: 20px; 各栏之间的间隔
	colunm-rule: 1px solid red; 各栏之间的分隔线
	column-span: all none;横跨所有列
}
温馨提示
我也是有底线的~
点赞0
评论 抢沙发

请登录后发表评论

    暂无评论内容