整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端面试之css相关内容整理

前端面试之css相关内容整理

.说说盒模型? box-sizing常用的属性有哪些?分别有什么作用?

答:css盒模型是css规范的一个模块,每个元素由一个方形的盒子表示。 该盒子包含有内容区域(content)、内边框区域(padding)、边框区域(border)、外边框区域(margin)

内容区域:元素真实内容,包含背景、颜色或图片,大小为content-box

内边距区域padding: 如果内容区域设置了背景、颜色或图片,这些样式为延伸到padding上

box-sizing的常用属性:

  • content-box是默认属性(w3c标准盒模型),width和height只是内容的宽和高,并不包括padding、border、margin。上面展示的child实际渲染的宽高为260 * 160

  • border-box(IE盒模型), width和height包含了padding和border,但不不含margin。上面展示的child实际渲染的宽高为220 * 120,多了margin的宽高

2.居中的问题,是不经常碰到呢,哈哈

水平居中

  • 容器上定义一个width,然后设置margin: auto/margin: 0 auto;
  • 父容器的text-align: center,子容器的display:inline-block
  • 绝对定位,left: 50%; (margin-left: -宽度/2 或者css3 transform: translate(-宽度/2, 0),其中宽度不确定情况可以使用translate(-50%, 0))
  • flex方式, justify-content: center

垂直居中

  • 单行文本line-height
  • 行内块级元素 display:inline-block; vertical-align: middle;
  • 元素高度不定,vertical-align只在父层为td或th时生效,并且父元素display: table,其它不起作用, 子元素display: table-cell; vertical-align:middle;
  • 绝对定位,top: 50%; (margin-top: -高度/2 或者css3 transform: translate(0, -高度/2),其中高度不确定情况可以使用translate(0,-50%))
  • flex方式,align-items: center;

3.如何确定选择器优先级

答:内敛样式 》 id选择器(0100) 》 类选择器(属性选择器,伪类) 》 类型选择器(伪元素 0001) 》 通配符(0000)

但是!important会覆盖上面所有

4.BFC是什么?(这个平时很少关注,但面试也不能遗漏)

答:BFC即为Block-formatting-context(块级格式化上下文),它是页面的一块渲染区域,这个区域与外部无关。它有自己的渲染规则,决定了子元素的位置以及和其它元素的关系和作用。

规则

  • 内部的box垂直方向一个一个放置
  • 垂直方向距离由margin决定,相邻两个box的margin会发生重叠。
  • BFC是页面上的独立区域,不受外面元素的影响。
  • 每个元素的margin box左边,与包含块的border box左边相接触
  • BFC区域不会与float box重叠
  • 计算BFC的高度时,浮动元素参与计算

哪些会生成BFC

  • 根元素
  • float不为none
  • position为absolute或fixed
  • display: inline-block, table-cell, table-caption, flex, inline-flex
  • overflow为hidden, scroll, auto(不为hidden)

其中,下面第5个问题就会涉及到BFC的相关知识

5.为什么清除浮动?如何清除浮动?

答:一个块级元素的高度如果没有设置height,那么其高度由子元素撑开,如果子元素设置float,它脱离了文档流,父元素的高度会忽略。 为了使父元素高度撑起来,需要清除浮动。

清除浮动方法包括操作父元素和操作子元素:

  • 操作父元素,涉及到上面的BFC,这个比较容易被忽略原理哦哦哦

  • 对子元素进行操作

6.页面导入样式时,使用link和@import有什么区别?

答:

  • 加载内容:link是xhtml标签,除了能加载css外,还能加载rss(简单信息聚合——xml文件);@import只能加载css文件
  • 加载顺序: link在页面载入的同时加载;@import的css是在页面加载完毕后被加载。
  • 兼容性问题:link无兼容性问题; @import是css2.1里提出的,低版本不兼容
  • dom控制问题: link样式,在js中操作dom可修改样式;@import不支持修改

7.CSS3哪些新特性? 新增伪类有那些?

答:css3新特性:圆角(border-radius)、阴影(box-shadow\text-shadow)、渐变(gradients)、过度与动画(transition and animations),新的布局方式:多列布局(column)、flex、grid。

8.说下行内元素和块级元素的区别?行内块元素的兼容性使用?

答:

  • 布局上: 行内元素在一行展示,水平排列;块级元素占据一行,垂直排列
  • 结构上: 行内元素不可以插入块级元素,块级元素可以插入行内元素
  • 属性上: 行内元素设置width、height无效,margin和padding上下无效。比较常用的行内元素: a、b、em、i、img、input、label、span、strong、sub、sup、textarea

行内块元素的兼容性使用:

9.zoom的作用?

  • 检查页面是否闭合
  • 样式排除法
  • 检查是否清除浮动
  • IE是否触发haslayout

10.父容器width和height分别为200 * 100, 子元素设置margin:50%时(考点包括margin百分比都是针对宽度,内联的上下都不起作用

  • 子元素的margin的百分比针对于父元素的Width
  • 子元素margin:50%时,左右margin为100px,加自身的width超出了父元素宽度的范围,此时后面的元素会换行。因此,图中的'2222'虽然是inline-block方式,也在下一行。除非前一个margin的左右百分比之和小于50%,才会展示在一排
  • 图中可以看出,子元素margin-top也是50%,所以父元素没有全包子元素,如果希望父元素全包子元素,可以通过在父元素添加overflow: scroll破坏BFC

11.使用css重新定义checkbox(https://github.com/xiaosunJessica/summary/blob/master/html/css-checkbox.html)

a. 结合input[type='checkbox']和label

b.input[type='checkbox']隐藏掉, label添加伪元素放在input位置处

c.input状态为checked时,将label的伪元素content进行修改

12.AB里面的容器不等高,如何做到使两个背景等高?

  • 通过flex方式,让父元素display: flex;

  • 通过position方式,例如:左侧高度固定,父元素position: relatvie; 右侧position: absolute; top: 0; bottom: 0;

  • 父元素display: table; 两个子元素display: table-cell.

  • 父元素使用display: grid; grid-template-colums: 1fr 200px;分为两列,子元素通脱grid-colum: 1/2占左边,另个占右边。

13.position的理解

14.px、em、rem

答:px是相对于显示器屏幕分辨率而言的。

em是相对于当前对象的文本的字体尺寸,如果当前对行内文本的字体尺寸未被设置,则依次向上查找直到相对于浏览器的默认字体

rem是相对于html根元素(比较推荐)

最后浏览器默认字体是16px,要设置一对一的对应关系,需要设置font-size:62.5%

最后的最后,欢迎大家吐槽和提建议和意见!!!

整理不全忘补充!!!

篇介绍了表单的使用,表单有很多控件,比如输入框,密码框、文本域,按钮等。按类型可分如下:

  • 输入类控件
  • 菜单类控件

输入类组件 —— input

此类控件有很多种类型,使用<input type="类型">语法,常见类型如下:

type 值

含义

text

文字字段

password

密码域,用户看不到明文,以*代替

radio

单选按钮

checkbox

多选按钮

button

普通按钮

submit

提交按钮

reset

重置按钮

image

图像域,用图像作为背景的提交按钮

hidden

隐藏域,不可见的输入框

file

文本域,用于上传文件等非文本数据

文本输入框和密码框

除了显示形式不一样,其它属性一样,有以下属性:

  • name —— 定义文字字段名称,用于和其它控件区别,不能包含特殊字符,也不可使用html 标签名称
  • maxlength —— 定义文本框可输入字符最大长度
  • size —— 定义文本框在页面中显示的长度
  • vaule —— 定义文本框中默认的值

如下是文本输入框和密码框制作一个登录表单

html代码:

<!DOCTYPE html>
<html>
<body>
<h1>用户登录</h1>
<form action="/demo/html/action_page.php">
  <label for="fname">用户名:</label><br>
  <input type="text" id="username" name="username" value=""><br>
  <label for="lname">密码:</label><br>
  <input type="password" id="pwsd" name="pwsd" value=""><br><br>
  <input type="submit" value="提交">
</form> 
</body>
</html>

显示效果:

HTML5 输入类型

除了以上几种类型,HTML5 还增加了多个新的输入类型:

  • color
  • date
  • datetime
  • datetime-local
  • email
  • month
  • number
  • range
  • search
  • tel
  • time
  • url
  • week

如下代码:

<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
  数字类型(1 到 5 之间):
  <input type="number" name="quantity" min="1" max="5">
  IE9 及早期版本不支持 type="number"。<br>
  color 选择颜色:
  <input type="color" name="color"><br>
   生日:
  <input type="date" name="bday"><br>
  年月:
  <input type="month" name="bdaymonth"><br>
  年周:
  <input type="week" name="week_year"><br>
  时间:
  <input type="time" name="usr_time"><br>
  一定范围
   <input type="range" name="points" min="0" max="10"><br>
   E-mail:
  <input type="email" name="email">
  能够在被提交时自动对电子邮件地址进行验证<br>
  搜索:
  <input type="search" name="googlesearch"><br>
  电话:
  <input type="tel" name="usrtel">
  目前只有 Safari 8 支持 tel 类型。<br>
  url:
  <input type="url" name="url">
  提交时能够自动验证 url 字段<br>
  <input type="submit">
</form>
</body>
</html>

效果如下:

单选和多选按钮

使用 type=“radio” 和 type=“checkbox” 定义是单选还是多选,除了name和value属性外,单选和多选都有一个 checked属性定义默认选择的项,checked=“true”指选中那个选项,表单会将 checked=“true” 的选型值传递给后台。

如下实例:

<!DOCTYPE html>
<html>
<body>
<h4>单选和多选</h4>
<form action="/demo/demo_form.asp">
水果:
<input type="radio" name="shuiguo" value="banner" checked> 香蕉
<input type="radio" name="shuiguo" value="apple"> 苹果
<br><br>
省份:
<input type="checkbox" name="shengfen" value="shannxi" checked> 陕西
<input type="checkbox" name="shengfen" value="sanxi"> 山西
<input type="checkbox" name="shengfen" value="gdong"> 广东
<br><br>
<input type="submit">
</form> 
</body>
</html>

显示效果:

单选和多选传递给后台的数据是不一样的,如下会看到地址栏中的数据,多选会发送多个值,后台将会获取一个数组形式的数据。

/demo/demo_form.asp?shuiguo=banner&shengfen=shannxi&shengfen=sanxi

普通按钮、提交按钮、重置按钮

普通按钮:type=“button”,一般配合脚本使用,语法如下:

<input type="button" name="名称" value="按钮值" onclick="脚本程序" />

value 值就是按钮在页面显示的文字,onclick属性定义了脚本事件,这里指单击按钮时所进行的处理。

如下示例:

<!DOCTYPE html>
<html>
<body>
<form>
 <input type="button" value="普通按钮">
<input type="button" value="打开窗口" onclick="window.open()">
<input type="button" value="您好" onclick="alert('您好')">
  </form>
</body>
</html>

单击您好按钮

提交按钮:type=“submit”,用于提交表单内容,是一种特殊按钮。

如刚才的登录表单,提交后会返回结果:

重置按钮:type="reset",用于清除表单数据,也是一种特殊按钮。

输入数据

点击重置按钮后,表单数据清空

重置清空数据

HTML5 按钮

除了使用input定义按钮,还可以使用 html5 新增的<button> 标签定义按钮,button 使用语法如下:

<form action="/demo/html/action_page.php">
<button type="button">普通按钮</button>
<button type="submit">提交按钮</button>
</form> 

其它输入类控件

隐藏域 —— hidden
文件域 —— file

如下示例:

<form action="/demo/html/action_page.php">
  <label for="fname">隐藏域:</label>
  <input type="hidden" id="hidden" name="hidden" value=""><br>
  <label for="lname">文件域:</label>
  <input type="file" id="file" name="file" value=""><br>
  <input type="submit" value="提交">
</form> 

显示效果

可以看到,隐藏域在页面中不显示,单击文件域选择文件按钮可以选择文件,比如word文件,电子表格文件等,会以非文本方式传送到后台的,常用来实现文件上传功能。

文本域 —— textarea

除了input 类型的控件,还有文本域 textarea ,一种特殊的文本框,它与input 文本输入框的区别就是可以输入多行文字,input 文本输入框是单行的无法输入多行文字。

如下示例:

<p>textarea 元素定义多行输入字段。</p>
<form action="/demo/html/action_page.php">
  <textarea name="message" rows="10" cols="30">The cat was playing in the garden.</textarea>
  <br><br>
  <input type="submit">
</form>

效果如下:

rows 属性定义文本域的高度是几行,cols 定义文本域宽度占几列,比如上面定义了高10行宽30列的文本域。

下拉菜单和多选列表

下拉菜单作用和单选按钮类似,只不过它更加节省空间,当要选择的选型很多时,就不适合使用radio空间,所以当选项很多的时候,使用下拉菜单,语法如下:

<select name="名称">
<option value="选项值1" selected>选项1</option>
<option value="选项值2">选项3</option>
更多option......
</select>

多选列表和多选按钮类似,一样为了节省空间,当数据选项比较多时,使用多选列表,语法如下:

<select name="名称" size="可看见的列表项数" multiple>
<option value="选项值1" selected>选项1</option>
<option value="选项值2">选项3</option>
更多option......
</select>

多选比下拉菜单不同之处是多了一个multiple属性,定义多选的,且表现形式也不一样,不是下拉而是一个列表。

如下代码:

<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
下拉菜单:<br>
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br>
多选列表:<br>
<select name="cars" size="3" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br><br>
<input type="submit">
</form>
</body>
</html>

显示效果:

这里需要注意的是,多选列表多选时需要按住ctrl键同时鼠标单击选择才能多选,效果如下:

到这里,已介绍了大部分的表单控件,现在你可以使用他们制作自己的表单,表单通常在动态网站中使用,这为以后制作动态网站打下基础。

还有许多属性没有讲到,比如html5新增的一些属性和功能,可自行参考 w3cshool 等网站学习,感谢关注,学习愉快!

上篇 : 前端入门——html 表单

下篇: 前端入门 —— 网页中使用窗口框架

1 : 表单标签

<form></form>
属性 :
action='接口地址'
method='get / post'
name='表单名称'

2 : 表单控件

<input>
属性:
type='控件类型'
name:属性标识表单域的名称;
Value:属性定义表单域的默认值,其他属性根据type的不同而有所变化。
maxlength:控制最多输入的字符数,
Size:控制框的宽度(以字符为单位)
1)文本框
<input type="text" value="默认值"/>
2)密码框
<input type="password" />
3)提交按钮
<input type="submit" value="按钮内容" />
4)重置按钮
<input type="reset" value="按钮内容" />
5)空按钮
<input type="button" value="按钮内容" />

3:表单补充

1)单选按钮组
<input type=“radio” name=“ral” />男
<input type=“radio” name=“ral”
checked=“checked”/>(默认选中)女
2)复选框组
<input type="checkbox" name="" />
<input type="checkbox" name="" disabled="disabled" />
* disabled="disabled" (禁用)
* checked="checked" (默认选中)
3)下拉列表(菜单):
<select >
<option>下拉选项1</option>
<option>下拉选项2</option>
…………
</select>
表示下拉列表,name属性不是必须的
默认选择项用selected属性;
4)表单域多行文本定义:
语法: <textarea name="" cols="" rows="" ></textarea>
多行文本。rows属性和cols属性用来设置文本输入窗口的高度和宽度,单位是字符。
阻止浏览器对窗口的拖动设置:{resize:none;}(css属性)
5)上传文件:
语法:<input type="file">

4:表单标签补充

1)表单字段集
语法:<fieldset></fieldset>

说明:相当于一个方框,在字段集中可以包含文本和其他元素。该元素用于对表单中的元素进行分组并在文档中区别标出文本。fieldset元素可以嵌套,在其内部可以在设置多个fieldset对象。disabled定义空间禁制可用;
?
2)字段级标题:
语法:<legend align="left/center/right/justify"></legend>
说明:legend元素可以在fieldset对象绘制的方框内插入一个标题。legend元素必须是fieldset内的唯一个元素。
3)提示信息标签:
语法:<label for="绑定控件id名"></label>
?
说明:label元素用来定义标签,为页面上的其他元素指定提示信息。要将label元素绑定到其他的控件上,可以将label元素的for属性设置为与该控件的id属性值相同。

拓展:post/get

  • (1). 从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;
  • (2). 从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;
  • (3). 从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII);而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。
  • (4). 就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。
  • (5). 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。

转自:知乎Eric