css篇

202 阅读4分钟

1.对DOM设置CSS样式的方法有?

(1)外部样式表。引入一个外部CSS文件;样式表以.css扩展名进行保存;
<head>
   <link rel="stylesheet" type="text/css" href="mystyle.css" />
</head>
(2)内部样式表。将CSS代码放在head标签内部;
<head>
    <style type="text/css">
      hr {color: sienna;}
      p {margin-left: 20px;}
      body {background-image: url("images/back40.gif");}
    </style>
</head>
(3) 内联样式,将CSS样式直接定义在HTML元素内部;
<p style="color: sienna; margin-left: 20px">
    This is a paragraph
</p>
(4)@import导入样式
<head>
    <style type=”text/css”>
         @import url("global.css");   //三种任意一种都行,结尾必须有分号
         @import url(global.css);
         @import "global.css";
    </style>
</head>

2. link和@import的区别

将样式定义在单独的.css的文件里,link和@import都可以在html页面引入css文件。

link方式:

<link rel=”stylesheet” type=”text/css” href=”aa.css”>

@import方式:

<head>
    <style type=”text/css”>
         @import url("global.css");   //三种任意一种都行,结尾必须有分号
         @import url(global.css);
         @import "global.css";
    </style>
</head>

link和@import两种导入css文件的区别:

  • 祖先的差别。Link属于XHTML标签,Link标签除了可以加载CSS外,还可以做很多其他的事情,比如定义RCC,定义rel连接属性等;而@import完全是CSS提供的一种方式,只能加载css了。
  • 加载顺序的差别。当一个页面被加载的时候,link引用的CSS会同时被加载,而@import引用的CSS会等到页面全部被下载完再被加载。所以有时候浏览@import加载CSS的页面时开始会没有样式(就是闪烁),网速慢时更为明显。
  • 兼容性的差别。由于@import是CSS2.1提出的所有老的浏览器不支持,@import只有在IE5以上的才能识别,而link是XHTML标签 ,无兼容问题 。
  • 使用DOM控制样式时的差别。当使用JavaScript控制DOM去改变样式的时候,只能使用link标签,因为@import不是DOM可以控制的。
  • @Import可以在css中再次引入其他样式表,比如可以创建一个主样式表,在主样式表中再引入其他的样式表。

3. 四种CSS样式表的优先级顺序比较

当四种方式中有相同的属性的时候,它们的优先级:

 !important>内联>内部>@import>link     (同等优先级下,以最后定义的样式为准,!important比内联高。 )

4.css样式表的层叠性

5.使得一个DOM元素不显示在浏览器的可视范围内?

最基本的:

设置display属性为none,或者设置visiblity为hidden。

技巧性:

设置高度height0,设置透明度opacity0,设置z-index位置为-1000.
 
注: z-index:
    该属性设置一个定位元素沿 z 轴的位置,z 轴定义为垂直延伸到显示区的轴。如果为正数,则离用户更近,为负数则表示离用户更远。
    此属性设置元素的堆叠顺序,Z-index 仅能在定位元素上奏效,元素可拥有负值。

6 display:none和visiblity:hidden的区别是什么?

visiblity: 隐藏对应元素,但挤占该元素原来的空间。

display: 隐藏对应元素,并且不挤占该元素原来的空间。

即是,使用CSS display:none属性后,HTML元素(对象)的宽度、高度等各种属性都将“丢失”;
而使用visibility:hidden属性后,HTML元素(对象)仅仅是在视觉上看不见(完全透明),而它所占据的空间位置任然存在。
推荐使用display来创建不占据页面空间的不可见元素。

7. 简要说一下CSS的元素分类

元素类型: 块状元素、行内元素(内联元素)、行内块元素。

块状元素:

  • div---块级元素
  • h1-h6---标题
  • form---表单
  • p----段落
  • ul ---非排序列表
  • ol----排序列表
  • hr----水平分割线
  • menu---菜单列表
  • dl----定义列表
  • table---表格

行内元素:

  • a便签
  • br换行
  • i 斜体
  • em强调
  • strong粗体强调
  • img图片
  • input输入框
  • label表格标签

8. 行内元素和块级元素的区别?行内元素的padding和margin可设置吗?

块级元素(block)特性:

总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示。 
widthheightpadding(内边距)、margin(外边距)都可控制。

内联元素(inline)特性:

宽度、高度、内边距的padding-top/padding-bottom和外边距的margin-topmargin-bottom都不可改变(也就是paddingmarginleftright是可以设置的)。

这里还有其他问题。浏览器还有默认的天生inline-block元素(拥有内在尺寸,可设置高宽,但不会自动换行), 有哪些元素是天生inline-block元素?

它们是<input>、<img>、<button>、<textare>、<label>

9. link、visited、hover、active

被点击访问过的超链接样式不再具有hover和active了,解决方式是改变CSS属性的排列顺序:L-V-H-A(linked, visited, hover, active)。

在 CSS 定义中,:hover 必须位于 :link 和 :visited 之后(如果存在的话),这样样式才能生效。

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

  • a:link //未被访问状态 未被访问的链接
  • a:visited //已被访问状态
  • a:hover //和鼠标悬停状态
  • a:active // 活动状态

10.CSS hack