HTML + CSS

68 阅读6分钟

HTML + CSS

常见行内、块级和空元素

www.runoob.com/html/html-t…

常见的块元素:

address- 地址
blockquote - 块引用
center - 举中对齐块
div - 常用块级容易,也是 css layout 的主要标签
dl - 定义列表
fieldset - form 控制组
form - 交互表单
h1 - 大标题
h2 - 副标题
h3 - 3 级标题
h4 - 4 级标题
h5 - 5 级标题
h6 - 6 级标题
hr - 水平分隔线
noscript - 可选脚本内容(对于不支持 script 的浏览器显示此内容)
ol - 排序列表
p - 段落
pre - 格式化文本
table - 表格
ul - 非排序列表

常见的内联元素 不会换行:

a - 锚点
b - 粗体(不推荐)
br - 换行
code - 计算机代码(在引用源码的时候需要)
em - 强调
i - 斜体
img - 图片
input - 输入框
label - 表格标签
q - 短引用
select - 项目选择
small - 小字体文本
span - 常用内联容器,定义文本内区块
strike - 中划线
strong - 粗体强调
textarea - 多行文本输入框

常见的空元素:

<input /> <img /> <isindex /> <area /> <base /> <basefont /> <bgsound />
<col />
<embed /> <frame /> <keygen /> <link /> <meta /> <nextid />
<param />
<plaintext />
<spacer /> <wbr /> <!DOCTYPE >

HTML5 新特性

www.cnblogs.com/binguo666/p…

  1. 语义标签

    header section footer nav 
    
  2. 增强型表单 自带有表单验证 兼容性问题

  3. 视频和音频

  4. Canvas 绘图

  5. SVG 绘图 矢量

  6. 地理定位 内置的api

  7. 拖放 API

  8. WebWorker

  9. WebStorage

  10. WebSocket 实时双向通信 在线聊天 短轮询 长轮询

iframe 有那些缺点

  1. iframes阻塞页面加载,影响网页加载速度,iframe加载完毕后才会触发window.onload事件,动态设置src可解决这个问题。

  2. 加载了新页面,增加了cssjs文件的请求,即额外增加了HTTP请求,增加了服务器负担。

  3. 有时iframe由于页面挤占空间的原因出现滚动条,造成布局混乱。

  4. 不利于SEO,搜索引擎的爬虫无法解读iframe的页面。

  5. 有些小型的移动设备如手机等无法完全显示框架,兼容性较差。

  6. iframe与主页面是共享链接池的,若iframe加载时用光了链接池,则会造成主页面加载阻塞。

    www.zhihu.com/zvideo/1270…

  7. 非同源的网页嵌套受到同源策略的显示会难以交互 (js 内外互相控制)

HTML、XML、XHTML 之间有什么区别

它们都属于标记语言。

语言中文名说明
XML可扩展标记语言主要⽤于存储数据和结构。语法严谨,可扩展性强。由于 JSON 也有类似作⽤但更轻量⾼效, XML 的市场变得越来越⼩。
XHTML可扩展超文本标记语言属于加强版 HTML,为解决 HTML 的混乱问题而生,在语法方面变得和 XML 一样严格。另外,XHTML 的出现也催生了 HTML 5,让 HTML 向规范化严谨化过渡。
HTML5超文本标记语言在 HTML 的基础上进行拓展,用于页面呈现 (目前标准)

XML的要求会比较严格:

  1. 有且只能有一个根元素

  2. 大小写敏感

  3. 正确嵌套

  4. 必须双引号

  5. 必须闭合标签

    ...

<?xml version="1.0" encoding="utf-8"?>
<root>
  <father id='box'>
    <child>小张</child>
    <child>小王</child>
  </father>
</root>

谈谈你对 HTML 语义化的理解

语义化之前:

在提倡语义化之前,你可能会使用各种各样的标签去实现同样的功能,比如:

  • 使用 span、div、p、a 等做文字, 做按钮
  • 使用 div 做一切

从功能方面来说,这确实是不存在什么问题的,完全可以达到功能效果。但这不符合直觉,非常不友好:

  • 对人不友好:阅读代码的人不能一眼看出代码的功能
  • 对机器不友好:解析代码的程序不能很好的对这些元素进行分类处理

语义化之后:

为了解决上面说的问题,HTML5 规范提倡语义化标签,即使⽤恰当语义的 HTML 标签让⻚⾯具有良好的结构与含义,⽐如:

  • <p> 标签就代表段落
  • <article> 代表正⽂内容
  • <button>代表按钮
  • <header> 代表头部
  • 等等...

语义化的好处:

对开发者的好处对机器/程序的好处
使⽤了语义化标签的程序,可读性明显增强,开发者可以比容易和清晰地看出⽹⻚的结构;这也更利于整个开发团队的协作开发和后续维护工作带有语义的网页代码在⽂字类应用上的表现⼒丰富,利于搜索引擎爬⾍程序来爬取和提取出有效的信息;语义化标签还⽀持读屏软件,根据⽂章可以⾃动⽣成⽬录等,方便特殊人群无障碍的使用这些网页程序。

语义化的适用性:

语义化适合内容型的网站来使用(如简书、知乎),对其⽹站内容的传播有很⼤帮助。

谈谈你对 flex 布局的理解

www.ruanyifeng.com/blog/2015/0…

  1. 传统布局效率太低
  2. flex 解释为弹性布局,可以很灵活的实现布局效果
  3. 分为父容器和子容器
  4. 当父盒子设置为 flex 后,子元素浮动失效、不再区分行内和行内块

css3 新特性

flex、transition、animation、媒体查询

link 与@import 的区别是什么

<!DOCTYPE html>
 <html lang="en">
<head>
<link rel="stylesheet" rev="stylesheet" href="myCss.css" type="text/css" >
<style type="text/css" >
@import url("./myCss.css");
</style>
 </head>
</html>

这就是两种引用方式的常见用法,可以很清晰的看出

  • 1、从属关系:link 是 html 的标签,不仅可以加载 CSS 文件,还可以定义 媒体查询rel 连接属性等;而@import 是 css 的语法,只有导入样式表的作用。
  • 2、加载顺序:页面被加载时,link 会和 html 同时被加载而;@import 引入的 CSS 将在页面加载完毕后被加载。
  • 3、兼容性:@import 是 CSS2.1 才有的语法,所以只能在 IE5 以上 才能识别;而 link 是 HTML 标签,所以不存在兼容性问题。
  • 4、DOM:javascript 只能控制 dom 去改变 link 标签引入的样式,而@import 的样式不是 dom 可以控制的。
  • 5、link 方式的样式权重高于@import 的权重。(如果对权重不是十分了解,可以看我之前的文章)

display 有哪些值?说明他们的作用

https://segmentfault.com/a/1190000012833458 

CSS 选择器的优先级是怎么样的 权重

!important > 行内样式>ID 选择器 > 类选择器 > 标签 > 通配符 > 继承

  1. 行内 1,0,0,0
  2. id 0,1,0,0
  3. 0,0,1,0
  4. 标签 0,0,0,1
  5. 继承 0,0,0,0

测试

测试一

<style type="text/css">
  #father {
    color: red;
  }
  p {
    color: blue;
  }
</style>
<body>
  <div id="father">
    <p>试问这行字体是什么颜色的?</p>
  </div>
</body>

测试二

<style type="text/css">
  div div {
    color: blue;
  }
  div {
    color: red;
  }
</style>
<body>
  <div>
    <div>
      <div>试问这行字体是什么颜色的?</div>
    </div>
  </div>
</body>

测试三

<style type="text/css">
  div p {
    color: red;
  }
  #father {
    color: yellow;
  }
  p.c2 {
    color: blue;
  }
</style>
<body>
  <div id="father" class="c1">
    <p class="c2">试问这行字体是什么颜色的?</p>
  </div>
</body>

测试四

<style type="text/css">
  #father #son {
    color: blue;
  }
  #father p.c2 {
    color: black;
  }
  div.c1 p.c2 {
    color: red;
  }
  #father {
    color: green !important; /* 继承的权重为0 */
  }
</style>
<body>
  <div id="father" class="c1">
    <p id="son" class="c2">试问这行字体是什么颜色的?</p>
  </div>
</body>

让元素水平居中的方法有哪些?

方法一:使用 margin

通过为元素设置左右的 margin 为 auto,实现让元素居中。

<div class="center">本内容会居中</div>
.center {
  height: 500px;
  width: 500px;
  background-color: pink;
  margin: 0 auto;
}

方式二: 转成行内块, 给父盒子设置 text-align: center

<div class="father">
  <div class="center">我是内容盒子</div>
</div>
.father {
  text-align: center;
}
.center {
  width: 400px;
  height: 400px;
  background-color: pink;
  display: inline-block;
}

方法三:使用 flex 布局

使用 flex 提供的子元素居中排列功能,对元素进行居中。

<div class="father">
  <div class="center">我是内容盒子</div>
</div>
.father {
  display: flex;
  background-color: skyblue;
  justify-content: center;
  align-items: center;
}
.center {
  width: 400px;
  height: 400px;
  background-color: pink;
}

方式四: 使用定位布局

<div class="father">
  <div class="center">我是内容盒子</div>
</div>
.father {
  background-color: skyblue;
  position: relative;
  height: 500px;
}
.center {
  width: 400px;
  height: 400px;
  background-color: pink;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}