Responsive Design with CSS3 Media Queries 243

See It in Action First

Before you start, check the final demo to see how it looks like. Resize your browser to see how the layout automatically flows based on the width of the viewport (browser viewing area).

overview

More Examples

If you want to see more examples, check out the following WordPress themes that I designed with media queries: TisaEleminSucoiTheme2FunkiMinblr, andWumblr.

Overview

The page's container has a width of 980px which is optimized for any resolution wider than 1024px. Media query is used to check if the viewport is narrower than 980px, then the layout will turn to fluid width instead of fixed width. If the viewport is narrower than 650px, it expands the content container and sidebar to fullwidth to form a single column layout.

overview

HTML Code

I'm not going to go through the details of the HTML code. Below is the main structure of the layout. I have a "pagewrap" container that wraps the "header", "content", "sidebar", and "footer" together.

<div id="pagewrap">

	<header id="header">

		<hgroup>
			<h1 id="site-logo">Demo</h1>
			<h2 id="site-description">Site Description</h2>
		</hgroup>

		<nav>
			<ul id="main-nav">
				<li><a href="#">Home</a></li>
			</ul>
		</nav>

		<form id="searchform">
			<input type="search">
		</form>

	</header>
	
	<div id="content">

		<article class="post">
			blog post
		</article>

	</div>
	
	<aside id="sidebar">

		<section class="widget">
			 widget
		</section>
						
	</aside>

	<footer id="footer">
		footer
	</footer>
	
</div>
HTML5.js

Note that I use HTML5 markup in my demo. Internet Explorer prior than version 9 doesn't support the new elements introduced in HTML5 such as <header>, <article>, <footer>, <figure>, etc. Including the html5.js Javscript file in the HTML document will enable IE to acknowledge the new elements.

<!--[if lt IE 9]>
	<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

CSS

Reset HTML5 Elements to Block

The following CSS will reset the HTML5 elements (article, aside, figure, header, footer, etc.) to block element.

article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { 
    display: block;
}
Main Structure CSS

Again, I'm not going to get into the details. The main "pagewrap" container is 980px wide. Header has a fixed height 160px. The "content" container is 600px wide floated left. The "sidebar" content is 280px wide floated right.


#pagewrap {
	width: 980px;
	margin: 0 auto;
}

#header {
	height: 160px;
}

#content {
	width: 600px;
	float: left;
}

#sidebar {
	width: 280px;
	float: right;
}

#footer {
	clear: both;
}
Step 1 Demo

Here is the design demo. Note that the media queries haven't been implemented yet. Resize the browser window and you should see that the layout is not scalable.

CSS3 Media Query Stuffs

Now here comes the fun part — media queries.

Include Media Queries Javascript

Internet Explorer 8 or older versions doesn't support CSS3 media queries. You can enable it by adding the css3-mediaqueries.js Javascript file.

<!--[if lt IE 9]>
	<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->
Include Media Queries CSS

Create a new stylesheet for the media queries. Check out my previous tutorial to see how media queries work.

<link href="media-queries.css" rel="stylesheet" type="text/css">
Viewport Smaller Than 980px (Fluid Layout)

For viewport narrower than 980px, the following rules will apply:

  • pagewrap = reset width to 95%
  • content = reset width to 60%
  • sidebar = reset width to 30%

TIPS: use percentage (%) value to make the containers fluid.


@media screen and (max-width: 980px) {

	#pagewrap {
		width: 95%;
	}

	#content {
		width: 60%;
		padding: 3% 4%;
	}

	#sidebar {
		width: 30%;
	}
	#sidebar .widget {
		padding: 8% 7%;
		margin-bottom: 10px;
	}

}
Viewport Smaller Than 650px (One-Column Layout)

Next I have another set of CSS for viewport narrower than 650px:

  • header = reset height to auto
  • searchform = re-position the searchform to 5px top
  • main-nav = reset the position to static
  • site-logo = reset the position to static
  • site-description = reset the position to static
  • content = reset the width to auto (this will make the container to expand fullwidth) and get rid of the float
  • sidebar = reset width to 100% and get rid of the float

@media screen and (max-width: 650px) {

	#header {
		height: auto;
	}

	#searchform {
		position: absolute;
		top: 5px;
		right: 0;
	}

	#main-nav {
		position: static;
	}

	#site-logo {
		margin: 15px 100px 5px 0;
		position: static;
	}

	#site-description {
		margin: 0 0 15px;
		position: static;
	}

	#content {
		width: auto;
		float: none;
		margin: 20px 0;
	}

	#sidebar {
		width: 100%;
		float: none;
		margin: 0;
	}

}
Viewport Smaller Than 480px

The following CSS will apply if the viewport is narrower than 480px which is the width of the iPhone screen in landscape orientation.

  • html = disable text size adjustment. By default, iPhone enlarges the text size so it reads more comfortably. You can disable the text size adjustment by adding -webkit-text-size-adjust: none;
  • main-nav = reset the font size to 90%

@media screen and (max-width: 480px) {

	html {
		-webkit-text-size-adjust: none;
	}

	#main-nav a {
		font-size: 90%;
		padding: 10px 8px;
	}

}

Flexible Images

To make the images flexible, simply add max-width:100% and height:auto. Imagemax-width:100% and height:auto works in IE7, but not in IE8 (yes, another weird IE bug). To fix this, you need to add width:auto\9 for IE8.


img {
	max-width: 100%;
	height: auto;
	width: auto\9; /* ie8 */
}

Flexible Embedded Videos

To make the embedded videos flexible, use the same trick as mentioned above. For unknown reason, max-width:100% (for embed element) doesn't work in Safari. The work around is to use width:100% instead.


.video embed,
.video object,
.video iframe {
	width: 100%;
	height: auto;
}

Initial Scale Meta Tag (iPhone)

By default, iPhone Safari shrinks HTML pages to fit into the iPhone screen. The following meta tag tells iPhone Safari to use the width of the device as the width of the viewport and disable the initial scale.


<meta name="viewport" content="width=device-width; initial-scale=1.0">

Final Demo

View the final demo and resize your browser window to see the media queries in action. Don't forget to check the demo with the iPhone, iPad, Blackberry (newer versions), and Android phones to see the mobile version.

final demo

Summaries

  • Media Queries Javascript Fallback:
    css3-mediaqueries.js is required to enable media queries for browsers that don't support media queries.
    <!--[if lt IE 9]>
    	<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
    <![endif]-->
    
  • CSS Media Queries:
    The trick for creating an adaptive design is to use CSS to override the layout structure based on the viewport width.
    
    @media screen and (max-width: 560px) {
    
    	#content {
    		width: auto;
    		float: none;
    	}
    
    	#sidebar {
    		width: 100%;
    		float: none;
    	}
    
    }
    
  • Flexible Images:
    Use max-width:100% and height:auto to make the images flexible.
    
    img {
    	max-width: 100%;
    	height: auto;
    	width: auto\9; /* ie8 */
    }
    
  • Flexible Embedded Videos:
    Use width:100% and height:auto to make the embedded videos flexible.
    
    .video embed,
    .video object,
    .video iframe {
    	width: 100%;
    	height: auto;
    }
    
  • Webkit Text Size Adjust:
    Use -webkit-text-size-adjust:none to disable text size adjust on the iPhone.
    
    html {
    	-webkit-text-size-adjust: none;
    }
    
  • Reset iPhone Viewport & Initial Scale:
    The following meta tag resets the viewport and inital scale on the iPhone:
    
    <meta name="viewport" content="width=device-width; initial-scale=1.0">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
响应式设计(Responsive Design)是一种通过使用CSS媒体查询,根据设备的屏幕大小和特性,动态调整网站的布局和样式的方法。下面是10个代码范例,展示了响应式设计的具体代码书写: 1. 设置视口(Viewport): ```html <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> ``` 2. 媒体查询(Media Queries): ```css @media (max-width: 768px) { /* 在宽度小于等于768px时应用的样式 */ } @media (min-width: 769px) and (max-width: 1024px) { /* 在宽度介于769px和1024px之间时应用的样式 */ } ``` 3. 设置响应式图片: ```html <img src="image.jpg" alt="Image" style="max-width: 100%; height: auto;"> ``` 4. 调整字体大小: ```css body { font-size: 16px; } @media (max-width: 768px) { body { font-size: 14px; } } ``` 5. 设置网格布局: ```css .container { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } ``` 6. 隐藏元素: ```css .hide-on-mobile { display: none; } @media (max-width: 768px) { .hide-on-mobile { display: block; } } ``` 7. 调整导航菜单: ```css .nav-menu { display: flex; justify-content: space-between; align-items: center; } @media (max-width: 768px) { .nav-menu { flex-direction: column; } } ``` 8. 设置响应式背景图像: ```css .hero-section { background-image: url('background.jpg'); background-size: cover; } @media (max-width: 768px) { .hero-section { background-image: url('background-mobile.jpg'); } } ``` 9. 调整表格样式: ```css .table { width: 100%; } @media (max-width: 768px) { .table { display: block; overflow-x: auto; } } ``` 10. 调整按钮样式: ```css .button { padding: 10px 20px; } @media (max-width: 768px) { .button { padding: 8px 16px; } } ``` 这些代码范例展示了如何使用媒体查询、设置元素样式、调整布局等技术来实现响应式设计。你可以根据具体需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值