CSS 响应式 Flexbox
可以使用媒体查询为不同的屏幕尺寸和设备创建不同的布局。
例如,如果您想为大多数屏幕尺寸创建两列布局,为小屏幕尺寸(如手机和平板电脑)创建一列布局,则可以在特定断点(以下示例中为 800px)处将 flex-direction 从行更改为列:
示例
.flex-container {
display: flex;
flex-direction: row;
}
/* 响应式布局 - 创建一列布局而不是两列布局 */
@media (max-width: 800px) {
.flex-container {
flex-direction: column;
}
}
另一种方法是更改弹性项目的弹性属性百分比,以针对不同的屏幕尺寸创建不同的布局。请注意,我们还必须在弹性容器中包含 flex-wrap: wrap; 以使此示例正常工作:
示例
.flex-container {
display: flex;
flex-wrap: wrap;
}
.flex-item-left {
flex: 50%;
}
.flex-item-right {
flex: 50%;
}
/* 响应式布局 - 制作一列布局而不是两列布局 */
@media (max-width: 800px) {
.flex-item-right, .flex-item-left {
flex: 100%;
}
}
使用 Flexbox 的响应式图库
使用 Flexbox 创建一个响应式图库,其中包含四张、两张或全宽图像,具体取决于屏幕尺寸:
<!DOCTYPE html>
<html>
<style>
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial;
}
.header {
text-align: center;
padding: 32px;
}
.row {
display: flex;
flex-wrap: wrap;
padding: 0 4px;
}
/* Create four equal columns that sits next to each other */
.column {
flex: 25%;
max-width: 25%;
padding: 0 4px;
}
.column img {
margin-top: 8px;
vertical-align: middle;
}
/* Responsive layout - makes a two column-layout instead of four columns */
@media (max-width: 800px) {
.column {
flex: 50%;
max-width: 50%;
}
}
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */
@media (max-width: 600px) {
.column {
flex: 100%;
max-width: 100%;
}
}
</style>
<body>
<!-- Header -->
<div class="header">
<h1>Responsive Image Gallery</h1>
<p>Resize the browser window to see the responsive effect.</p>
</div>
<!-- Photo Grid -->
<div class="row">
<div class="column">
<img src="wedding.jpg" style="width:100%">
<img src="rocks.jpg" style="width:100%">
<img src="falls2.jpg" style="width:100%">
<img src="paris.jpg" style="width:100%">
<img src="nature.jpg" style="width:100%">
<img src="mist.jpg" style="width:100%">
<img src="paris.jpg" style="width:100%">
</div>
<div class="column">
<img src="underwater.jpg" style="width:100%">
<img src="ocean.jpg" style="width:100%">
<img src="wedding.jpg" style="width:100%">
<img src="mountainskies.jpg" style="width:100%">
<img src="rocks.jpg" style="width:100%">
<img src="underwater.jpg" style="width:100%">
</div>
<div class="column">
<img src="wedding.jpg" style="width:100%">
<img src="rocks.jpg" style="width:100%">
<img src="falls2.jpg" style="width:100%">
<img src="paris.jpg" style="width:100%">
<img src="nature.jpg" style="width:100%">
<img src="mist.jpg" style="width:100%">
<img src="paris.jpg" style="width:100%">
</div>
<div class="column">
<img src="underwater.jpg" style="width:100%">
<img src="ocean.jpg" style="width:100%">
<img src="wedding.jpg" style="width:100%">
<img src="mountainskies.jpg" style="width:100%">
<img src="rocks.jpg" style="width:100%">
<img src="underwater.jpg" style="width:100%">
</div>
</div>
</body>
</html>
使用 Flexbox 的响应式网站
使用 Flexbox 创建一个响应式网站,其中包含灵活的导航栏和灵活的内容:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
box-sizing: border-box;
}
/* Style the body */
body {
font-family: Arial;
margin: 0;
}
/* Header/logo Title */
.header {
padding: 60px;
text-align: center;
background: #1abc9c;
color: white;
}
/* Style the top navigation bar */
.navbar {
display: flex;
background-color: #333;
}
/* Style the navigation bar links */
.navbar a {
color: white;
padding: 14px 20px;
text-decoration: none;
text-align: center;
}
/* Change color on hover */
.navbar a:hover {
background-color: #ddd;
color: black;
}
/* Column container */
.row {
display: flex;
flex-wrap: wrap;
}
/* Create two unequal columns that sits next to each other */
/* Sidebar/left column */
.side {
flex: 30%;
background-color: #f1f1f1;
padding: 20px;
}
/* Main column */
.main {
flex: 70%;
background-color: white;
padding: 20px;
}
/* Fake image, just for this example */
.fakeimg {
background-color: #aaa;
width: 100%;
padding: 20px;
}
/* Footer */
.footer {
padding: 20px;
text-align: center;
background: #ddd;
}
/* Responsive layout - when the screen is less than 700px wide, make the two columns stack on top of each other instead of next to each other */
@media screen and (max-width: 700px) {
.row, .navbar {
flex-direction: column;
}
}
</style>
</head>
<body>
<!-- Note -->
<div style="background:yellow;padding:5px">
<h4 style="text-align:center">Resize the browser window to see the responsive effect.</h4>
</div>
<!-- Header -->
<div class="header">
<h1>My Website</h1>
<p>With a <b>flexible</b> layout.</p>
</div>
<!-- Navigation Bar -->
<div class="navbar">
<a href="#">Link</a>
<a href="#">Link</a>
<a href="#">Link</a>
<a href="#">Link</a>
</div>
<!-- The flexible grid (content) -->
<div class="row">
<div class="side">
<h2>About Me</h2>
<h5>Photo of me:</h5>
<div class="fakeimg" style="height:200px;">Image</div>
<p>Some text about me in culpa qui officia deserunt mollit anim..</p>
<h3>More Text</h3>
<p>Lorem ipsum dolor sit ame.</p>
<div class="fakeimg" style="height:60px;">Image</div><br>
<div class="fakeimg" style="height:60px;">Image</div><br>
<div class="fakeimg" style="height:60px;">Image</div>
</div>
<div class="main">
<h2>TITLE HEADING</h2>
<h5>Title description, Dec 7, 2017</h5>
<div class="fakeimg" style="height:200px;">Image</div>
<p>Some text..</p>
<p>Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p>
<br>
<h2>TITLE HEADING</h2>
<h5>Title description, Sep 2, 2017</h5>
<div class="fakeimg" style="height:200px;">Image</div>
<p>Some text..</p>
<p>Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p>
</div>
</div>
<!-- Footer -->
<div class="footer">
<h2>Footer</h2>
</div>
</body>
</html>
总结
本文介绍了CSS响应式 Flexbox的使用,如有问题欢迎私信和评论