CSS总结

h5新特性

  1. 视频video和音频audio
  2. 语义化标签:header、footer、nav、section、article
  3. 表单控件:date、time、email、url、search、calender
  4. canvas画布
  5. WebWorker
  6. WebSocket
  7. WebStorage:localStorage、sessionStorage

如何理解HTML语义化

  1. 让人更容易读懂(增加代码可读性)
  2. 让搜索引擎更容易读懂,有助于爬虫抓取更多的有效信息,爬虫依赖于标签来确定上下文和各个关键字的权重(有利于SEO)
  3. 在没有css样式下,页面也能呈现出很好的内容结构、代码结构

script标签中defer和async的区别

  1. script:会阻碍HTML解析,只有下载好并执行完脚本才会继续解析HTML
  2. async script:解析HTML过程中进行脚本的异步下载,下载成功立马执行,有可能会阻断HTML的解析
  3. defer script:不会阻碍HTML的渲染,渲染完成之后再按照顺序执行脚本
  4. 如果有多个defer,会按照顺序加载,async不能保证加载顺序。

CSS3新特性

  1. 伪类选择器
  2. 圆角 border-radius
  3. 阴影 box-shadow text-shadow
  4. 弹性盒 flex
  5. @media 媒体查询
  6. 支持透明度 rgba
  7. 过渡 transition
  8. 动画 animation
  9. 形状转换 transform

常见的行内元素和块级元素

  1. 行内元素inline,不能设置宽高:span、label、a、em
  2. 行内块inline-block,可以设置宽高:input、img、textarea
  3. 块级元素block:div、p、h1-h6、hr、ul、ol、li

替换元素和非替换元素

  1. 替换元素:若标签的属性可以改变标签的显示方式就是替换元素,比如input的type属性不同会有不同的展现,img的src等。有img、input、iframe
  2. 非替换元素:div、p、span

CSS选择器有哪些?哪些可以继承?

  1. id选择器、类选择器、标签选择器、相邻选择器(div+p)、子选择器(ul>li)、后代选择器、通配符选择器(*)、属性选择器(a[rel=“external”])、伪类选择器
  2. 可继承的属性:
    font-size、font-family、color
  3. 不可继承的属性:
    border、padding、margin、width、height
  4. 优先级:
    !important > style > id > class > tag

line-height如何继承

  1. 父元素的line-height写了具体数值,比如30px,子元素继承该值
  2. 父元素的line-height写了比例,比如1.5或2,子元素继承该比例
  3. 父元素的line-height写了百分比,比如200%,子元素继承的是父元素的font-size*200%计算出来的值

盒模型

  1. 标准盒模型
    宽度 = 内容宽度(content) + padding + border + margin
  2. IE盒模型
    宽度 = 内容宽度(content + padding + border) + margin
  3. 属性box-sizing
    默认是content-box,border-box转换为IE盒模型

新增伪类

  1. p:first-of-type:从第一个开始,匹配到的第一个元素
  2. p:last-of-type:匹配到的最后一个元素
  3. p:first-child:父元素的第一个子元素
  4. :enabled:disabled表单控件的禁用状态
  5. :checked:单选框或复选框被选中

伪类和伪元素的区别

  1. 伪元素使用双冒号,伪类使用单冒号
  2. 伪类本质上是弥补常规CSS选择器的不足,以便获取到更多信息;伪元素本质上是创建了一个有内容的虚拟容器
  3. 可以同时使用多个伪类,而只能同时使用一个伪元素

CSS隐藏元素

  1. display:none:不占据空间,无法点击,会引起回流(改变了布局),不会被子元素继承,但其自身隐藏,子元素自然也隐藏
  2. visibility:hidden:占据空空间,无法点击,只会引起重绘,会被子元素继承,子元素可以设置visibility:visible重新显示
  3. opacity:0:占据空间,可以点击,引起重绘,会被子元素继承,但是父元素隐藏,给子元素设置opacity:1,子元素也不会显示
  4. overflow:hidden:占据空间,无法点击,溢出部分隐藏
  5. transform:scale(0,0):占据空间,无法点击

元素隐藏滚动条

新增伪类-webkit-scrollbar设置属性:

&::-webkit-scrollbar{
    display: none;
 }

关于文本溢出

  1. 单行文本溢出
overflow:hidden;//溢出隐藏
text-overflow:ellipsis;//溢出用省略号显示
white-space:nowrap;//文本不换行
  1. 多行文本溢出
overflow:hidden;//溢出隐藏
text-overflow:ellipsis;//溢出用省略号显示
display:-webkit-box;//作为弹性伸缩盒子模型显示
-webkit-box-orient:vertical;//设置伸缩盒子的子元素排列方式
-webkit-line-clamp:2;//显示的行数

一个满屏品字如何布局

  1. 第一种真正的品字
    (1)三块宽高是确定的
    (2)上面那块用margin:0 auto居中
    (3)下面两块用float或inline-block不换行
    (4)用margin调整位置使它们居中
  2. 第二种全屏的品字
    上面的div设置成100%,下面的div分别宽50%,用float或inline-block不换行

元素居中

  1. flex布局
    // 父元素
    .parent{
    	display:flex;
    	justify-content:center;//主轴
    	align-items:center;//侧轴
    }
    
  2. transform平移
    定位,top和left50%,transform:translate(-50%,-50%)
  3. margin:auto
    定位,四周设置为0,margin:auto
  4. margin负间距
    定位,top和left50%,margin-top和margin-left为宽高的一半

弹性盒flex布局

父元素属性

开启弹性盒:dislay:flex

  1. flex-directon:决定主轴的方向,取值如下:
    (1)row(默认值):主轴为水平方向,起点在左端
    (2)row-reverse:主轴为水平方向,起点在右端
    (3)column:主轴为垂直方向,起点在上沿
    (4)column-reverse:主轴为垂直方向,起点在下沿
  2. flex-wrap:如果一条轴线排不下,如何换行。
    (1)nowrap(默认):不换行
    (2)wrap:换行,第一行在上方
    (3)wrap-reverse:换行,第一行在下方
  3. flex-flow:是flex-direction和flex-wrap的缩写,默认为row nowrap
  4. justify-content:在主轴方向上的对齐方式
    (1)flex-start(默认值):左对齐
    (2)flex-end:右对齐
    (3)center:居中
    (4)space-between:两端对齐,元素之间的间隔相等
    (5)space-around:每个元素两侧的间隔相等,所以元素之间的间隔要比元素与边框的距离大一倍
  5. align-items:在交叉轴上的对齐方式
    (1)flex-start:交叉轴的起点对齐
    (2)flex-end:交叉轴的终点对齐
    (3)center:居中
    (4)baseline:元素的第一行文字的基线对齐
    (5)stretch(默认值):如果元素未设置高度或高度auto,将占满整个容器的高度
  6. align-content:多根轴线的对齐方式,如果只有一根轴线,该属性不起作用。
    (1)flex-start:与交叉轴的起点对齐
    (2)flex-end:与交叉轴的终点对齐
    (3)center:居中
    (4)space-between:与交叉轴两端对齐,轴线之间的间隔相等
    (5)space-around:每根轴线两侧的间隔相等
    (6)stretch(默认值):轴线占满整个交叉轴
子元素属性
  1. order:元素的排列顺序,数值越小,排列越靠前,默认为0。
  2. flex-grow:元素的放大比例,默认为0,即如果存在剩余空间,也不放大。
  3. flex-shrik:元素的缩小比例,默认为1,即如果空间不足,该元素将缩小。
  4. flex-basis:在分配多余空间之前,元素占据的主轴空间,默认值为auto,即元素的本来大小。
  5. flex:flex-grow、flex-shrik、flex-basis的简写,默认值为0 1 auto,后两个属性可选。
    该属性有两个快捷键:
    (1)auto(1 1 auto)
    (2)none (0 0 auto)
  6. align-self:允许单个元素有与其他元素不一样的对齐方式,可覆盖align-items属性。

link和import的区别

  1. link属于html,@import属于CSS
  2. 页面被加载时,link会同时被加载,@import引用的CSS会等到页面加载结束后加载
  3. link没有兼容性,@import需要IE5以上
  4. link方式样式的权重高于@import

BFC

  1. BFC(Block Formatting Contenx)块级格式化上下文,是web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。
  2. 常见定位方案
    (1)普通流:默认,从上而下,行内元素水平排列,行满换行,块级元素渲染成一个新行。
    (2)浮动:先按普通流位置出现,然后根据浮动方向偏移。
    (3)绝对定位:元素具体位置由绝对定位坐标组成。
  3. BFC特性
    BFC属于普通流,容器里面的子元素不会影响到外面,反之亦然。
    (1)BFC内部元素是垂直排列的
    (2)同一个BFC下margin会重叠
    (3)BFC里的元素不会影响外部元素
    (4)计算BFC高度时会算上浮动元素
    (5)BFC区域不会与float元素重叠
    如:两栏布局:左边固定宽度,右边宽度自适应,左边设置左浮动,右边设置overflow:hidden。三栏布局、文字环绕问题
  4. 形成BFC的条件
    (1)根元素(html)
    (2)浮动元素
    (3)overflow不为visible,为auto、hidden、scroll
    (4)display的值为inline-block、table-cell、table、flex、grid
    (5)定位元素,position的值为absolute或fixed
  5. 应用
    (1)利用BFC避免margin重叠
    (2)自适应两栏布局:右边元素有部分会被浮动元素覆盖(但文本信息不会,即文字环绕问题)
    (3)清除浮动:当不给父元素设置高度的时候,子元素浮动会导致高度坍塌

三栏布局

  1. flex布局
  2. position+margin
    <div class="wrap">
        <div class="left">left</div>
        <div class="center">center</div>
         <div class="right">right</div>
    </div>
    
    .wrap{
        position: relative; 
    }
    .left,.right{
        position:absolute; 
        width: 100px;
        height: 100px;
        top: 0;
        right: 0;
    }
    .left{
        left: 0; 
    }
    .center{
        height: 100px;
        margin: 0 100px;
    }
    
  3. float+margin
    <div class="wrap">
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="center">center</div>
    </div>
    
    .wrap{
        overflow: hidden;
    }
    .left,.right{
        width: 100px;
        height: 100px;
        float: right;
    }
    .left{
        float: left;
    }
    .center{
        height: 100px;
        margin: 0 100px;
    }
    

px、em和rem

  1. px是相对长度单位,是相对于显示器屏幕分辨率而言的。
  2. em是相对于父元素的font-size
  3. rem是相对于根元素(html)的font-size

rem

1rem = html的font-size值
适配原理:js设置html的font-size = 设备宽度 / 设计稿宽度 * 100,移动设备宽度/设计稿宽度 是渲染效果相对于设计稿的缩放比,乘以100是为了把font-size放大100倍,因为当font-size小于浏览器支持的最小字体时,浏览器会把这个值按照最小字体处理,乘以100是为了好计算。(假如设计稿750,设计稿上的width是50px,设置rem为50/100=0.5rem)

function refreshRem() {
    var width = docEl.getBoundingClientRect().width;
    if (!maxWidth) {
        maxWidth = 640;
    };
    if (width > maxWidth) {
        width = maxWidth;
    }
    var rem = width * 100 / designWidth;
    //兼容UC开始
    rootStyle="html{font-size:"+rem+'px !important}';
    rootItem = document.getElementById('rootsize') || document.createElement("style");
    if(!document.getElementById('rootsize')){
    document.getElementsByTagName("head")[0].appendChild(rootItem);
    rootItem.id='rootsize';
    }
    if(rootItem.styleSheet){
    rootItem.styleSheet.disabled||(rootItem.styleSheet.cssText=rootStyle)
    }else{
    try{rootItem.innerHTML=rootStyle}catch(f){rootItem.innerText=rootStyle}
    }
    //兼容UC结束
    docEl.style.fontSize = rem + "px";
};
refreshRem();

win.addEventListener("resize", function() {
    clearTimeout(tid); //防止执行两次
    tid = setTimeout(refreshRem, 300);
}, false);

win.addEventListener("pageshow", function(e) {
    if (e.persisted) { // 浏览器后退的时候重新计算
        clearTimeout(tid);
        tid = setTimeout(refreshRem, 300);
    }
}, false);

if (doc.readyState === "complete") {
    doc.body.style.fontSize = "16px";
} else {
    doc.addEventListener("DOMContentLoaded", function(e) {
        doc.body.style.fontSize = "16px";
    }, false);
}

移动端响应式

  1. rem
  2. meta标签的viewport
 <script>
    (function (screen) {
      var phoneWidth = parseInt(window.screen.width);
      var phoneScale = phoneWidth / screen;
      var ua = navigator.userAgent;
      if (/Android (\d+\.\d+)/.test(ua)) {
        var version = parseFloat(RegExp.$1);
        // andriod 2.3
        if (version > 2.3) {
          document.write('<meta name="viewport" content="width=' + screen + ', minimum-scale = ' + phoneScale + ', maximum-scale = ' + phoneScale + ', target-densitydpi=device-dpi, minimal-ui, viewport-fit=cover">');
          // andriod 2.3以上
        } else {
          document.write('<meta name="viewport" content="width=' + screen + ', target-densitydpi=device-dpi, minimal-ui">');
        }
        //其他系统
      } else {
        document.write('<meta name="viewport" content="width=' + screen + ', user-scalable=no, viewport-fit=cover">');
      }
    })(750);
  </script>

插件:postcss-px-to-viewport
3. vw、vh
4. 媒体查询
5. 百分比
6. flex

浏览器兼容问题

  1. 通配符设置内外边距为0,不同浏览器默认的padding和margin不同。*{padding:0;margin:0;}
  2. 块属性标签float后,又有横行的margin情况,在IE9以下margin比设置的大,后面的一块会被顶到下一行。解决:使用flex布局,或将其转换为行内元素display:inline
  3. 默认图片有间距:使用float为图片布局
  4. 获取窗口大小的兼容写法
var client_w = document.documentElement.clientWidth || document.body.clientWidth;
var client_h = document.documentElement.clientHeight || document.body.clientHeight;

渐进增强和优雅降级

  1. 渐进增强:针对低版本浏览器进行页面构建,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
  2. 优雅降级:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值