前端知识-CSS3
文章目录
- CSS3 边框
- CSS3 圆角
- CSS3 圆角属性
- CSS3 盒阴影
- CSS3 边界图片
- CSS3 背景
- CSS3 background-image属性
- CSS3 background-size 属性
- CSS3 的 background-origin 属性
- CSS3 background-clip属性
- CSS3 渐变(Gradients)
- CSS3 文本效果
- text-shadow
- box-shadow
- text-overflow
- CSS3的换行
- word-wrap
- word-break
- CSS3 2D 转换
- CSS3 3D 转换
- CSS3 过渡
- CSS3 动画
- CSS3 多列
- CSS3 用户界面
- CSS3 调整尺寸(Resizing)
- CSS 图片
- 响应式图片
- CSS3 弹性盒子(Flex Box)
- flex-direction
- justify-content 属性
- flex-start:
- flex-end:
- center:
- space-between:
- space-around:
- align-items 属性
- flex-wrap 属性
- align-content 属性
- align-self
- CSS 网格布局
- display 属性
- 网格轨道
CSS3 边框
CSS3 圆角
CSS3 border-radius - 指定每个圆角
如果你在 border-radius 属性中只指定一个值,那么将生成 4 个 圆角。
要在四个角上一一指定,可以使用以下规则:
- 四个值: 第一个值为左上角,第二个值为右上角,第三个值为右下角,第四个值为左下角。
- 三个值: 第一个值为左上角, 第二个值为右上角和左下角,第三个值为右下角
- 两个值: 第一个值为左上角与右下角,第二个值为右上角与左下角
- 一个值: 四个圆角值相同
在 CSS3 中 border-radius 属性被用于创建圆角:
实例
在div中添加圆角元素:
div
{
border:2px solid;
border-radius:25px;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>圆角练习</title>
<style>
#rcorners4{
/* 左上角,右上角,右下角,左下角 */
border-radius: 15px 50px 30px 5px;
background: #8AC007;
padding: 20px;
width: 200px;
height: 150px;
}
#rcorners5 {
border-radius: 15px 50px 30px;
background: #8AC007;
padding: 20px;
width: 200px;
height: 150px;
}
#rcorners6 {
border-radius: 15px 50px;
background: #8AC007;
padding: 20px;
width: 200px;
height: 150px;
}
#rcorners7 {
border-radius: 50%;
background: #8AC007;
padding: 20px;
width: 200px;
height: 150px;
}
#rcorners8 {
border-radius: 15px/50px;
background: #8AC007;
padding: 20px;
width: 200px;
height: 150px;
}
</style>
</head>
<body>
<p>四个值 - border-radius:15px 50px 30px 5px:</p>
<p id="rcorners4"></p>
<p>三个值 - border-radius: 15px 50px 30px:</p>
<p id="rcorners5"></p>
<p>两个值 - border-radius: 15px 50px</p>
<p id="rcorners6"></p>
<p>椭圆边框 - border-radius: 50%</p>
<p id="rcorners7"></p>
<p>椭圆边框 - border-radius: 15px/50px</p>
<p id="rcorners8"></p>
</body>
</html>
CSS3 圆角属性
属性 | 描述 |
---|---|
border-radius | 所有四个边角 border---radius 属性的缩写 |
border-top-left-radius | 定义了左上角的弧度 |
border-top-right-radius | 定义了右上角的弧度 |
border-bottom-right-radius | 定义了右下角的弧度 |
border-bottom-left-radius | 定义了左下角的弧度 |
CSS3 盒阴影
CSS3 中的 box-shadow 属性被用来添加阴影:
实例
在div中添加box-shadow属性
div
{
box-shadow: 10px 10px 5px #888888;
}
CSS3 边界图片
border-image 属性允许你指定一个图片作为边框! 用于创建上文边框的原始图像
实例
在 div 中使用图片创建边框
div
{
border-image:url(border.png) 30 30 round;
-webkit-border-image:url(border.png) 30 30 round; /* Safari 5 and older */
-o-border-image:url(border.png) 30 30 round; /* Opera */
}
CSS3 背景
CSS3 background-image属性
#example1 {
background-image: url(img_flwr.gif), url(paper.gif);
background-position: right bottom, left top;
background-repeat: no-repeat, repeat;
}
#example1 {
background: url(img_flwr.gif) right bottom no-repeat, url(paper.gif) left top repeat;
}
CSS3 background-size 属性
div
{
background:url(img_flwr.gif);
background-size:80px 60px;
background-repeat:no-repeat;
}
div
{
background:url(img_flwr.gif);
background-size:100% 100%;
background-repeat:no-repeat;
}
CSS3 的 background-origin 属性
background-origin 属性指定了背景图像的位置区域。
content-box, padding-box,和 border-box区域内可以放置背景图像。
div
{
background:url(img_flwr.gif);
background-repeat:no-repeat;
background-size:100% 100%;
background-origin:content-box;
}
body
{
background-image:url(img_flwr.gif),url(img_tree.gif);
}
CSS3 background-clip属性
CSS3中background-clip背景剪裁属性是从指定位置开始绘制。
#example1 {
border: 10px dotted black;
padding: 35px;
background: yellow;
background-clip: content-box;
}
CSS3 渐变(Gradients)
CSS3 定义了两种类型的渐变(gradients):
- 线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向
- 径向渐变(Radial Gradients)- 由它们的中心定义
语法:
background-image: linear-gradient(direction, color-stop1, color-stop2, ...);
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>渐变</title>
<style>
#grad1 {
height: 200px;
background-color: red;
background-image: linear-gradient(#e66465,#9198e5);
}
#grad2 {
height: 200px;
background-color: red;
background-image: linear-gradient(to right,red,yellow);
}
#grad3 {
height: 200px;
background-color: red;
background-image: linear-gradient(to bottom right,red,yellow);
}
#grad4 {
height: 200px;
background-color: red;
background-image: linear-gradient(0deg,red,yellow);
}
#grad5 {
height: 200px;
background-color: red;
background-image: linear-gradient(90deg,red,yellow);
}
#grad6 {
height: 200px;
background-color: red;
background-image: linear-gradient(180deg,red,yellow);
}
#grad7 {
height: 200px;
background-color: red;
background-image: linear-gradient(-90deg,red,yellow);
}
#grad8 {
height: 200px;
background-color: red;
background-image: linear-gradient(red,green,blue);
}
#grad9 {
height: 200px;
background-color: red;
background-image: linear-gradient(red,orange,yellow,green,blue,indigo,violet);
}
#grad10 {
height: 200px;
background-color: red;
background-image: linear-gradient(red 10%,green 85%, blue 90%);
}
#grad11 {
height: 200px;
background-image: linear-gradient(to right,rgba(255,0,0,0),rgba(255,0,0,1));
}
#grad12 {
height: 200px;
background-color: red;
background-image: repeating-linear-gradient(red,yellow 10%, green 20%);
}
#grad13 {
height: 200px;
background-color: red;
background-image: repeating-linear-gradient(90deg,red,yellow 7%,green 10%);
}
#grad14 {
height: 150px;
width: 200px;
background-color: red;
background-image: radial-gradient(red,green,blue);
}
#grad15 {
height: 150px;
width: 200px;
background-color: red;
background-image: radial-gradient(red 5%, yellow 15%, green 60%);
}
#grad16 {
height: 150px;
width: 200px;
background-color: red;
background-image: radial-gradient(circle,red,yellow,green);
}
#grad17 {
height: 150px;
width: 150px;
background-color: red;
background-image: radial-gradient(closest-side at 60% 55%,red,yellow,black);
}
#grad18 {
height: 150px;
width: 150px;
background-color: red;
background-image: radial-gradient(farthest-side at 60% 55%,red,yellow,black);
}
#grad19 {
height: 150px;
width: 150px;
background-color: red;
background-image: radial-gradient(closest-corner at 60% 55%,red,yellow,black);
}
#grad20 {
height: 150px;
width: 150px;
background-color: red;
background-image: radial-gradient(farthest-corner at 60% 55%,red,yellow,black);
}
#grad21 {
height: 150px;
/* background-color: red; */
background-image: repeating-radial-gradient(red,yellow 10%,green 15%);
}
</style>
</head>
<body>
<h3>线性渐变 - 从上到下</h3>
<p>从顶部开始的线性渐变。起点是红色,慢慢过渡到蓝色:</p>
<div id="grad1"></div>
<h3>线性渐变 - 从左到右</h3>
<p>从顶部开始的线性渐变。起点是红色,慢慢过渡到黄色:</p>
<div id="grad2"></div>
<h3>线性渐变 - 左上角到右下角</h3>
<p>从左上角开始的线性渐变。起点是红色,慢慢过渡到黄色:</p>
<div id="grad3"></div>
<h3>线性渐变 - 使用不同的角度</h3>
<div id="grad4" style="text-align: center;">0deg</div>
<hr/>
<div id="grad5" style="text-align: center;">90deg</div>
<hr/>
<div id="grad6" style="text-align: center;">180deg</div>
<hr/>
<div id="grad7" style="text-align: center;">-90deg</div>
<br/><br/>
<h3>多个颜色</h3>
<p id="grad8"></p>
<hr/>
<p id="grad9"></p>
<hr/>
<p id="grad10"></p>
<h3>线性渐变 - 透明度</h3>
<p>为了添加透明度,我们使用raba()函数来定义颜色结点。rgba()函数中的最后一个参数可以是从0到1的值,它定义了颜色的透明度:0 表示完全透明,1表示完全不透明</p>
<p id="grad11"></p>
<h3>重复的线性渐变</h3>
<div id="grad12"></div>
<p>90deg:</p>
<div id="grad13"></div>
<h3>径向渐变 - 颜色结点均匀分布</h3>
<div id="grad14"></div>
<p>颜色不均匀分布</p>
<div id="grad15"></div>
<p>设置形状</p>
<div id="grad16"></div>
<p>不同尺寸大小关键字的使用</p>
<p><strong>closest-side:</strong></p>
<div id="grad17"></div>
<p><strong>farthest-side:</strong></p>
<div id="grad18"></div>
<p><strong>closest-corner:</strong></p>
<div id="grad19"></div>
<p><strong>farthest-corner(默认):</strong></p>
<div id="grad20"></div>
<p><strong>重复的径向渐变</strong></p>
<div id="grad21"></div>
</body>
</html>
CSS3 文本效果
text-shadow
CSS3 中,text-shadow属性适用于文本阴影。
h1
{
text-shadow: 5px 5px 5px #FF0000;
}
box-shadow
CSS3 中 CSS3 box-shadow 属性适用于盒子阴影
实例
div {
box-shadow: 10px 10px 5px #888888;
}
text-overflow
CSS3 Text Overflow属性
CSS3文本溢出属性指定应向用户如何显示溢出内容
实例
p.test1 {
white-space: nowrap;
width: 200px;
border: 1px solid #000000;
overflow: hidden;
text-overflow: clip;
}
p.test2 {
white-space: nowrap;
width: 200px;
border: 1px solid #000000;
overflow: hidden;
text-overflow: ellipsis;
}
CSS3的换行
word-wrap
如果某个单词太长,不适合在一个区域内,它扩展到外面:
CSS3中,自动换行属性允许您强制文本换行 - 即使这意味着分裂它中间的一个字:
CSS代码如下:
实例
允许长文本换行:
p {word-wrap:break-word;}
word-break
CSS3 单词拆分换行
CSS3 单词拆分换行属性指定换行规则:
CSS代码如下:
实例
p.test1 {
word-break: keep-all;
}
p.test2 {
word-break: break-all;
}
CSS3 2D 转换
CSS3 转换可以对元素进行移动、缩放、转动、拉长或拉伸。
2D 转换方法
函数 | 描述 |
---|---|
matrix(n,n,n,n,n,n) | 定义 2D 转换,使用六个值的矩阵。 |
translate(x,y) | 定义 2D 转换,沿着 X 和 Y 轴移动元素。 |
translateX(n) | 定义 2D 转换,沿着 X 轴移动元素。 |
translateY(n) | 定义 2D 转换,沿着 Y 轴移动元素。 |
scale(x,y) | 定义 2D 缩放转换,改变元素的宽度和高度。 |
scaleX(n) | 定义 2D 缩放转换,改变元素的宽度。 |
scaleY(n) | 定义 2D 缩放转换,改变元素的高度。 |
rotate(angle) | 定义 2D 旋转,在参数中规定角度。 |
skew(x-angle,y-angle) | 定义 2D 倾斜转换,沿着 X 和 Y 轴。 |
skewX(angle) | 定义 2D 倾斜转换,沿着 X 轴。 |
skewY(angle) | 定义 2D 倾斜转换,沿着 Y 轴。 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"></meta>
<title>2D转换</title>
<style>
div {
width: 100px;
height: 75px;
background-color: red;
border: 1px solid black;
}
.notFirst {
margin-top: 200px;
}
div#div2 {
transform: translate(50px,100px);
-ms-transform: translate(50px,100px); /*IE9 */
-webkit-transform: translate(50px,100px); /*Safari and Chrome*/
}
div#div3 {
transform: rotate(30deg);
-ms-transform: rotate(30deg);
-webkit-transform: rotate(30deg);
}
div#div4 {
background-color: yellow;
transform: scale(2,3);
-ms-transform: scale(2,3);
-webkit-transform: scale(2,3);
}
div#div5 {
transform: skew(30deg,20deg);
-ms-transform: skew(30deg,20deg);
-webkit-transform: skew(30deg,20deg);
}
div#div6 {
transform: matrix(0.866,0.5,-0.5,0.866,0,0);
-ms-transform: matrix(0.866,0.5,-0.5,0.866,0,0);
-webkit-transform: matrix(0.866,0.5,-0.5,0.866,0,0);
}
</style>
</head>
<body>
<p>translate()方法:根据左(X轴)和顶部(Y轴)位置给定的参数,从当前元素位置移动。</p>
<div>Hello.This is a DIV element.</div>
<div id="div2">Hello.This is a DIV element</div>
<p class="notFirst">rotate()方法,在一个给定度数顺时针旋转的元素。负值是允许的,这样是元素逆时针旋转。</p>
<div>你好。这是一个DIV元素。</div>
<div id="div3">你好。这是一个DIV元素。</div>
<p class="notFirst">scale()方法,该元素增加或减少的大小,取决于宽度(X轴)和高度(Y轴)的参数</p>
<div>
原始div
</div>
<div id="div4">
div元素的宽度是原始大小的两倍,高度是原始大小的三倍
</div>
<p class="notFirst">skew()方法,该元素倾斜,取决于X轴和Y轴的角度。</p>
<div>Hello.This is a DIV element.</div>
<div id="div5">Hello.This is a DIV element</div>
<p class="notFirst">matrix() 方法有六个参数,包含旋转,缩放,移动(平移)和倾斜功能。</p>
<div>Hello.This is a DIV element.</div>
<div id="div6">Hello.This is a DIV element.</div>
</body>
</html>
CSS3 3D 转换
CSS3 允许您使用 3D 转换来对元素进行格式化。
3D 转换方法
函数 | 描述 |
---|---|
matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) | 定义 3D 转换,使用 16 个值的 4x4 矩阵。 |
translate3d(x,y,z) | 定义 3D 转化。 |
translateX(x) | 定义 3D 转化,仅使用用于 X 轴的值。 |
translateY(y) | 定义 3D 转化,仅使用用于 Y 轴的值。 |
translateZ(z) | 定义 3D 转化,仅使用用于 Z 轴的值。 |
scale3d(x,y,z) | 定义 3D 缩放转换。 |
scaleX(x) | 定义 3D 缩放转换,通过给定一个 X 轴的值。 |
scaleY(y) | 定义 3D 缩放转换,通过给定一个 Y 轴的值。 |
scaleZ(z) | 定义 3D 缩放转换,通过给定一个 Z 轴的值。 |
rotate3d(x,y,z,angle) | 定义 3D 旋转。 |
rotateX(angle) | 定义沿 X 轴的 3D 旋转。 |
rotateY(angle) | 定义沿 Y 轴的 3D 旋转。 |
rotateZ(angle) | 定义沿 Z 轴的 3D 旋转。 |
perspective(n) | 定义 3D 转换元素的透视视图。 |
CSS3 过渡
过渡属性
下表列出了所有的过渡属性:
属性 | 描述 | CSS |
---|---|---|
transition | 简写属性,用于在一个属性中设置四个过渡属性。 | 3 |
transition-property | 规定应用过渡的 CSS 属性的名称。 | 3 |
transition-duration | 定义过渡效果花费的时间。默认是 0。 | 3 |
transition-timing-function | 规定过渡效果的时间曲线。默认是 “ease”。 | 3 |
transition-delay | 规定过渡效果何时开始。默认是 0。 | 3 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS3 过渡</title>
<style>
div {
width: 100px;
height: 100px;
background: red;
transition: width 2s,height 2s,transform 2s;
-webkit-transition: width 2s,height 2s,-webkit-transform 2s;
}
div:hover {
width: 200px;
height: 200px;
transform: rotate(180deg);
-webkit-transform: rotate(180deg);
}
</style>
</head>
<body>
<div>鼠标移动到div元素上,查看过渡效果。</div>
</body>
</html>
CSS3 动画
CSS3的动画属性
下面的表格列出了 @keyframes 规则和所有动画属性:
属性 | 描述 | CSS |
---|---|---|
@keyframes | 规定动画。 | 3 |
animation | 所有动画属性的简写属性。 | 3 |
animation-name | 规定 @keyframes 动画的名称。 | 3 |
animation-duration | 规定动画完成一个周期所花费的秒或毫秒。默认是 0。 | 3 |
animation-timing-function | 规定动画的速度曲线。默认是 “ease”。 | 3 |
animation-fill-mode | 规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。 | 3 |
animation-delay | 规定动画何时开始。默认是 0。 | 3 |
animation-iteration-count | 规定动画被播放的次数。默认是 1。 | 3 |
animation-direction | 规定动画是否在下一周期逆向地播放。默认是 “normal”。 | 3 |
animation-play-state | 规定动画是否正在运行或暂停。默认是 “running”。 | 3 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS3 动画</title>
<style>
div {
width: 100px;
height: 100px;
background: red;
position: relative;
animation:myfirst 5s linear 2s infinite alternate;
/* Firefox: */
-moz-animation: myfirst 5s linear 2s infinite alternate;
/* Safari and Chrome: */
-webkit-animation: myfirst 5s linear 2s infinite alternate;
/* Opera: */
-o-animation: myfirst 5s linear 2s infinite alternate;
}
@keyframes myfirst {
0% {background: red; left: 0px; top: 0px;}
25% {background: yellow; left: 200px; top: 0px;}
50% {background: blue; left: 200px; top: 200px;}
75% {background: green; left: 0px; top: 200px;}
100% {background: red; left: 0px; top:0px;}
}
@-moz-keyframes myfirst {
0% {background: red; left: 0px; top: 0px;}
25% {background: yellow; left: 200px; top: 0px;}
50% {background: blue; left: 200px; top: 200px;}
75% {background: green; left: 0px; top: 200px;}
100% {background: red; left: 0px; top:0px;}
}
@-webkit-keyframes myfirst {
0% {background: red; left: 0px; top: 0px;}
25% {background: yellow; left: 200px; top: 0px;}
50% {background: blue; left: 200px; top: 200px;}
75% {background: green; left: 0px; top: 200px;}
100% {background: red; left: 0px; top:0px;}
}
@-o-keyframes myfirst {
0% {background: red; left: 0px; top: 0px;}
25% {background: yellow; left: 200px; top: 0px;}
50% {background: blue; left: 200px; top: 200px;}
75% {background: green; left: 0px; top: 200px;}
100% {background: red; left: 0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
CSS3 多列
CSS3 多列属性
下表列出了所有 CSS3 的多列属性:
属性 | 描述 |
---|---|
column-count | 指定元素应该被分割的列数。 |
column-fill | 指定如何填充列 |
column-gap | 指定列与列之间的间隙 |
column-rule | 所有 column-rule-* 属性的简写 |
column-rule-color | 指定两列间边框的颜色 |
column-rule-style | 指定两列间边框的样式 |
column-rule-width | 指定两列间边框的厚度 |
column-span | 指定元素要跨越多少列 |
column-width | 指定列的宽度 |
columns | column-width 与 column-count 的简写属性。 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS3 多列</title>
<style>
.newspaper {
column-count: 3;
-moz-column-count: 3;
/* Firefox */
-webkit-column-count: 3;
/* Chrome, Safari, Opera */
/* 间隙 */
column-gap: 40px;
-webkit-column-gap: 40px;
-moz-column-gap: 40px;
/* 列边框 */
column-rule-style: solid;
-webkit-column-rule-style: solid;
-moz-column-rule-style: solid;
/* 列边框宽度 */
-webkit-column-rule-width: 1px;
/* Chrome, Safari, Opera */
-moz-column-rule-width: 1px;
/* Firefox */
column-rule-width: 1px;
/* 颜色 */
-webkit-column-rule-color: lightblue;
/* Chrome, Safari, Opera */
-moz-column-rule-color: lightblue;
/* Firefox */
column-rule-color: lightblue;
/* 简写*/
/* -webkit-column-rule: 1px solid lightblue;
-moz-column-rule: 1px solid lightblue;
column-rule: 1px solid lightblue; */
}
h1 {
border: 1px solid red;
column-span: all;
-webkit-column-span: all;
}
</style>
</head>
<body>
<h1>CSS3 多列</h1>
<div class="newspaper">
“当我年轻的时候,我梦想改变这个世界;当我成熟以后,我发现我不能够改变这个世界,我将目光缩短了些,决定只改变我的国家;当我进入暮年以后,我发现我不能够改变我们的国家,我的最后愿望仅仅是改变一下我的家庭,但是,这也不可能。当我现在躺在床上,行将就木时,我突然意识到:如果一开始我仅仅去改变我自己,然后,我可能改变我的家庭;在家人的帮助和鼓励下,我可能为国家做一些事情;然后,谁知道呢?我甚至可能改变这个世界。”
</div>
</body>
</html>
CSS3 用户界面
CSS3 调整尺寸(Resizing)
CSS3中,resize属性指定一个元素是否应该由用户去调整大小。
这个 div 元素由用户调整大小。 (在 Firefox 4+, Chrome, 和 Safari中)
CSS代码如下:
实例
由用户指定一个div元素尺寸大小:
div {
resize:both;
overflow:auto;
}
CSS3 方框大小调整(Box Sizing)
box-sizing 属性允许您以确切的方式定义适应某个区域的具体内容。
实例
规定两个并排的带边框方框:
div
{
box-sizing:border-box;
-moz-box-sizing:border-box; /* Firefox */
width:50%;
float:left;
}
CSS3 外形修饰(outline-offset )
outline-offset 属性对轮廓进行偏移,并在超出边框边缘的位置绘制轮廓。
轮廓与边框有两点不同:
轮廓不占用空间
轮廓可能是非矩形
这个 div 在边框之外 15 像素处有一个轮廓。
CSS 代码如下:
实例
规定边框边缘之外 15 像素处的轮廓:
div
{
border:2px solid black;
outline:2px solid red;
outline-offset:15px;
}
CSS 图片
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS3 图片</title>
<style>
a {
display: inline-block;
border: 1px solid #ddd;
border-radius: 4px;
padding: 5px;
transition: 0.3s;
}
a:hover {
box-shadow: 0 0 2px 1px rgba(0, 140, 186, 0.5);
}
</style>
</head>
<body>
<a target="_blank" href="images/index_button.png">
<img src="images/index_button.png" alt="Paris" style="width:304px;height:228px;"></img>
</a>
</body>
</html>
响应式图片
响应式图片会自动适配各种尺寸的屏幕。
实例中,你可以通过重置浏览器大小查看效果:
如果你需要自由缩放图片,且图片放大的尺寸不大于其原始的最大值,则可使用以下代码:
实例
img {
max-width: 100%;
height: auto;
}
响应式相册:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS 响应式相册</title>
<meta name="viewport" content="width=device-width, initial-scale=1"></meta>
<style>
div.img {
border: 1px solid #ccc;
}
div.img:hover {
border: 1px solid #777;
}
div.img img {
width: 100%;
height: auto;
}
div.desc {
padding: 15px;
text-align: center;
}
* {
box-sizing: border-box;
}
.responsive {
padding: 0 6px;
float: left;
width: 24.99999%;
}
@media only screen and (max-width: 700px) {
.responsive {
width: 49.99999%;
margin: 6px 0;
}
}
@media only screen and (max-width: 500px) {
.responsive {
width: 100%;
}
}
</style>
</head>
<body>
<h2 style="text-align: center;">响应式图片相册</h2>
<div class="responsive">
<div class="img">
<a target="_blank" href="images/index_button.png">
<img src="images/index_button.png" alt="图片1" width="300" height="200">
</a>
<div class="desc">图片描述</div>
</div>
</div>
<div class="responsive">
<div class="img">
<a target="_blank" href="images/index_button.png">
<img src="images/index_button.png" alt="图片1" width="300" height="200">
</a>
<div class="desc">图片描述</div>
</div>
</div>
<div class="responsive">
<div class="img">
<a target="_blank" href="images/index_button.png">
<img src="images/index_button.png" alt="图片1" width="300" height="200">
</a>
<div class="desc">图片描述</div>
</div>
</div>
<div class="responsive">
<div class="img">
<a target="_blank" href="images/index_button.png">
<img src="images/index_button.png" alt="图片1" width="300" height="200">
</a>
<div class="desc">图片描述</div>
</div>
</div>
</body>
</html>
CSS3 弹性盒子(Flex Box)
CSS3 弹性盒子属性
下表列出了在弹性盒子中常用到的属性:
属性 | 描述 |
---|---|
display | 指定 HTML 元素盒子类型。 |
flex-direction | 指定了弹性容器中子元素的排列方式 |
justify-content | 设置弹性盒子元素在主轴(横轴)方向上的对齐方式。 |
align-items | 设置弹性盒子元素在侧轴(纵轴)方向上的对齐方式。 |
flex-wrap | 设置弹性盒子的子元素超出父容器时是否换行。 |
align-content | 修改 flex-wrap 属性的行为,类似 align-items, 但不是设置子元素对齐,而是设置行对齐 |
flex-flow | flex-direction 和 flex-wrap 的简写 |
order | 设置弹性盒子的子元素排列顺序。 |
align-self | 在弹性子元素上使用。覆盖容器的 align-items 属性。 |
flex | 设置弹性盒子的子元素如何分配空间。 |
flex-direction
flex-direction 属性指定了弹性子元素在父容器中的位置。
语法
flex-direction: row | row-reverse | column | column-reverse
flex-direction的值有:
- row:横向从左到右排列(左对齐),默认的排列方式。
- row-reverse:反转横向排列(右对齐,从后往前排,最后一项排在最前面。
- column:纵向排列。
- column-reverse:反转纵向排列,从后往前排,最后一项排在最上面。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS 弹性盒子</title>
<style>
.flex-container {
display: flex;
display: -webkit-flex;
flex-direction: row-reverse;
-webkit-flex-direction: row-reverse;
width: 400px;
height: 250px;
background-color: lightgray;
}
.flex-item {
background-color: cornflowerblue;
width: 100px;
height: 100px;
margin: 10px;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">flex item 1</div>
<div class="flex-item">flex item 2</div>
<div class="flex-item">flex item 3</div>
</div>
</body>
</html>
justify-content 属性
内容对齐(justify-content)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐。
justify-content 语法如下:
justify-content: flex-start | flex-end | center | space-between | space-around
各个值解析:
flex-start:
弹性项目向行头紧挨着填充。这个是默认值。第一个弹性项的main-start外边距边线被放置在该行的main-start边线,而后续弹性项依次平齐摆放。
flex-end:
弹性项目向行尾紧挨着填充。第一个弹性项的main-end外边距边线被放置在该行的main-end边线,而后续弹性项依次平齐摆放。
center:
弹性项目居中紧挨着填充。(如果剩余的自由空间是负的,则弹性项目将在两个方向上同时溢出)。
space-between:
弹性项目平均分布在该行上。如果剩余空间为负或者只有一个弹性项,则该值等同于flex-start。否则,第1个弹性项的外边距和行的main-start边线对齐,而最后1个弹性项的外边距和行的main-end边线对齐,然后剩余的弹性项分布在该行上,相邻项目的间隔相等。
space-around:
弹性项目平均分布在该行上,两边留有一半的间隔空间。如果剩余空间为负或者只有一个弹性项,则该值等同于center。否则,弹性项目沿该行分布,且彼此间隔相等(比如是20px),同时首尾两边和弹性容器之间留有一半的间隔(1/2*20px=10px)。
align-items 属性
align-items 设置或检索弹性盒子元素在侧轴(纵轴)方向上的对齐方式。
语法
align-items: flex-start | flex-end | center | baseline | stretch
各个值解析:
- flex-start:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
- flex-end:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。
- center:弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
- baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与’flex-start’等效。其它情况下,该值将参与基线对齐。
- stretch:如果指定侧轴大小的属性值为’auto’,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照’min/max-width/height’属性的限制。
flex-wrap 属性
flex-wrap 属性用于指定弹性盒子的子元素换行方式。
语法
flex-wrap: nowrap|wrap|wrap-reverse|initial|inherit;
各个值解析:
- nowrap - 默认, 弹性容器为单行。该情况下弹性子项可能会溢出容器。
- wrap - 弹性容器为多行。该情况下弹性子项溢出的部分会被放置到新行,子项内部会发生断行
- wrap-reverse -反转 wrap 排列。
align-content 属性
align-content 属性用于修改 flex-wrap 属性的行为。类似于 align-items, 但它不是设置弹性子元素的对齐,而是设置各个行的对齐。
语法
align-content: flex-start | flex-end | center | space-between | space-around | stretch
各个值解析:
- stretch - 默认。各行将会伸展以占用剩余的空间。
- flex-start - 各行向弹性盒容器的起始位置堆叠。
- flex-end - 各行向弹性盒容器的结束位置堆叠。
- center -各行向弹性盒容器的中间位置堆叠。
- space-between -各行在弹性盒容器中平均分布。
- space-around - 各行在弹性盒容器中平均分布,两端保留子元素与子元素之间间距大小的一半。
align-self
align-self 属性用于设置弹性元素自身在侧轴(纵轴)方向上的对齐方式。
语法
align-self: auto | flex-start | flex-end | center | baseline | stretch
各个值解析:
- auto:如果’align-self’的值为’auto’,则其计算值为元素的父元素的’align-items’值,如果其没有父元素,则计算值为’stretch’。
- flex-start:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
- flex-end:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。
- center:弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
- baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与’flex-start’等效。其它情况下,该值将参与基线对齐。
- stretch:如果指定侧轴大小的属性值为’auto’,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照’min/max-width/height’属性的限制。
CSS 网格布局
网格是一组相交的水平线和垂直线,它定义了网格的列和行。
CSS 网格属性
属性 | 描述 |
---|---|
column-gap | 指定列之间的间隙 |
gap | row-gap 和 column-gap 的简写属性 |
grid | grid-template-rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, 以及 grid-auto-flow 的简写属性 |
grid-area | 指定网格元素的名称,或者也可以是 grid-row-start, grid-column-start, grid-row-end, 和 grid-column-end 的简写属性 |
grid-auto-columns | 指的默认的列尺寸 |
grid-auto-flow | 指定自动布局算法怎样运作,精确指定在网格中被自动布局的元素怎样排列。 |
grid-auto-rows | 指的默认的行尺寸 |
grid-column | grid-column-start 和 grid-column-end 的简写属性 |
grid-column-end | 指定网格元素列的结束位置 |
grid-column-gap | 指定网格元素的间距大小 |
grid-column-start | 指定网格元素列的开始位置 |
grid-gap | grid-row-gap 和 grid-column-gap 的简写属性 |
grid-row | grid-row-start 和 grid-row-end 的简写属性 |
grid-row-end | 指定网格元素行的结束位置 |
grid-row-gap | 指定网格元素的行间距 |
grid-row-start | 指定网格元素行的开始位置 |
grid-template | grid-template-rows, grid-template-columns 和 grid-areas 的简写属性 |
grid-template-areas | 指定如何显示行和列,使用命名的网格元素 |
grid-template-columns | 指定列的大小,以及网格布局中设置列的数量 |
grid-template-rows | 指定网格布局中行的大小 |
row-gap | 指定两个行之间的间距 |
display 属性
当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid 后,它就变成了一个网格容器,这个元素的所有直系子元素将成为网格元素。
网格轨道
我们通过 grid-template-columns 和 grid-template-rows 属性来定义网格中的列和行。
这些属性定义了网格的轨道,一个网格轨道就是网格中任意两条线之间的空间。
可以使用以下属性来调整间隙大小:
grid-column-gap
grid-row-gap
grid-gap