cssCSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离。
一.css的四种引入方式 1.行内式
2.嵌入式
3.导入式
4.链接式
注意: 导入式 会在整个网页装载完后再装载CSS文件,因此这就导致了一个问题,如果网页比较大,则会先显示无样式的页面,闪烁一下之后,再出现网页的样式。这是导入式固有的一个缺陷。 使用 链接式 时与导入式不同的是它会以网页文件主体装载前装载CSS文件,因此显示出来的网页从一开始就是带样式的效果的,它不会象导入式那样先显示无样式的网页,然后再显示有样式的网页,这是链接式的优点。 样式应用顺序:
CSS优先级: 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序。 样式表中的特殊性描述了不同规则的相对权重,它的基本规则是: 1 内联样式表的权值最高 style="" ------------------- 1000 2 统计选择符中的ID属性个数。 #id -------------100 3 统计选择符中的CLASS属性个数。 .class ------------- 10 4 统计选择符中的HTML标签名个数。 p --------------1
二 css的选择器(Selector) “选择器”指明了{ } 中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元素 1 基础选择器: *:通用元素选择器,匹配任何元素
E:标签选择器,匹配所有使用E标签的元素p
.info和E.info: class选择器,匹配所有class属性中包含info的元素
#info和E#info id选择器,匹配所有id属性等于info的元素
注意: 标签中,id的值是唯一的,而class可重复! 2 组合选择器 E,F 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔
E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔
E > F 子元素选择器,匹配所有E元素的子元素F
E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F
注意嵌套规则:
3 属性选择器 E[att] 匹配所有具有att属性的E元素,不考虑它的值。 (注意:E在此处可以省略,比如“[cheacked]”。以下同。)
E[att=val] 匹配所有att属性等于“val”的E元素
E[att~=val] 匹配所有att属性具有多个空格分隔的值、其中一个值等于“val”的E元素
E[att|=val] 匹配所有att属性具有多个连字号分隔(hyphen-separated)的值、其中一个值以“val”开头的E元素。 主要用于lang属性,如“en”、“en-us”、“en-gb”等等
E[attr^=val] 匹配属性值以指定值开头的每个元素 E[attr$=val] 匹配属性值以指定值结尾的每个元素 E[attr*=val] 匹配属性值中包含指定值的每个元素 p:before 在每个 <p> 元素的内容之前插入内容 p:after 在每个 <p> 元素的内容之前插入内容
4 伪类选择器: 专用于控制链接的显示效果,visited与active必须写在最后!! : a:link(没有接触过的链接),用于定义了链接的常规状态。 a:hover(鼠标放在链接上的状态),用于产生视觉效果。 a:visited(访问过的链接),用于阅读文章,能清楚的判断已经访问过的链接。 a:active(在链接上按下鼠标时的状态),用于表现鼠标按下时的链接状态。 伪类选择器 : 伪类指的是标签的不同状态: a ==> 点过状态 没有点过的状态 鼠标悬浮状态 激活状态
三 CSS的常用属性 1 颜色属性: color 👉 常用网页颜色搭配
transparent
opacity
2 字体属性: font-style: 用于规定斜体文本
font-weight: 设置文本的粗细
font-size: 设置字体的大小
font-family:字体名称
font:简写属性
font-size: 20px / 50% / larger font-family: 'Lucida Bright' font-weight: lighter / bold / border <h1 style="font-style: oblique">Abcd</h1> #字体倾斜 .font{font:italic small-caps bold 12px/1.5em arial,verdana;} 3 背景属性: background-color 背景颜色 background-image 设置图像为背景
background-position 设置背景图像的位置坐标
background-repeat 设置背景图像不重复平铺
background-attachment 背景图像是否固定或者随着页面的其余部分滚动 background 简写
注意: 如果将背景属性加在body上,要记得给body加上一个height,否则结果异常,这是因为body为空,无法撑起背景图片, 另外,如果此时要设置一个width=100px,你也看不出效果,除非你设置出html。 ![]() 4 文本属性: white-space: 设置元素中空白的处理方式
注意: 此处所说的空白处理为标签内的内容间的空白以及换行。
direction: 规定文本的方向
text-align: 文本的水平对齐方式
line-height: 文本行高
vertical-align: 文本所在行高的垂直对齐方式
text-indent: 文本缩进 letter-spacing: 添加字母之间的空白 word-spacing: 添加每个单词之间的空白 text-transform: 属性控制文本的大小写
text-overflow: 文本溢出样式
不可独立使用必须结合overflow:hidden; white-space:nowrap;才生效。 ![]() ![]() text-decoration: 文本的装饰
text-shadow:文本阴影
word-wrap:允许长单词或 URL 地址换行到下一行
word-break:在恰当的断字点进行换行, 在边界换行
5 边框属性: border-style:边框样式
border-color:边框颜色 border-width:边框宽度 border-radius:圆角
border: 简写
box-shadow:边框阴影
![]() ![]() ![]() ![]() 6 列表属性 list-style-type: 列表项标志的类型
list-style-image:将图象设置为列表项标志 list-style-position:列表项标志的位置
list-style:缩写
ul,ol{ list-style: decimal-leading-zero; # 数字01,02, list-style: none; # 不显示 list-style: circle; # 空心圆 list-style: upper-alpha; # 字母A,B, list-style: disc; # 实心圆(默认) } 7 dispaly属性
8 盒子模型 padding:用于控制内容与边框之间的距离; margin: 用于控制元素与元素之间的距离;margin的最基本用途就是控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的。 我们通过设置width 和 height 只是设置了content的宽度与高度! 盒子的宽度(高度)=content+padding+border+margin 实例: 300px*300px的盒子装着100px*100px的盒子,分别通过margin和padding设置将小盒子移到大盒子的中间 注意1:边框在默认情况下会定位于浏览器窗口的左上角,但是并没有紧贴着浏览器的窗口的边框。 这是因为body本身也是一个盒子(外层还有html),在默认情况下,body距离html会有若干像素的margin,具体数值因各个浏览器不尽相同,所以body中的盒子不会紧贴浏览器窗口的边框了。
注意2:margin collapse(边界塌陷或者说边界重叠) 外边距的重叠只产生在普通流文档的上下外边距之间,这个看起来有点奇怪的规则,其实有其现实意义。 设想,当我们上下排列一系列规则的块级元素(如段落P)时,那么块元素之间因为外边距重叠的存在,段落之间就不会产生双倍的距离。 1.兄弟div:上面div的margin-bottom和下面div的margin-top会塌陷,也就是会取上下两者margin里最大值作为显示值 2.父子div:如果 父级div中没有 border,padding,inline content,子级div的margin会一直向上找,直到找到某个标签包括border,padding,inline content 中的其中一个,然后按此div 进行margin !!! ![]()
9 float 首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流。 可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为div元素是独占一行的。注意,以上这些理论,是指标准流中的div。 无论多么复杂的布局,其基本出发点均是:“如何在一行显示多个div元素”。 浮动可以理解为让某个div元素脱离标准流,漂浮在标准流之上,和标准流不是一个层次。 例如,假设上图中的绿色div2浮动,那么它将脱离标准流,但div1、div3、div4仍然在标准流当中,所以div3会自动向上移动,占据div2的位置,重新组成一个流。如图: 从图中可以看出,由于对div2设置浮动,因此它不再属于标准流,div3自动上移顶替div2的位置,div1、div3、div4依次排列,成为一个新的流。 又因为浮动是漂浮在标准流之上的,因此div2挡住了一部分div3,div3看起来变“矮”了 这里div2用的是左浮动( float:left;),可以理解为漂浮起来后靠左排列,右浮动(float:right;)当然就是靠右排列。 这里的靠左、靠右是说页面的左、右边缘。 如果我们把div2采用右浮动,会是如下效果: 此时div2靠页面右边缘排列,不再遮挡div3,读者可以清晰的看到上面所讲的div1、div3、div4组成的流。 目前为止我们只浮动了一个div元素,多个呢? 下面我们把div2和div3都加上左浮动,效果如图: 同理,由于div2、div3浮动,它们不再属于标准流,因此div4会自动上移,与div1组成一个“新”标准流,而浮动是漂浮在标准流之上,因此div2又挡住了div4。 当同时对div2、div3设置浮动之后,div3会跟随在div2之后,不知道读者有没有发现,一直到现在,div2在每个例子中都是浮动的,但并没有跟随到div1之后。 因此,我们可以得出一个重要结论: 1.假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。 2.div的顺序是HTML代码中div的顺序决定的。 3.靠近页面边缘的一端是前,远离页面边缘的一端是后。 为了帮助读者理解,再举几个例子。 假如我们把div2、div3、div4都设置成左浮动,效果如下: 先从div4开始分析,它发现上边的元素div3是浮动的,所以div4会跟随在div3之后;div3发现上边的元素div2也是浮动的,所以div3会跟随在div2之后;而div2发现上边的元素div1是标准流中的元素,因此div2的相对垂直位置不变,顶部仍然和div1元素的底部对齐。由于是左浮动,左边靠近页面边缘,所以左边是前,因此div2在最左边。
假如把div2、div3、div4都设置成右浮动,效果如下: 道理和左浮动基本一样,只不过需要注意一下前后对应关系。由于是右浮动,因此右边靠近页面边缘,所以右边是前,因此div2在最右边。
假如我们把div2、div4左浮动,效果图如下: 依然是根据结论,div2、div4浮动,脱离了标准流,因此div3将会自动上移,与div1组成标准流。div2发现上一个元素div1是标准流中的元素,因此div2相对垂直位置不变,与div1底部对齐。div4发现上一个元素div3是标准流中的元素,因此div4的顶部和div3的底部对齐,并且总是成立的,因为从图中可以看出,div3上移后,div4也跟着上移,div4总是保证自己的顶部和上一个元素div3(标准流中的元素)的底部对齐。
至此,恭喜读者已经掌握了添加浮动,但还有清除浮动,有上边的基础清除浮动非常容易理解。 经过上边的学习,可以看出:元素浮动之前,也就是在标准流中,是竖向排列的,而浮动之后可以理解为横向排列。
清除浮动可以理解为打破横向排列。 清除浮动的关键字是clear,官方定义如下: 语法: clear : none | left | right | both 取值: none : 默认值。允许两边都可以有浮动对象 left : 不允许左边有浮动对象 right : 不允许右边有浮动对象 both : 不允许有浮动对象 定义非常容易理解,但是读者实际使用时可能会发现不是这么回事。 定义没有错,只不过它描述的太模糊,让我们不知所措。 根据上边的基础,假如页面中只有两个元素div1、div2,它们都是左浮动,场景如下: 此时div1、div2都浮动,根据规则,div2会跟随在div1后边,但我们仍然希望div2能排列在div1下边,就像div1没有浮动,div2左浮动那样。 这时候就要用到清除浮动(clear),如果单纯根据官方定义,读者可能会尝试这样写:在div1的CSS样式中添加clear:right;,理解为不允许div1的右边有浮动元素,由于div2是浮动元素,因此会自动下移一行来满足规则。 其实这种理解是不正确的,这样做没有任何效果。 对于CSS的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。 怎么理解呢?就拿上边的例子来说,我们是想让div2移动,但我们却是在div1元素的CSS样式中使用了清除浮动,试图通过清除div1右边的浮动元素(clear:right;)来强迫div2下移,这是不可行的,因为这个清除浮动是在div1中调用的,它只能影响div1,不能影响div2。 要想让div2下移,就必须在div2的CSS样式中使用浮动。 本例中div2的左边有浮动元素div1,因此只要在div2的CSS样式中使用 clear:left; 来指定div2元素左边不允许出现浮动元素,这样div2就被迫下移一行。
那么假如页面中只有两个元素div1、div2,它们都是右浮动呢?读者此时应该已经能自己推测场景,如下: 此时如果要让div2下移到div1下边,要如何做呢? 我们希望移动的是div2,就必须在div2的CSS样式中调用浮动,因为浮动只能影响调用它的元素。 可以看出div2的右边有一个浮动元素div1,那么我们可以在div2的CSS样式中使用 clear:right; 来指定div2的右边不允许出现浮动元素,这样div2就被迫下移一行,排到div1下边。 总结: float : 先判断上一个是不是浮动对象, 如果是 紧跟其后(还要判断浮动方向), 如果不是,自己浮起来,脱离文档流! (原来的位置可以被顶替) clear : both => 左右都不能有浮动,只针对自己! 清除浮动: 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素, 在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象。 这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。 方式一: .clearfix:after { <----在类名为“clearfix”的元素内最后面加入内容; content: "."; <----内容为“.”就是一个英文的句号而已。也可以不写。 display: block; <----加入的这个元素转换为块级元素。 clear: both; <----清除左右两边浮动。 visibility: hidden; <----可见度设为隐藏。注意它和display:none;是有区别的。visibility:hidden;仍然占据空间,只是看不到而已; line-height: 0; <----行高为0; height: 0; <----高度为0; font-size:0; <----字体大小为0; } .clearfix { *zoom:1;} <----这是针对于IE6的,因为IE6不支持:after伪类,这个神奇的zoom:1让IE6的元素可以清除浮动来包裹内部元素。 整段代码就相当于在浮动元素后面跟了个宽高为0的空div,然后设定它clear:both来达到清除浮动的效果。 之所以用它,是因为,你不必在html文件中写入大量无意义的空标签,又能清除浮动。 方式二: overflow:hidden; overflow:hidden的含义是超出的部分要裁切隐藏 float的元素虽然不在普通流中,但是他是浮动在普通流之上的,可以把普通流元素+浮动元素想象成一个立方体。 如果没有明确设定包含容器高度的情况下,它要计算内容的全部高度才能确定在什么位置hidden,这样浮动元素的高度就要被计算进去。这样包含容器就会被撑开,清除浮动。
10 position 1.static,默认值 static:无特殊定位,对象遵循正常文档流。 top,right,bottom,left 等属性不会被应用。说到这里我们不得不提一下一个定义——文档流,文档流其实就是文档的输出顺序,也就是我们通常看到的由左到右、由上而下的输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而float和position两个属性可以将元素从文档流脱离出来显示。 默认值就是让元素继续按照文档流显示,不作出任何改变。 2.position : relative / absolute relative:(相对定位) 对象遵循正常文档流,仅仅定义对本参无影响. 但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。 元素实际上依然占据文档中的原有位置,只是视觉上相对于它在文档中的原有位置移动了 absolute:(绝对定位) 对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。 当指定 position:absolute 时,元素就脱离了文档[即在文档中已经不占据位置了],可以准确的按照设置的 top,bottom,left 和 right 来定位了。 如果一个元素绝对定位后,其参照物是以离自身最近元素是否设置了相对定位,如果有设置将以离自己最近元素定位,如果没有将往其祖先元素寻找相对定位元素, 一直找到html为止。 ![]() 3.position:fixed 在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。 fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。 但是 relative 却可以。因为它原本所占的空间仍然占据文档流。
仅使用margin属性布局绝对定位元素 此情况,margin-bottom 和margin-right的值不再对文档流中的元素产生影响,因为该元素已经脱离了文档流。 另外,不管它的祖先元素有没有定位,都是以文档流中原来所在的位置上偏移参照物。 图9中,使用margin属性布局相对定位元素。 层级关系为: <div ——————————— position:relative; <div—————————-没有设置为定位元素,不是参照物 <div———————-没有设置为定位元素,不是参照物 <div box1 <div box2 ——–position:absolute; margin-top:50px; margin-left:120px; <div box3 效果图:
补充:1.css属性可以定义给多个class!
2.background-position: 定位背景图像 background-position 属性设置背景图像的起始位置。 这个属性设置背景原图像(由 background-image 定义)的位置,背景图像如果要重复,将从这一点开始。 实例:
可以通过调节:background-position 的值,显示图像!
通过background-position 实现了从图片上抠图的效果! 3.z-index: z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素 总是会处于 堆叠顺序较低的元素的前面 ! 仅在定位元素上有效(例:position:absolute;)
4.overflow
5.outline 边框轮廓 轮廓不占据页面空间,也不一定是矩形。
除了IE以外的浏览器都直接支持outline。只有规定了!DOCUMENT之后的IE8以上版本的浏览器才支持outline。
6.zoom 缩放比例
7.transform、transition 动画效果 transform 转换,变形
![]() Transition 平滑过渡
![]() ![]() 实例:demo ![]() 鼠标放在以下图片上,There will be a miracle:
练习题:3.商城页面 补充:1.关于 line-height 和 height 居中效果
line-height是把多余的高度平分到上面和下面 所以明显会居中。设置height就是自然而然的从上到下排列所以贴顶了! 2.float 效果影响背景色 子级div 使用float 效果时,父级div的背景色会失效 原因: 当块元素的高度是默认或者auto时,W3C 在可视化格式模型中规定了高度的计算细节,其中有一条就是:如果元素包含浮动元素,那么浮动元素不参与高度计算。所以没有撑起父级元素颜色失效。 ![]() 解决方法:
3.hover hover 后可以添加选择器指明需要修改的样式
4.透明色
5.图片的使用 如果需要在div里面插入img标签的图片,div中需要使用 overflow:hidden 来防止图片超出边界撑开div 6.position 使用 position 常使用于 div的定位
7.小尖角
8.图标素材 现成的图标网站, http:/// 里面有各种小图标, 下载解压,页面中,引用css即可
9.a标签中嵌套图片(默认样式) a 标签中有边框 (ie浏览器下)
10.目录结构
11.样式.重复修改
12.布局,分左右 使用position方法 效果最好! .pg-left{ width: 180px; position: absolute; left: 0; background-color: red; } .pg-right{ height: 600px; position: absolute; left: 184px; right: 0; overflow: auto; background-color: lightcoral; } 13.设置滚动条 先设置一个高度,再使用 overflow:auto 超出大小,出现滚动条! 14.input框插入图标 思路: 利用 absolute 插入图标 ,padding 来设置内边距,留出空白位置
15.全屏提示框(模态对话框) 思路:底层 + 遮罩层(position:fixed 透明) + 顶层 (div fixed)居中显示 1.两个fixed 在一起. z-index设置顺序 2.居中 top left 可以用百分比! margin-left 负值左移
16.加降框 input 默认有个padding 需要使用 padding:0 去除 ![]() 17.cursor: 鼠标的类型形状
请把鼠标移动到单词上,可以看到鼠标指针发生变化: Auto 18. display: inline-block 设置 inline-block 让元素刚好占满一行,却无法实现 设置父级 font-size:0 然后子级元素重新设置font-size 就可以了 产生原因: 标签与标签之间的空白位置,占用了1个字符! 19. 防止缩小浏览器宽度,页面内容挤在一起 设置一个width 固定宽度,不要用百分比! 20.去掉谷歌input记住账号或密码时默认出现的黄色背景 在谷歌浏览器会默认记住账号,而记住账号之后其input的背景会变成黄色,解决的办法如下: 方法一:直接用css的内阴影来覆盖黄色,代码如下:
在form标签上直接关闭了表单的自动填充功能: 21.英文换行显示,边界单词切割成两部分,显示
22.垂直对齐
23.上传表单,美化 ![]() ![]() ![]() 上面美化,把默认显示的文件名也给隐藏掉了,那么如何显示文件名称呢?没关系,我们可以用jquery来获取文件的文件名。 我们可以写个change事件 $(".a-upload").on("change","input[type='file']",function(){ var filePath=$(this).val(); if(filePath.indexOf("jpg")!=-1 || filePath.indexOf("png")!=-1){ $(".fileerrorTip").html("").hide(); var arr=filePath.split('\\'); var fileName=arr[arr.length-1]; $(".showFileName").html(fileName); }else{ $(".showFileName").html(""); $(".fileerrorTip").html("您未上传文件,或者您上传文件类型有误!").show(); return false } })
|
|