举个例子:css
<div class="box a">Box A</div> <div class="box b">Box B</div> <style> .box { width: 100px; height: 100px; padding: 10px; border: 10px solid #f66; background: #f99; margin: 1em; } .b { box-sizing: border-box; } </style>
演示结果:html
box-sizing mdn文档css3
<p>Some text</p> <style> p { height: 100%; background: red; } </style>
解析:默认状况下body是没有高度只有宽度。因此p
标签的父级是body默认高度为0,因此p
的高度也是0。
解决办法:能够设置height: 100vh
,使用一些屏幕的单位如vh
vw
,一个屏幕的高度是100vh
。canvas
<div> </div> <style> div { background: red; padding-top: 100%; } </style>
以上代码padding-top等于父容器body的宽度,实现了一个响应式的正方形 浏览器
解析:padding
不论是padding-top
仍是padding-left
,它的百分比都是根据父容器的'宽度'来决定的。ide
使用场景:能够利用padding的百分比来作出一些固定宽高比的盒子。svg
<div class="a"></div> <div class="b"></div> <style> .a{ background: lightblue; height: 100px; margin-bottom: 100px; } .b { background: coral; height: 100px; margin-top: 100px; } </style>
<div class="box"></div> <style> .box { border-width: 50px; border-style: solid; border-color: #f35 #269 #649 #fa0; width: 0px; height: 0px; margin: 1em auto; } </style>
经过给border的其余的三条边设置透明色,就能够制做任意角度的三角形。布局
思考题:这个图标怎么作?字体
方法1:使用border构造相间的三角形,而后使用overflow-hidden
和border-radius
剪裁成圆。另外注意水平、垂直居中的实现方式。flex
<div id="warning"> <div class="bg"></div> <div class="bg"></div> <div class="bg"></div> </div> <style> #warning { position: relative; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 200px; height: 200px; overflow: hidden; border-radius: 50%; } #warning .bg { position: absolute; width: 0; height: 0; top: -73.2px; left: 0px; border-top: solid 173.2px rgb(246, 226, 54); border-left: solid 100px transparent; border-bottom: solid 173.2px black; border-right: solid 100px transparent; } #warning .bg:nth-child(1) { transform: rotate(0deg); } #warning .bg:nth-child(2) { transform: rotate(120deg); } #warning .bg:nth-child(3) { transform: rotate(240deg); } </style>
方法2:利用svg的虚线来作,这个方法比较灵巧,不容易理解,请屡次调试stroke和stroke-dasharray的值加深理解。
<svg viewBox="0 0 64 64" class="warning"> <circle r="25%" cx="50%" cy="50%"/> </svg> <style> .warning { width: 300px; background: black; border-radius: 50%; } .warning circle { fill: none; stroke: yellow; stroke-width: 32; stroke-dasharray: 26%; } </style>
方法3:利用css3新特性:锥形渐变。
<div></div> <style> div { padding-top: 100%; background: repeating-conic-gradient(black 0 60deg, yellow 0 120deg); border-radius: 50%; } </style>
方法4:也可使用canvas和js等等。
块级元素
p
div
section
display
设置为block
、list-item
、table
将元素变为块级行级元素
inline
、inline-block
、inline-table
使元素变为行级盒子的生成
块级盒子中的子盒子的生成
<p>Some <em>Text</em></p>
,some在块级盒子里,而且没有被行级元素包裹,因此会生成匿名的行级盒子。<div><h1>标题</h1><span>2018-5-12</span></div>
行级盒子内的子盒子的生成
<span> aaaaa <div> bbb </div> ccc </span>
行级盒子span
被div
分割成两个行级盒子aaa,bbb,这两个行级盒子又被匿名块级盒子包含,因此呈三个块级元素布局。
display属性
经过css生成盒子
::before
在元素内部的前面添加一个行盒::after
在元素内部的后面添加一个行盒display:list-item
这个就是列表前方的小圆点,就是给li前面添加一个行盒,生成小圆点。<p><span>Learn to Code HTML & CSS is a simple and comprehensive guide dedicated to helping beginners learn HTML and CSS. Outlining the fundamentals, this guide works through all common elements of front-end design and development.</span></p> <style> p { line-height: 2; padding: 1em; border: 2px solid #00f; background: #ccf; } span { background: #fcc; border: 2px solid #f00; } </style>
块级盒子能够包含多个行级盒子,行级盒子能够分布多行。
margin
,border
和 padding
都有效text-align
属性决定inline-block
),该元素会被做为一个总体决定分布在哪个行盒总结一下:浮动元素后面的块级元素不会‘发现’浮动元素,而行级盒子会避开前面的浮动元素。
举个栗子🌰:
<section> <img src="http://p0.qhimg.com/t0117c2689d8703d551.jpg" width="120" alt="house"> <p><span>莫哈韦沙漠不只纬度较高,并且温度要稍微低些,是命名该公园的 短叶丝兰——约书亚树的特殊栖息地。约书亚树以从茂密的森林到远远 间隔的实例等各类形式出现。除了约书亚树森林以外,该公园的西部包 括加州沙漠里发现的最有趣的地质外观。</span></p> </section> <style> img { float: left; } p { font-size: 14px; line-height: 1.8; border: 1px solid; } </style>
代码演示
解释一下:
上述代码中,<p>
没有由于<img>
的而影响定位,<p>
并无‘发现’<img>
图片,而<span>
里的文字‘避开’了<img>
利用float能够作图文混排效果
/* 凡是遇到清除浮动,就这么写 */ .clearfix::after { content: ' '; display: block; clear: both; height:0; overflow: hidden; }
下面这些属性会触发bfc,bfc里面的浮动不会溢出影响外部的盒子的排版,这样与清除浮动的效果是同样的。
overflow: hidden/auto
display: inline-block
float: left/right
overflow:hidden
等方法建立inline-block
overflow
属性非 visible
的块框bfc就是为了把本身里面的东西‘封闭’起来,不与外界作过多的‘干扰’。
margin
折叠position
z-index 堆叠层次
来看下面一坨代码,重点看有z-index
的元素
<nav> <ul> <li>z-index: 2</li> </ul> </nav> <div id="dialog"> z-index: 1 </div> <style> nav { position: fixed; top: 0; } nav ul { position: absolute; z-index: 2; top: 0; left: 0; background: red; padding: 1em; width: 10em; } #dialog { position: absolute; z-index: 1; top: 5em; left: 5em; background: blue; height: 10em; width: 10em; } body { color: #fff; } li { margin: 1em 0; list-style:none; } #dialog { padding: 1em; } ul { padding: 1em; } </style>
<nav>
与div#dialog
比较,<nav>
中的z-index
是默认值auto
, div#dialog
中的z-index
是1
,因此蓝色框在上面。nav
里面的元素的z-index
再大也不能排在上面,由于他的父级‘不行’😁😀。position
设置为absolute
呢?你能够试试改一下上面的代码,得出结果是否是大吃一惊呢?为何红色就上去了呢?position
为 fixed
或 sticky
的元素不用z-index
就会建立堆叠上下文,这样<div>
和<nav>
进行z-index
比较。positiong:absolute
的元素须要同时设定z-index
才会建立堆叠上下文,nav
中没有设置z-index
,因此不会建立堆叠上下文,而<nav>
里面的<ul>
既包含了定位与z-index
属性,因此div
就会和<nav>
里面的<ul>
做比较,这样红色框会在蓝色框上面。有以上特色的都会建立堆叠上下文
在每个堆叠上下文中,从下到上:
若是想改变对齐方式怎么办呢?
baseline
| sub
| super
| top
| text-top
| middle
| bottom
| text-bottom
| <percentage>
| <length>
由上图举例说明:
vertical-align
为middle
,middle这根线的位置是x-height的一半(x-height在font-metrics图片中有定义)。vertical-align
设置为text-top
,那么它的上边缘与text-top这条线对齐。<p> <img src="https://p5.ssl.qhimg.com/t013753a42172e3170a.jpg" alt="car" width="400" /> </p> <style> p { padding: 0; background: red; } </style>
代码演示:
能够看出img图片是基于p标签中的文字基线来排版的,那么如何让图片下面这段红线去掉呢?
img
设置成block
,这样块级与块级就不会涉及(行内排版)这种状况。p
设置vertical-align
设置middle
属性,这样img
的中线与p
的中线对齐,就不会出现这种问题text-align
left
| right
| center
| justify
(两端对齐)text-align: justify
生效了么?<nav> <a href="#">Home</a> <a href="#">Products</a> <a href="#">Contact</a> <a href="#">Help</a> </nav> <style> nav { text-align: justify; background: #dcc } nav a { display: inline-block; line-height: 3; } </style>
答案是并无,这是由于什么呢?由于nav中的文字仅仅只有一行,它是第一行也是最后一行,text-align:justify
不会对最后一行起做用。
css为何要这样设置呢?
咱们能够想一下,若是咱们有多行文字,最后结尾的文字大多数都是少于一行的,若是css对于最后一行文字也进行两端对齐的话,岂不是很丑。。。
像这样:
因此css不给最后一行文字进行两段对齐。
可使用text-align-last:justify
, 能够给最后一行文字设置两端对齐。
若是对你有所帮助,请点个赞呀~~
若是想对css想深刻了解能够看看张鑫旭老师的博客,关注奇舞周刊~