赞
踩
目录
列举 5 个以上的 H5 input 元素 type 属性值?
Display:none 与 visibility:hidden 的区别?
::before 和::after 中双冒号和单冒号有什么区别、作用?
CSS3 新特性
-
- <style>
- .parent {
- width: 500px;
- height: 500px;
- border: 1px solid #000;
- position: relative;
- }
-
- .child {
- width: 100px;
- height: 100px;
- border: 1px solid #999;
- position: absolute;
- top: 50%;
- left: 50%;
- margin-top: -50px;
- margin-left: -50px;
- }
- </style>
- <div class="parent">
- <div class="child">我是子元素</div>
- </div>

- .parent {
- width: 500px;
- height: 500px;
- border: 1px solid #000;
- position: relative;
- }
-
- .child {
- width: 100px;
- height: 100px;
- border: 1px solid #999;
- position: absolute;
- margin: auto;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- }

利用display:table;使div成为一个块级表格元素,给其子元素设置display:table-cell;使子元素成为表格单元格,然后设置vertical-align:middle;可使多行文字垂直居中。
-
- .parent {
- width: 500px;
- height: 500px;
- border: 1px solid #000;
- display: table-cell;
- vertical-align: middle;
- text-align: center;
- }
-
- .child {
- width: 100px;
- height: 100px;
- border: 1px solid #999;
- display: inline-block;
- }

- .parent {
- width: 500px;
- height: 500px;
- border: 1px solid #000;
- display: flex;
- justify-content: center;
- align-items: center;
- }
-
- .child {
- width: 100px;
- height: 100px;
- border: 1px solid #999;
- }
- .parent {
- width: 500px;
- height: 500px;
- border: 1px solid #000;
- }
-
- .child {
- width: 100px;
- height: 100px;
- border: 1px solid #999;
- margin-top: 200px;
- margin-left: 200px;
- }
方法六:利用 transform
translate()函数是css3的新特性.在不知道自身宽高的情况下,可以利用它来进行水平垂直居中.。
当使用:top: 50%;left: 50%;, 是以左上角为原点,故不处于中心位置 translate(-50%,-50%) 作用是,往上(x轴),左(y轴)移动自身长宽的 50%,以使其居于中心位置。
- .parent {
- width: 500px;
- height: 500px;
- border: 1px solid #000;
- position: relative;
- }
-
- .child {
- width: 100px;
- height: 100px;
- border: 1px solid #999;
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- }

- <style>
- .father {
- height: 400px;
- background-color: pink;
- position: relative;
- padding: 0 200px;
- }
-
- .left,
- .right {
- width: 200px;
- height: 300px;
- background-color: yellow;
- position: absolute;
- top: 0;
- }
-
- .left {
- left: 0;
- }
-
- .right {
- right: 0;
- }
-
- .center {
- background-color: blue;
- height: 350px;
- }
- </style>
- <div class="father">
- <div class="left"></div>
- <div class="center"></div>
- <div class="right"></div>
- </div>

- <style>
- .father {
- height: 400px;
- background-color: pink;
- display: flex;
- }
-
- .left {
- width: 200px;
- height: 300px;
- background-color: yellow;
- }
-
- .right {
- width: 200px;
- height: 300px;
- background-color: yellow;
- }
-
- .center {
- flex: 1;
- background-color: blue;
- }
- </style>

- <style>
- .father {
- height: 500px;
- background-color: pink;
- }
-
- .left {
- float: left;
- width: 200px;
- height: 400px;
- background-color: blue;
- }
-
- .right {
- float: right;
- width: 200px;
- height: 400px;
- background-color: blue;
- }
-
- .center {
- height: 450px;
- background-color: green;
- overflow: hidden;
- }
- </style>
- <!-- 注意:left 和 right 必须放在 center 前面 -->
- <div class="father">
- <div class="left"></div>
- <div class="right"></div>
- <div class="center"></div>
- </div>

IE 标准的盒子模型(怪异盒模型) box-sizing: border-box;
我们还可以通过属性 box-sizing 来设置盒子模型的解析模式可以为 box-sizing 赋两个值:
!Important>行内样式>ID 选择器>类选择器>标签>通配符>继承>浏览器默认属性
权重
CSS 权重是由四个数值决定,看一张图比较好解释:
图里是英文的,翻译过来分别介绍一下,4 个等级的定义如下:
其他:
CSS 权重计算方式
栗子
div#app.child[name="appName"] /a=1,b=2,c=1 —>权重 = 1 + 100 + 10 +10 = 121/
能继承的属性
1. 字体系列属性:font、font-family、font-weight、font-size、font-style;
2. 文本系列属性:
内联元素:color、line-height、word-spacing、letter-spacing, text-transform;
块级元素:text-indent、text-align;
3. 元素可见性:visibility
4. 表格布局属性:caption-side、border-collapse、border-spacing、empty-cells,table-layout;
5. 列表布局属性:list-style
不能继承的属性
1. display:规定元素应该生成的框的类型;
2. 文本属性:vertical-align、text-decoration;
3. 盒子模型的属性:width、height、margin 、border、padding;
4. 背景属性:background、background-color、background-image;
5. 定位属性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip;
区别:
IE 无法调整那些使用 px 作为单位的字体大小,而 em 和 rem 可以缩放,rem,相对的只是 HTML 根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通 过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐 层复合的连锁反应。目前,除了 IE8 及更早版本外,所有浏览器均已支持 rem
通用方案
优:有一定适用性,换算也较为简单
劣:有兼容性的坑,对不同手机适配不是非常精准;需要设置多个媒体查询来适应不同手机,单某款手机尺寸不在设置范围之内,会导致无法
网易方案
1、拿到设计稿除以 100,得到宽度 rem 值
2、通过给 html 的 style 设置 font-size,把 1 里面得到的宽度 rem 值代入 x document.documentElement.style.fontSize = document.documentElement.clientWidth / x + ‘px‘;
3、设计稿 px/100 即可换算为 rem
优:通过动态根 font-size 来做适配,基本无兼容性问题,适配较为精准,换算简便
劣:无 viewport 缩放,且针对 iPhone 的 Retina 屏没有做适配,导致对一些手机的适 配不是很到位
手淘方案
优:通过动态根 font-size、viewpor、dpr 来做适配,无兼容性问题,适配精准。
劣:需要根据设计稿进行基准值换算,在不使用 sublime text 编辑器插件开发时,单位计算复杂
最常用的为 display:none 和 visibility:hidden
dispaly:none 设置该属性后,该元素下的元素都会隐藏,占据的空间消失
visibility:hidden 设置该元素后,元素虽然不可见了,但是依然占据空间的位置
static:默认值 不脱离文档流,top,right,bottom,left 等属性不生效
绝对定位:absolute 绝对定位的关键是找对参照物,要成为绝对定位元素的参照物必须满足以下两个条件:
注意:设置了 position:absolute;属性后,元素会脱离正常文档流,不在占据空间;左右 margin为 auto 将会失效;我们通过 left、top、bottom、right 来决定元素位置
相对定位:relative 参照物:元素偏移前位置
注意:设置了相对定位,左右 margin 为 auto 仍然有效、并且不会脱离文档流。
固定定位:fixed 参照物:浏览器窗口;
注意:固定定位会脱离文档流; 当绝对定位和固定定位参照物都是浏览器窗口时的区别: 当出现滚动条时,固定定位的元 素不会跟随滚动条滚动,绝对定位会跟随滚动条滚动
浮动定位将元素排除在普通流之外,即元素讲脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留
1、父元素的高度无法被撑开,影响与父元素同级的元素;
2、与浮动元素同级的非浮动元素(内联元素)会跟随其后;
3、若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构解决方法
清除浮动的方式
1、使用 CSS 中的 clear:both;(放一个空的 div,并设置上述 css),属性来清除元素的浮动
可解决 2、3 问题
2、对于问题 1,添加如下样式,给父元素添加 clearfix 样 式:
- .clearfix:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
- }
-
- .cl earfix {
- display: inline-block;
- }
-
- /* for IE/Mac */
3、给父级元素设置双伪元素;
- .clearfix:after {
- content: "";
- /*设置内容为空*/
- height: 0;
- /*高度为 0*/
- line-height: 0;
- /*行高为 0*/
- display: block;
- /*将文本转为块级元素*/
- visibility: hidden;
- /*将元素隐藏*/
- clear: both;
- /*清除浮动*/
- }
-
- .clearfix {
- zoom: 1;
- /*为了兼容 IE*/
- }
- <div class="container clearfix">
- <div class="wrap">aaa</div>
- </div>

rem 是 CSS3 新增的一个相对单位,相对于根节点(html)字体大小的值,r 就是 root html{font-size:10px} 则 2rem=20px
通过它就可以做到只修改根元素的大小,就能成比例地调整所有的字体大小,只依赖 html 字体的大小
适配方案步骤:
1、首先动态计算 html 的 font-size
2、将所有的 px 换算成 rem(计算过程请看下面代码和注释)
注意:rem 的换算是根 据设计图稿的像素计算的,下面的计算只是动态计算 html 的 font-size 大小, 请看下面的注意事项
- <meta name="viewport" content="width=device-width,user-scalable=no" />
- <style>
- body {
- margin: 0;
- }
-
- div {
- /*width: 80px;*/
- height: 100px;
- width: 4rem;
- height: 4rem;
- /*1rem=20; nrem=80; n=80/rem; n=80/20; n=4*/
- background: green;
- float: left;
- }
- </style>
- <body>
- <div>1</div>
- <div>2</div>
- <div>3</div>
- <div>4</div>
- </body>
- <script>
- (function () {
- var html = document.documentElement;
- var width = html.getBoundingClientRect().width;//获取屏幕宽度(设备独立像素), 如 iPhone6 为 414
- html.style.fontSize = width / 16 + 'px'; //html font-size = 20px
- //iphone5 下 1rem=20 这里之所以除以 16,是因为要把宽度分成 16 份,这个数并 没有固定,一般选 15,16,以 ipone5 为准是 16,因为一除可以得到整数 20,好计算。
- })();
- </script>

1、必需动态的去设置 html 的大小,才能适配
2、根据页面的宽度除以一个系数,把算出的这个值赋给 html 的 font-size 属性,rem 换 算值是根据 psd 设计图的宽度/系数的 rem 系数 以 640px 设计稿和 750px 的视觉稿,
网易这样处理的:
- var width = document.documentElement.clientWidth; // 屏幕的布局视口宽度
- var rem = width / 7.5; // 750px 设计稿将布局视口分为 7.5 份
- var rem = width / 6.4; // 640px 设计稿将布局视口分为 6.4 份
设计稿上 75px 对应 0.75rem, 距离占设计稿的 10%;
在 ipone6 上:
width = document.documentElement.clientWidth = 375px;
1rem = 375px / 7.5 = 50px;
0.75rem = 37.5px;
(37.5/375=10%;占屏幕 10%)
在 ipone5 上:
width = document.documentElement.clientWidth = 320px;
rem = 320px / 7.5 = 42.667px;
0.75rem = 32px; (32/320=10%;占屏幕 10%)
对于上述的第二点,根据设计稿动态转换 rem,这里说一下,前面的计算是动态的设置 html
的 font-size 的大小,这是根据设备的独立像素计算的。而设计稿往往是根据物理像素,即设备素设计的,往往很大,是 750px 及以上,所以在转换 rem 的时候,转换是根据 psd 设计稿的像素进行转换,即 1rem = 设计稿像素宽度/系数,例如,如果是 1080px 的设计 稿,那么,就用 1rem = 1080/18 = 60px(这里用 18 做系数,是因为能整除),然后布局的时候就根据设计稿的元素尺寸转换,例如设计稿一个元素的高为 60px,那么就可以转 化为 1rem 了
特点:
Tips:上述步骤 2 中换算可以通过 Hbuilder 将 px 自动转 rem 以及通过 less 自动计算成 rem,sublime 也可以通过插件进行自动转换
打开 Hbuilder,顶部栏的工具》选项》Hbuilder》代码助手》px 自动转 rem 设置
3.less 自动转换:Hbuilder 也可以将 less 文件自动转成 css 文件。less 文件的书 写如下所示
比如想设置宽度为 187px,高度为 100px 的元素,可以通过下面方式计算适配@rem:25rem; /*这是 1rem = X px 的 X 的值,但是用了 rem 做单位而已*/div{width: 187/@rem;height: 100/@rem;}
1、默认所有子元素都会在一行中显示,即使给子元素一个很大的宽度
2、父级加了这条属性,子级的 float、vertical-align 就会失效
3、如果兼容低版本的机型要加前缀-webkit-,包括后面讲的所有属性,容器属性(父元素样式) 这里说一下一些重点知识
项目属性(子元素样式)
flex-grow 当父级的宽度大于所有子元素宽度之和时,根据父级的剩余空间,设置子元素 的扩展比例(设置后,元素给的固定宽度会被覆盖)它是一个系数默认为 0,即如果存在剩 余空间也不扩展
剩余空间:剩余空间=父级的宽度-所有子元素的宽度和
注意:如果没有设置初始宽度,也没有内容,则默认为 0,否则为内容的宽度。例如设置了 文字,会撑开有初始宽度
元素的 flex-grow 属性值+子元素初始宽度
3、flex-shrink:收缩比例
flex-shrink 当所有子元素宽度之和大于父级宽度的时候,根据超出的空间,设置子元素的 收缩比例设置后,元素给的固定宽度会被覆盖)它是一个系数默认为 1,如果给个 0 的话, 就不会收缩 超出空间:超出空间=所有子元素的宽度和-父级的宽度
子元素宽度计算公式
- 1、算出超出空间,所有子元素的宽度和-父级的宽度
- 2、子元素的初始宽度*子元素的 flex-shrink 值
- 3、算出第二步所有结果的和
- 4、每个子元素的第二步/第三步*第一步
- 5、子元素的初始宽度-第四步
flex-basis:元素的大小
flex:以上三个属性的简写
align-self:单独的垂直对齐方式(交叉轴方向上)
第一种情况 margin值合并:两个同级元素,垂直排列,上面的盒子给 margin-bottom 下面的盒子给 margin-top,那么他们两个的间距会重叠,以大的那个计算。
解决这种情况的方法为:两个外边距不同时出现
第二种情况 margin值穿透:两个父子元素,内部的盒子给 margin-top,其父级也会受到影响,同时产生上边距,父子元素会进行粘连,解绝这种情况的方法为:父级添加一个 css 属性,
overflow:hidden,禁止超出
外边距重叠就是 margin-collapse
解决方案:
father::before { content:''; display:table; }
区别
在 CSS 中伪类一直用 : 表示,如 :hover, :active 等 伪元素在 CSS1 中已存在,当时语法是用 : 表示,如 :before 和 :after
后来在 CSS3 中修订,伪元素用 :: 表示,如 ::before 和 ::after,以此区分伪元素和伪类由于低版本 IE 对双冒号不兼容,开发者为了兼容性各浏览器,继续使使用 :after 这种老语 法表示伪元素
作用:
CSS3 新增伪类
原理
使用 Bootstrap 响应式布局
先需要在 head 中引入 meta 标签,添加 viewpirt 属性,content 中宽度等于设备宽度, tial-scale:页面首次被显示可见区域的缩放级别,取值 1 则页面按实际尺寸显示,无任何 放;maximum-scale:允许用户缩放到的最小比例;user-scalable:用户是否可以手动缩放。代码如下:
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
- <link rel="stylesheet" type="text/css" href="/stylesheets/bootstrap.min.css">
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
- <body>
- <div class=" container-fluid login">
- <div class="row">
- <div class="col-xs-12 col-sm-12 col-md-8 col-lg-5 col-lg-offset-3">
- <form class="form-horizontal loginForm">
- <h3 class="form-signin-heading">用户登录</h3>
- <div class="form-group"> <label for="email" class="col-sm-2 col-xs-3 control-label">邮箱</label>
- <div class="col-sm-8 col-xs-8"> <input type="text" class="form-control" name="email"
- placeholder="请输 入邮箱"> <span class="glyphicon glyphicon-ok form-control-feedback"
- aria-hidden="true"></span> </div>
- </div>
- <div class="form-group"> <label for="password" class="col-sm-2 col-xs-3 control-label"> 密 码 </label>
- <div class="col-sm-8 col-xs-8"> <input type="password" class="form-control" name="password"
- placeholder="请输入密码"> <span class="glyphicon glyphicon-ok form-control-feedback"
- aria-hidden="true"></span> </div>
- </div>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-4 col-xs-4 ">
- <div class="checkbox"> <label> <input type="checkbox">记住我 </label> </div>
- </div>
- <div class="col-sm-4 col-xs-4 control-label"> <a href="resetPwd.html" id="forget">忘记密码?</a>
- </div>
- </div>
- <div class="form-group">
- <div class="col-sm-12 col-lg-12"> <button type="button" class="btn btn-primary btn-block"
- id="submit">登录</button> </div>
- </div>
- </form>
- </div>
- </div>
- </body>

定义
1、内部的 Box 会在垂直方向,一个接一个地放置
2、Box 垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠
3、每个元素的 margin box 的左边, 与包含块 border box 的左边相接触(对于从左往 右的格式化,否则相反)。即使存在浮动也是如此
4、BFC 的区域不会与 float box 重叠
5、BFC 就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素反之也如此
6、计算 BFC 的高度时,浮动元素也参与计算
哪些元素会生成 BFC:
iframe 的优点:
iframe 的缺点:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。