Friday, September 30, 2016
#html5 #css3 GeekWork Picks: Camping review platform The Dyrt seeks front-end developer #html5 #css3 https://t.co/omA8ZtnaAb
#html5 #css3 GeekWork Picks: Camping review platform The Dyrt seeks front-end developer #html5 #css3 https://t.co/omA8ZtnaAb
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#code #HTML5 #webdesigns #css #ruby Download of the Day: Abstract Grunge Vector Box Freebie https://t.co/p4HZ16pol7
#code #HTML5 #webdesigns #css #ruby Download of the Day: Abstract Grunge Vector Box Freebie https://t.co/p4HZ16pol7
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Blog: JUSTIN JEWETT: How important is the homepage?: Welcome users with the information th… https://t.co/z2gHuVvSxW
#webdevelop #webdesigns Blog: JUSTIN JEWETT: How important is the homepage?: Welcome users with the information th… https://t.co/z2gHuVvSxW
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns JUSTIN JEWETT: How important is the homepage?: CRAFTED BY Justin Jewett, VP, director of t… https://t.co/w4bePVUFNi
#webdevelop #webdesigns JUSTIN JEWETT: How important is the homepage?: CRAFTED BY Justin Jewett, VP, director of t… https://t.co/w4bePVUFNi
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT speckyboy: Tools to Help Improve Your Website Proofreading https://t.co/vYn853maQL https://t.co/RD0o8g0aTg
#webdevelop #webdesigns RT speckyboy: Tools to Help Improve Your Website Proofreading https://t.co/vYn853maQL http://pic.twitter.com/RD0o8g0aTg
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT Creativepool: FOX+: Moustache, Apple, Tongue #CPSpotlight by Freddy Montero Galva … https://t.co/NObXb1tFpi
#webdevelop #webdesigns RT Creativepool: FOX+: Moustache, Apple, Tongue #CPSpotlight by Freddy Montero Galva … http://pic.twitter.com/NObXb1tFpi
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT Creativepool: BBDO Guerrero Philippines Client - Normagut #CPSpotlight by Sarang Bijaga… https://t.co/rLuNW7IMKz
#webdevelop #webdesigns RT Creativepool: BBDO Guerrero Philippines Client - Normagut #CPSpotlight by Sarang Bijaga… http://pic.twitter.com/rLuNW7IMKz
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT onishiweb: "You can have too much pre-processing" Spoken from the mouth of Mr Sass StuRobson Empathise with th…
#webdevelop #webdesigns RT onishiweb: "You can have too much pre-processing" Spoken from the mouth of Mr Sass StuRobson
— Web Dev Pro (@Web_improve) September 30, 2016
Empathise with th…
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT jeffrey_way: It just occurred to me that, during this design refresh I’m working on, I haven’t use float: left/r…
#webdevelop #webdesigns RT jeffrey_way: It just occurred to me that, during this design refresh I’m working on, I haven’t use float: left/r…
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT jquery_rain: Choreographer.js : JavaScript Library for Complex CSS Animations … https://t.co/UaVOUCTqXe
#webdevelop #webdesigns RT jquery_rain: Choreographer.js : JavaScript Library for Complex CSS Animations … http://pic.twitter.com/UaVOUCTqXe
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT thelogosmith: Don’t really quite see what all the fuss is RE the Wonder Woman logo and … https://t.co/2FXnjndnss
#webdevelop #webdesigns RT thelogosmith: Don’t really quite see what all the fuss is RE the Wonder Woman logo and … http://pic.twitter.com/2FXnjndnss
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT jquery_rain: EQCSS : CSS Extension for Element Queries with Javascript … https://t.co/KFsyduh6uW
#webdevelop #webdesigns RT jquery_rain: EQCSS : CSS Extension for Element Queries with Javascript … http://pic.twitter.com/KFsyduh6uW
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT thisiscrowd: Crowd are so thrilled to be Wirehive100 finalists for #FastestGrowth. We c… https://t.co/K8S2arrVaZ
#webdevelop #webdesigns RT thisiscrowd: Crowd are so thrilled to be Wirehive100 finalists for #FastestGrowth. We c… https://t.co/K8S2arrVaZ
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT imaginesubs: Become a subscriber to PshopCreative & get over $10k worth of free assets.… https://t.co/vab3EdSMfy
#webdevelop #webdesigns RT imaginesubs: Become a subscriber to PshopCreative & get over $10k worth of free assets.… https://t.co/vab3EdSMfy
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT BrightBlueDay: We had so much fun yesterday at #TFM16. Here's our blog about it: … https://t.co/L4mgQ0QPWz
#webdevelop #webdesigns RT BrightBlueDay: We had so much fun yesterday at #TFM16. Here's our blog about it: … http://pic.twitter.com/L4mgQ0QPWz
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT Engzell: Halfway there. https://t.co/DsObAUd2Dp
#webdevelop #webdesigns RT Engzell: Halfway there. http://pic.twitter.com/DsObAUd2Dp
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT codepo8: text-spinners https://t.co/1tpVTqas5D - I like the emoji ones :)
#webdevelop #webdesigns RT codepo8: text-spinners https://t.co/1tpVTqas5D - I like the emoji ones :)
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns THIS IS A POSSUM. But what's it got to do with SEO? Find out more https://t.co/sWd7R8HaYC https://t.co/GqnapYX0hP
#webdevelop #webdesigns THIS IS A POSSUM. But what's it got to do with SEO? Find out more https://t.co/sWd7R8HaYC http://pic.twitter.com/GqnapYX0hP
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
16 Print-Ready Creative Resume Templates from TheResumeCreator - only $24! https://t.co/cGlV08nbrf #developerdeals
16 Print-Ready Creative Resume Templates from TheResumeCreator - only $24! https://t.co/cGlV08nbrf #developerdeals
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
Thursday, September 29, 2016
#html5 #css3 School of Professional Studies launches coding boot camp #html5 #css3 https://t.co/btkZBUm6KW
#html5 #css3 School of Professional Studies launches coding boot camp #html5 #css3 https://t.co/btkZBUm6KW
— Web Dev Pro (@Web_improve) September 30, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Blog: Game Of Drones: GoPro Karma V DJI Mavic Pro: 2016 has been a good year for drones an… https://t.co/WJWpNjbmJ1
#webdevelop #webdesigns Blog: Game Of Drones: GoPro Karma V DJI Mavic Pro: 2016 has been a good year for drones an… https://t.co/WJWpNjbmJ1
— Web Dev Pro (@Web_improve) September 29, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Blog: Video Headphones: The Future of Entertainment?: Meet iWear, the all-in-one audiovisu… https://t.co/gsASb3zYpJ
#webdevelop #webdesigns Blog: Video Headphones: The Future of Entertainment?: Meet iWear, the all-in-one audiovisu… https://t.co/gsASb3zYpJ
— Web Dev Pro (@Web_improve) September 29, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Video Headphones: The Future of Entertainment?: The modern home cinema is not just one t… https://t.co/I41M7lkXD9
#webdevelop #webdesigns Video Headphones: The Future of Entertainment?:
— Web Dev Pro (@Web_improve) September 29, 2016
The modern home cinema is not just one t… https://t.co/I41M7lkXD9
from Twitter https://twitter.com/Web_improve
Wednesday, September 28, 2016
Successful website creation – everything you need to know https://t.co/aMNUUXUAUx #webdevelopment
Successful website creation – everything you need to know https://t.co/aMNUUXUAUx #webdevelopment
— Web Dev Pro (@Web_improve) September 28, 2016
from Twitter https://twitter.com/Web_improve
The State of HTML5 Gaming presented at Prov.js #JavaScriptWorld #Provjs #HTML5 ☞ https://t.co/i6v0AmaKjb https://t.co/e3YODJ7zlO
The State of HTML5 Gaming presented at Prov.js #JavaScriptWorld #Provjs #HTML5
— Web Dev Pro (@Web_improve) September 28, 2016
☞ https://t.co/i6v0AmaKjb http://pic.twitter.com/e3YODJ7zlO
from Twitter https://twitter.com/Web_improve
Selenium WebDriver with Java https://t.co/CeIcBD6VgK #programming
Selenium WebDriver with Java https://t.co/CeIcBD6VgK #programming
— Web Dev Pro (@Web_improve) September 28, 2016
from Twitter https://twitter.com/Web_improve
Java Socket Programming: Build a Chat Application https://t.co/tKD4NnKTN5 #programming
Java Socket Programming: Build a Chat Application https://t.co/tKD4NnKTN5 #programming
— Web Dev Pro (@Web_improve) September 28, 2016
from Twitter https://twitter.com/Web_improve
Java for Beginners in 2 hours: Build a Banking Application https://t.co/R19EXyMvGE #programming
Java for Beginners in 2 hours: Build a Banking Application https://t.co/R19EXyMvGE #programming
— Web Dev Pro (@Web_improve) September 28, 2016
from Twitter https://twitter.com/Web_improve
1 Year Unlimited Access to 1300+ Premium Fonts - only $27! https://t.co/W5vzfP2b6y #developerdeals
1 Year Unlimited Access to 1300+ Premium Fonts - only $27! https://t.co/W5vzfP2b6y #developerdeals
— Web Dev Pro (@Web_improve) September 28, 2016
from Twitter https://twitter.com/Web_improve
Tuesday, September 27, 2016
Data structures in C language https://t.co/vS4dSj9SqL #programming
Data structures in C language https://t.co/vS4dSj9SqL #programming
— Web Dev Pro (@Web_improve) September 28, 2016
from Twitter https://twitter.com/Web_improve
Node.js Crash Course for .NET Developers #JavaScriptWorld #Node.js #Developers ☞ https://t.co/vx7Ocfd6cv https://t.co/qP463VFa2b
Node.js Crash Course for .NET Developers #JavaScriptWorld #Node.js #Developers
— Web Dev Pro (@Web_improve) September 28, 2016
☞ https://t.co/vx7Ocfd6cv http://pic.twitter.com/qP463VFa2b
from Twitter https://twitter.com/Web_improve
Learn Cucumber: Develop automated test in Java following BBD https://t.co/4DVppKKwF2 #programming
Learn Cucumber: Develop automated test in Java following BBD https://t.co/4DVppKKwF2 #programming
— Web Dev Pro (@Web_improve) September 28, 2016
from Twitter https://twitter.com/Web_improve
#code #HTML5 #webdesigns #css #ruby 5 Benefits of Online Tutoring https://t.co/jk6JpEXKFa
#code #HTML5 #webdesigns #css #ruby 5 Benefits of Online Tutoring https://t.co/jk6JpEXKFa
— Web Dev Pro (@Web_improve) September 27, 2016
from Twitter https://twitter.com/Web_improve
Coding with Scratch Junior https://t.co/DuNsm8csbX #programming
Coding with Scratch Junior https://t.co/DuNsm8csbX #programming
— Web Dev Pro (@Web_improve) September 27, 2016
from Twitter https://twitter.com/Web_improve
How to Build a Striped Navigation With Flexbox
Thanks to flexbox, nowadays we can build some really attractive and modern layouts with relative ease. In this tutorial we’re going to look at an interface used recently for Google National Parks, and see how flexbox can help us improve on it.
As always, before going any further, let’s look at what we’ll be building (you may need to check out the larger version as the full effect kicks in on viewports wider than 800px):
Be sure to hover over the links to trigger the corresponding effects.
The Markup
First, let’s examine the markup we’ll be using to build this layout. We define a div
element with five links within it (you can use whichever elements you feel are appropriate). Each of our links contains a div
with the class of overlay
. Below you can see the skeleton of our code:
<div class="flex-wrapper"> <a href="" class="one"> <div class="overlay"> <div class="overlay-inner"> <h2>Title #1</h2> <p>Fusce vulputate orci at nulla consequat, ac tincidunt quam ultrices.</p> </div> </div> </a> <!-- four more links here --> </div>
Initial CSS Styles
With the markup ready, we start defining some initial CSS styles, specifically:
- Specify the outermost
div
as a flex container and set its height equal to the viewport height withheight: 100vh;
. - Set an equal width for all links (flex items). To achieve that, we give them each
flex: 1
. Additionally, all of our links will have a background image (sourced from unsplash.com) which covers the viewport height. As a fallback (in case an image isn’t available), we also specify a unique background color for each one. -
When we hover over a link, its size becomes three times bigger relative to the size of the other links. We do this by changing the value of the
flex
property of the target link. Happily enough this property belongs to the animated CSS properties, so we’re able to generate a smooth transition effect (at least in most recent browsers).
Here’s part of the CSS code demonstrating what we’ve described above:
.flex-wrapper { display: flex; height: 100vh; } .flex-wrapper a { position: relative; flex: 1; background-size: cover; background-position: center; background-repeat: no-repeat; transition: flex .4s; } .flex-wrapper .one { background-image: url(IMAGE_PATH); background-color: red; } .flex-wrapper a:hover { flex: 3; }
So far, if we preview the demo in a browser that supports flexbox, we’ll see this result:
Styling the Overlay
Our next step is to assign a few styles to the overlay. Here’s what we’ll do:
- Give overlay the same dimensions as the parent link. We can achieve this behavior by positioning it absolutely (relative to the immediate parent) and then specifying zero values for all the offset properties.
- Define the overlay as a flex container. This way, we’re able to center its direct child (i.e.
.overlay-inner
element) vertically and horizontally. - Add a semi-transparent grey background to the overlay when we hover over the parent link.
Here are the associated CSS styles:
.flex-wrapper .overlay { display: flex; align-items: center; justify-content: center; padding: 0 10px; position: absolute; top: 0; right: 0; bottom: 0; left: 0; transition: background-color .4s; } .flex-wrapper a:hover .overlay { background-color: rgba(0, 0, 0, .5); }
Inner Overlay
Now, it’s time to style the inner parts of our overlay. By default these are hidden and should appear only when we hover over the corresponding parent link. But not immediately, we’ll reveal them after a small delay. This delay is important; if we don’t define it specifically, the transition effect will look a little bit ugly. Remove it and test the demo to understand what I mean.
So just to recap, first the link gets bigger, then the overlay elements become visible. Also, we use the translate3d()
to create some slide in effects. Last but not least, we use the transform-style: preserve-3d
hack (or a similar one) to prevent possible flickering effects across different browsers.
And here are the related CSS styles:
.flex-wrapper .overlay-inner * { visibility: hidden; opacity: 0; transform-style: preserve-3d; } .flex-wrapper .overlay h2 { transform: translate3d(0, -60px, 0); } .flex-wrapper .overlay p { transform: translate3d(0, 60px, 0); } .flex-wrapper a:hover .overlay-inner * { opacity: 1; visibility: visible; transform: none; transition: all .3s .3s; }
Let’s see what that’s given us.
Going Responsive
The page looks great on large screens, but perhaps on small, or even on medium screens we’ll have to make a few adjustments. For example, here are a few things we can do:
- Flip the main-axis of the flex container by adding
flex-direction: column
to it. In doing so the flex items will flow from top to bottom. - Cancel all the transition effects and show the overlay elements by default .
Our desktop-first media query looks as follows (I’ve used 800px only because that suits the embedded demos in this post–you can choose whatever you feel is best):
@media screen and (max-width: 800px) { .flex-wrapper { flex-direction: column; } .flex-wrapper a:hover { flex: 1; } .flex-wrapper a:hover .overlay { background-color: transparent; } .flex-wrapper .overlay h2, .flex-wrapper .overlay p { opacity: 1; visibility: visible; transform: none; } }
Here’s the final appearance of our navigation:
Browser Support
The demo works in all recent browsers that support flexbox.
In some browsers you may notice that the animation of the flex
property isn’t as smooth as it should be, or perhaps doesn’t work at all. For example, IE11 doesn’t animate this property, whereas Edge does. This is reasonable enough, considering the fact that flexbox is a new layout mode which is still gaining traction.
Conclusion
In this tutorial, we improved our flexbox knowledge by learning how to build a stylish navigation layout. Hopefully you enjoyed what we’ve built here and have taken some inspiration for your next projects!
If you build a similar layout, don’t forget to show us the approach (pure CSS or JavaScript-based solution) you used.
In the Wild
Before closing, I’d like to share with you a few sites which use a similar layout to what we’ve just created:
Apache Spark 2.0 + Java : DO Big Data Analytics & ML https://t.co/0SmovGQH5y #programming
Apache Spark 2.0 + Java : DO Big Data Analytics & ML https://t.co/0SmovGQH5y #programming
— Web Dev Pro (@Web_improve) September 27, 2016
from Twitter https://twitter.com/Web_improve
The Complete Ethical Hacking Course 2.0: Python & Kali Linux https://t.co/jdVmqWotIQ #webdevelopment
The Complete Ethical Hacking Course 2.0: Python & Kali Linux https://t.co/jdVmqWotIQ #webdevelopment
— Web Dev Pro (@Web_improve) September 27, 2016
from Twitter https://twitter.com/Web_improve
108 Hi-Res Magazine Mockups from Zippy Pixels - only $17! https://t.co/08DZjFnXSR #developerdeals
108 Hi-Res Magazine Mockups from Zippy Pixels - only $17! https://t.co/08DZjFnXSR #developerdeals
— Web Dev Pro (@Web_improve) September 27, 2016
from Twitter https://twitter.com/Web_improve
Monday, September 26, 2016
Learn basics of HTML in 30 Minutes https://t.co/ZdgdUfUJrU #webdevelopment
Learn basics of HTML in 30 Minutes https://t.co/ZdgdUfUJrU #webdevelopment
— Web Dev Pro (@Web_improve) September 27, 2016
from Twitter https://twitter.com/Web_improve
Test and improve your Java skills https://t.co/jswTmn9NIH #programming
Test and improve your Java skills https://t.co/jswTmn9NIH #programming
— Web Dev Pro (@Web_improve) September 26, 2016
from Twitter https://twitter.com/Web_improve
Learn basics of HTML in 30 Minutes https://t.co/ZdgdUgckQu #webdevelopment
Learn basics of HTML in 30 Minutes https://t.co/ZdgdUgckQu #webdevelopment
— Web Dev Pro (@Web_improve) September 26, 2016
from Twitter https://twitter.com/Web_improve
Basics of CSS – Udemy Course for Free https://t.co/18X4ndu9Eu #webdesign
Basics of CSS – Udemy Course for Free https://t.co/18X4ndu9Eu #webdesign
— Web Dev Pro (@Web_improve) September 26, 2016
from Twitter https://twitter.com/Web_improve
Knocking it out of the park, with Knockout.JS #JavaScriptWorld #Knockout.JS #javascript ☞ https://t.co/WStWE19i5O https://t.co/tNPGwyTjod
Knocking it out of the park, with Knockout.JS #JavaScriptWorld #Knockout.JS #javascript
— Web Dev Pro (@Web_improve) September 26, 2016
☞ https://t.co/WStWE19i5O http://pic.twitter.com/tNPGwyTjod
from Twitter https://twitter.com/Web_improve
2350+ Graphic Design Elements and Patterns (with Extended License) - $21! https://t.co/eNNQeVoGot #developerdeals
2350+ Graphic Design Elements and Patterns (with Extended License) - $21! https://t.co/eNNQeVoGot #developerdeals
— Web Dev Pro (@Web_improve) September 26, 2016
from Twitter https://twitter.com/Web_improve
Sunday, September 25, 2016
WordPress Security: Prevent Your WordPress Site From Hackers https://t.co/VhFHkrp3IK #webdesign
WordPress Security: Prevent Your WordPress Site From Hackers https://t.co/VhFHkrp3IK #webdesign
— Web Dev Pro (@Web_improve) September 26, 2016
from Twitter https://twitter.com/Web_improve
Java Developer course: Become a Java programmer in 3 hours https://t.co/H3db1EoTha #programming
Java Developer course: Become a Java programmer in 3 hours https://t.co/H3db1EoTha #programming
— Web Dev Pro (@Web_improve) September 26, 2016
from Twitter https://twitter.com/Web_improve
Build professional sites without coding 10 plus projects https://t.co/LlE8gTzRSy #webdesign
Build professional sites without coding 10 plus projects https://t.co/LlE8gTzRSy #webdesign
— Web Dev Pro (@Web_improve) September 26, 2016
from Twitter https://twitter.com/Web_improve
Learn Reactivex From Ground Up https://t.co/jq2SywgsaY #programming
Learn Reactivex From Ground Up https://t.co/jq2SywgsaY #programming
— Web Dev Pro (@Web_improve) September 25, 2016
from Twitter https://twitter.com/Web_improve
WordPress essentials Step by Step setup and using WordPress https://t.co/opLDZEw0QB #webdevelopment
WordPress essentials Step by Step setup and using WordPress https://t.co/opLDZEw0QB #webdevelopment
— Web Dev Pro (@Web_improve) September 25, 2016
from Twitter https://twitter.com/Web_improve
WordPress for Beginners – Build a Pro Website in 90 minutes https://t.co/eQo9gc6bbZ #webdesign
WordPress for Beginners – Build a Pro Website in 90 minutes https://t.co/eQo9gc6bbZ #webdesign
— Web Dev Pro (@Web_improve) September 25, 2016
from Twitter https://twitter.com/Web_improve
Complete WordPress Theme Developer Course https://t.co/wCarpxcers #webdevelopment
Complete WordPress Theme Developer Course https://t.co/wCarpxcers #webdevelopment
— Web Dev Pro (@Web_improve) September 25, 2016
from Twitter https://twitter.com/Web_improve
Building Cross Platform Apps with Xamarin and C# https://t.co/2J3ZmEQwLW #programming
Building Cross Platform Apps with Xamarin and C# https://t.co/2J3ZmEQwLW #programming
— Web Dev Pro (@Web_improve) September 25, 2016
from Twitter https://twitter.com/Web_improve
JavaScript Landscape for Java Developer #JavaScriptWorld #JavaScript #JavaDeveloper ☞ https://t.co/GEPlrb8D7x https://t.co/fENU5HSOJ6
JavaScript Landscape for Java Developer #JavaScriptWorld #JavaScript #JavaDeveloper
— Web Dev Pro (@Web_improve) September 25, 2016
☞ https://t.co/GEPlrb8D7x http://pic.twitter.com/fENU5HSOJ6
from Twitter https://twitter.com/Web_improve
Architecting Ember.js in Production 2015 Tutorial #JavaScriptWorld #Emberjs #Javascript ☞ https://t.co/op8mjQ31Z0 https://t.co/51hGLEjD5T
Architecting Ember.js in Production 2015 Tutorial #JavaScriptWorld #Emberjs #Javascript
— Web Dev Pro (@Web_improve) September 25, 2016
☞ https://t.co/op8mjQ31Z0 http://pic.twitter.com/51hGLEjD5T
from Twitter https://twitter.com/Web_improve
Building XQuery Apps with the MarkLogic NoSQL Database https://t.co/WIIvP81UL3 #programming
Building XQuery Apps with the MarkLogic NoSQL Database https://t.co/WIIvP81UL3 #programming
— Web Dev Pro (@Web_improve) September 25, 2016
from Twitter https://twitter.com/Web_improve
Saturday, September 24, 2016
Build Your Own $5000 WordPress Website For About Fifty Bucks https://t.co/JWAQPawSaP #webdesign
Build Your Own $5000 WordPress Website For About Fifty Bucks https://t.co/JWAQPawSaP #webdesign
— Web Dev Pro (@Web_improve) September 25, 2016
from Twitter https://twitter.com/Web_improve
Bootstrap :basics for beginners https://t.co/fxT5rZvGQm #programming
Bootstrap :basics for beginners https://t.co/fxT5rZvGQm #programming
— Web Dev Pro (@Web_improve) September 24, 2016
from Twitter https://twitter.com/Web_improve
Maven Tutorial – Manage Java Dependencies in 20 Steps https://t.co/UabWkm7TN8 #programming
Maven Tutorial – Manage Java Dependencies in 20 Steps https://t.co/UabWkm7TN8 #programming
— Web Dev Pro (@Web_improve) September 24, 2016
from Twitter https://twitter.com/Web_improve
AngularJs :basics for beginners https://t.co/18SUgEdrZy #webdevelopment
AngularJs :basics for beginners https://t.co/18SUgEdrZy #webdevelopment
— Web Dev Pro (@Web_improve) September 24, 2016
from Twitter https://twitter.com/Web_improve
Multipurpose UI Bundle of 230+ components, 18 Full Templates - $19! https://t.co/kLa9Xgp5rB #developerdeals
Multipurpose UI Bundle of 230+ components, 18 Full Templates - $19! https://t.co/kLa9Xgp5rB #developerdeals
— Web Dev Pro (@Web_improve) September 24, 2016
from Twitter https://twitter.com/Web_improve
Friday, September 23, 2016
1 Year Unlimited Access to 1300+ Premium Fonts - only $27! https://t.co/km2cHnVolV #developerdeals
1 Year Unlimited Access to 1300+ Premium Fonts - only $27! https://t.co/km2cHnVolV #developerdeals
— Web Dev Pro (@Web_improve) September 24, 2016
from Twitter https://twitter.com/Web_improve
Java EE Made Easy – Patterns, Architecture and Frameworks https://t.co/uFWbOHAt55 #programming
Java EE Made Easy – Patterns, Architecture and Frameworks https://t.co/uFWbOHAt55 #programming
— Web Dev Pro (@Web_improve) September 24, 2016
from Twitter https://twitter.com/Web_improve
Learn Matlab Programming by Examples (Codes Included) https://t.co/drf6ejyvsa #programming
Learn Matlab Programming by Examples (Codes Included) https://t.co/drf6ejyvsa #programming
— Web Dev Pro (@Web_improve) September 24, 2016
from Twitter https://twitter.com/Web_improve
Coding Made Easy: A Beginners Guide To JavaScript https://t.co/tct9ne3jDI #webdevelopment
Coding Made Easy: A Beginners Guide To JavaScript https://t.co/tct9ne3jDI #webdevelopment
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
AngularJS Tutorial for Beginners #JavaScriptWorld #AngularJS #Programming ☞ https://t.co/wXNw4YKHxl https://t.co/Rm3fLyaVz0
AngularJS Tutorial for Beginners #JavaScriptWorld #AngularJS #Programming
— Web Dev Pro (@Web_improve) September 23, 2016
☞ https://t.co/wXNw4YKHxl http://pic.twitter.com/Rm3fLyaVz0
from Twitter https://twitter.com/Web_improve
C++ Basics – As Soon As Possible https://t.co/3uoXX7YgG4 #programming
C++ Basics – As Soon As Possible https://t.co/3uoXX7YgG4 #programming
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Blog: Handy Sgnl watchband turns your fingers into a phone: Kickstarter that transmits cal… https://t.co/jw1GoOQbOR
#webdevelop #webdesigns Blog: Handy Sgnl watchband turns your fingers into a phone: Kickstarter that transmits cal… https://t.co/jw1GoOQbOR
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Handy Sgnl watchband turns your fingers into a phone: Feel like James Bond next time you t… https://t.co/LFlLRCMVKo
#webdevelop #webdesigns Handy Sgnl watchband turns your fingers into a phone: Feel like James Bond next time you t… https://t.co/LFlLRCMVKo
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
#code #HTML5 #webdesigns #css #ruby Instant Message Reaction: 500M Yahoo Accounts Breached and We’re Not Happy Abo… https://t.co/qTR5D04U3f
#code #HTML5 #webdesigns #css #ruby Instant Message Reaction: 500M Yahoo Accounts Breached and We’re Not Happy Abo… https://t.co/qTR5D04U3f
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
C :basics for beginners https://t.co/ASQxK7Y6QQ #programming
C :basics for beginners https://t.co/ASQxK7Y6QQ #programming
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
Java Servlets and JSP – Build Java EE (JEE) App in 25 Steps https://t.co/7rwJQUVkDj #programming
Java Servlets and JSP – Build Java EE (JEE) App in 25 Steps https://t.co/7rwJQUVkDj #programming
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
Superb Fonts Bundle of 7 Script & Display Typefaces - only $7! https://t.co/VgqSy4lNUj #developerdeals
Superb Fonts Bundle of 7 Script & Display Typefaces - only $7! https://t.co/VgqSy4lNUj #developerdeals
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
Thursday, September 22, 2016
How to Create Your Own Website with WordPress https://t.co/jdCFRtTjrR #webdesign
How to Create Your Own Website with WordPress https://t.co/jdCFRtTjrR #webdesign
— Web Dev Pro (@Web_improve) September 23, 2016
from Twitter https://twitter.com/Web_improve
Ultimate Angular 2 Developer with Bootstrap 4 & TypeScript https://t.co/QsmMuJS9KN #webdevelopment
Ultimate Angular 2 Developer with Bootstrap 4 & TypeScript https://t.co/QsmMuJS9KN #webdevelopment
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
#html5 #css3 Frozen in time: Fascinating 360-degree tour of the eerie Cypriot airport that was abandoned almost 40… https://t.co/mxwaFw3t2i
#html5 #css3 Frozen in time: Fascinating 360-degree tour of the eerie Cypriot airport that was abandoned almost 40… https://t.co/mxwaFw3t2i
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
Learn HTML CSS creating a single page website https://t.co/F1OPBBQNAr #programming
Learn HTML CSS creating a single page website https://t.co/F1OPBBQNAr #programming
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Blog: Websites that make you go wow: CUBERTO: A simple one-colour screen is enhanced with … https://t.co/2X5P8Ub2P6
#webdevelop #webdesigns Blog: Websites that make you go wow: CUBERTO: A simple one-colour screen is enhanced with … https://t.co/2X5P8Ub2P6
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Blog: Websites that make you go wow: CUBERTO: A simple one-colour screen is enhanced with … https://t.co/GsN7sbsKBP
#webdevelop #webdesigns Blog: Websites that make you go wow: CUBERTO: A simple one-colour screen is enhanced with … https://t.co/GsN7sbsKBP
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
C# in 3 Hours: C# Programming Tutorial for Beginners https://t.co/TAmP4MThyw #programming
C# in 3 Hours: C# Programming Tutorial for Beginners https://t.co/TAmP4MThyw #programming
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
Exploring Devise, Part 1
In some of my previous articles about image uploading in Rails, I made mention of Devise but did not go deep into it. In this tutorial, I will be teaching you about Devise.
Ready? Let's get started!
Devise Introduction and Modules
Devise is an authentication solution for Rails built with Warden and provided by the awesome people at Plataformatec. Devise provides different modules:
- Database Authenticatable: This encrypts and stores a password to the database to validate the authenticity of a user while signing in.
- Omniauthable: This attaches OmniAuth support to Devise. Users of your application will be able to sign in using accounts such as Facebook, Twitter, and Google.
- Confirmable: This enables the sending of emails with instructions that will help in the verification of an account.
- Recoverable: This module helps in times when users forget their password and need to recover it. With this, the user will be able to reset the password.
- Registerable: This handles the signup of users. It also allows users to edit and delete their accounts.
- Rememberable: This module makes it possible for your application to remember a logged-in user by storing a cookie.
- Trackable: This module helps track sign-in count, timestamps, and IP address.
- Timeoutable: This module is responsible for expiring a session that has not been active for a period of time.
- Validatable: With this module, email and password get to be validated.
- Lockable: This provides an extra layer of security—when activated, an account can be locked after a given number of failed sign-in attempts.
Devise Integration
For the purpose of this tutorial, we are going to generate a Rails application that we'll use to check out the workings of Devise. Let's proceed!
rails new devise-app -T
The -T
flag tells Rails to generate the application without the default test suite. Navigate to your application directory and drop the following gems into your Gemfile
.
#Gemfile gem 'devise', '~> 4.1' gem 'bootstrap-sass', '~> 3.3'
Now install the Devise and Bootstrap gems you just added.
bundle install
Rename your app/assets/stylesheets/application.css
file to app/assets/stylesheets/application.scss
and add the following lines in it:
#app/assets/stylesheets/application.scss @import "bootstrap-sprockets"; @import "bootstrap";
Open up the app/assets/javascripts/application.js
file and require bootstrap-sprockets
. Mine looks like this:
#app/assets/javascripts/application.js //= require jquery //= require bootstrap-sprockets //= require jquery_ujs //= require turbolinks //= require_tree .
Next, you need to run the Rails command to install the configuration files for Devise. You do so by running this command:
rails generate devise:install
The command generates the following on your terminal. You should read it to understand what happened.
create config/initializers/devise.rb create config/locales/devise.en.yml =============================================================================== Some setup you must do manually if you haven't yet: 1. Ensure you have defined default url options in your environments files. Here is an example of default_url_options appropriate for a development environment in config/environments/development.rb: config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } In production, :host should be set to the actual host of your application. 2. Ensure you have defined root_url to *something* in your config/routes.rb. For example: root to: "home#index" 3. Ensure you have flash messages in app/views/layouts/application.html.erb. For example: <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> 4. If you are deploying on Heroku with Rails 3.2 only, you may want to set: config.assets.initialize_on_precompile = false On config/application.rb forcing your application to not access the DB or load models when precompiling your assets. 5. You can copy Devise views (for customization) to your app by running: rails g devise:views ===============================================================================
The command also generates two files, which you can find in the config
directory. It also gives us some instructions on what we should do.
Navigate to your application layout, app/views/layouts/application.html.erb
, and make it look like what I have below:
#app/views/layouts/application.html.erb <!DOCTYPE html> <html> <head> <title>DeviseApp</title> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> <%= csrf_meta_tags %> </head> <body> <div class="container-fluid"> <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> </div> <div class="container-fluid"> <%= yield %> </div> </body> </html>
You need to define the default URL options for your development environment. Add the code below in config/environments/development.rb
.
#config/environments/development.rb config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
Now you need to create a User
model for Devise. You can do so using your terminal.
rails generate devise User
This will generate a user.rb
file in your app/models
directory. The file generated will look like this:
class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end
You can see that it contains the default modules I mentioned above. The command you ran also modified your config/routes.rb
file by adding a route for devise. You should check that out.
At this point, you need to migrate your database. You do so by running:
rake db:migrate
Authentication Using Devise
Now you need to create a PagesController
and wrap Devise authentication around it—this will prevent unauthorized persons from seeing the page.
rails generate controller Pages index
Open up your routes file and set the root of your application.
#config/routes.rb Rails.application.routes.draw do devise_for :users root to: "pages#index" end
Open up your PagesController
and add authentication for your index
and new
pages.
#app/controllers/pages_controller.rb class PagesController < ApplicationController before_action :authenticate_user!, only: [:index, :new] def index end def new end end
The code shows that the index
and new
pages are accessible only to registered users. Open up your terminal and start your rails server
. Point your browser to http://localhost:3000
and you will automatically be redirected to the Devise sign-in page.
Signing in Without Using Email
The default means of signing into Devise involves the use of email address and password. What if you want to enable users to sign in with their unique username? If that is what you want, it is possible. Let's see how.
Run the command:
rails generate migration AddUsernameToUSers username:string
This will add a new column for username
in your users
table. Migrate your database.
rake db:migrate
You need to add a field to your views where your users can enter their username. When you go to your app/views
directory, you will not find any file that renders the Devise views. This is because Devise loads the views from its gemset. To customize it, you have to generate copies of the views. The command below does the magic.
rails generate devise:views
This will generate some folders and files in your app/views
directory.
You will need to edit the page for signing in, signing up, and updating user information. Just paste the blocks of code below into their respective files.
Sign-Up
#app/views/devise/registrations/new.html.erb <h2>Sign up</h2> <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> <%= devise_error_messages! %> <div class="form-group"> <%= f.label :email %><br /> <%= f.email_field :email, autofocus: true, class: "form-control" %> </div> <div class="form-group"> <%= f.label :username %> <%= f.text_field :username, class: "form-control" %> </div> <div class="form-group"> <%= f.label :password %> <% if @minimum_password_length %> <em>(<%= @minimum_password_length %> characters minimum)</em> <% end %><br /> <%= f.password_field :password, autocomplete: "off", class: "form-control" %> </div> <div class="form-group"> <%= f.label :password_confirmation %><br /> <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %> </div> <div class="actions"> <%= f.submit "Sign up", class: "btn btn-primary" %> </div> <% end %> <%= render "devise/shared/links" %>
Edit
#app/views/devise/registrations/edit.html.erb <h2>Edit <%= resource_name.to_s.humanize %></h2> <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> <%= devise_error_messages! %> <div class="form-group"> <%= f.label :email %><br /> <%= f.email_field :email, autofocus: true, class: "form-control" %> </div> <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div> <% end %> <div class="form-group"> <%= f.label :username %> <%= f.text_field :username, class: "form-control" %> </div> <div class="form-group"> <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br /> <%= f.password_field :password, autocomplete: "off", class: "form-control" %> </div> <div class="form-group"> <%= f.label :password_confirmation %><br /> <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %> </div> <div class="form-group"> <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br /> <%= f.password_field :current_password, autocomplete: "off", class: "form-control" %> </div> <div class="actions"> <%= f.submit "Update", class: "btn btn-primary" %> </div> <% end %> <h3>Cancel my account</h3> <p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p> <%= link_to "Back", :back %>
Sign-In
#app/views/devise/sessions/new.html.erb <h2>Log in</h2> <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> <div class="form-group"> <%= f.label :username %><br /> <%= f.text_field :username, autofocus: true, class: "form-control" %> </div> <div class="form-group"> <%= f.label :password %><br /> <%= f.password_field :password, autocomplete: "off", class: "form-control" %> </div> <% if devise_mapping.rememberable? -%> <div class="form-group"> <%= f.check_box :remember_me %> <%= f.label :remember_me %> </div> <% end -%> <div class="actions"> <%= f.submit "Log in", class: "btn btn-primary" %> </div> <% end %> <%= render "devise/shared/links" %>
Using your text editor, navigate to app/controllers/application_controller.rb
. You need to modify it to permit the use of username. Modify it to look like this:
#app/controllers/application_controller.rb class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters added_attrs = [:username, :email, :password, :password_confirmation, :remember_me] devise_parameter_sanitizer.permit :sign_up, keys: added_attrs devise_parameter_sanitizer.permit :account_update, keys: added_attrs end end
Now a user can sign in with his/her username. At this point there is something not right about your application. When a user signs in, there is no way of signing out. This does not result in a great user experience. I'll show you how to fix that.
From your terminal, create a new directory called shared
in your app/views
folder.
mkdir app/views/shared touch app/views/shared/_navigation.html.erb
The file you created above is a partial where the code for your navigation bar will be written. Drop in the following code.
#app/views/shared/_navigation.html.erb <nav class="navbar navbar-inverse"> <div class="container"> <div class="navbar-header"> <%= link_to 'Tutsplus Devise', root_path, class: 'navbar-brand' %> </div> <div id="navbar"> <ul class="nav navbar-nav"> <li><%= link_to 'Home', root_path %></li> </ul> <ul class="nav navbar-nav pull-right"> <% if user_signed_in? %> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <%= current_user.name %> <span class="caret"></span> </a> <ul class="dropdown-menu" role="menu"> <li><%= link_to 'Profile', edit_user_registration_path %></li> <li><%= link_to 'Log out', destroy_user_session_path, method: :delete %></li> </ul> </li> <% else %> <li><%= link_to 'Log In', new_user_session_path %></li> <li><%= link_to 'Sign Up', new_user_registration_path %></li> <% end %> </ul> </div> </div> </nav>
Now you need to render the navigation bar in your application layout. Open up app/views/layouts/application.html.erb
and drop in the code to render your navigation bar.
#app/views/layouts/application.html.erb ... <div class="container-fluid"> <%= render "shared/navigation" %> <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> </div> ...
Conclusion
In this part you learned how to install Devise and add authentication to your pages. I also made mention of a partial. I will cover that in a separate tutorial.
In the next part, we will cover some areas more advanced than this. I hope this was worth your time!
Create Web Apps with Meteor & React https://t.co/MnqCWlNG6H #webdevelopment
Create Web Apps with Meteor & React https://t.co/MnqCWlNG6H #webdevelopment
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
CSS Grid Layout: Fluid Columns and Better Gutters
In this tutorial we’re going to take the grid from our previous tutorial and use it as a playground to explore different units of measurement and Grid’s properties.
Flexible Units
The whole point of Grid is to enable us to properly control layout on the web, so let’s make our static grid fluid before we go any further. If you recall, we were defining our grid with static pixel measurements:
grid-template-columns: 150px 20px 150px 20px 150px; grid-template-rows: auto 20px auto 20px auto;
It’s quite possible to use other units here too, such as ems, or rems for example. Or even more unusual units like vh and vmin.
In this case we’re going to change our pixel units for percentages. As we’re defining our column widths and our gutter widths manually we have to make sure the total values equal 100%:
grid-template-columns: 30% 5% 30% 5% 30%;
Mind the Gap
There does exist a newer, more efficient way to declare gutter measurements, and that’s with a purpose-made property. We can use grid-column-gap
and grid-row-gap
, or the shorthand grid-gap
property instead.
Using this means we no longer need to include grid tracks to accommodate our gutters, we only need to declare the columns and rows, so in our case that means three of each:
grid-template-columns: 33.33% 33.33% 33.33%; grid-template-rows: auto auto auto;
Hmm, that’s a bit messy, but it sort of does the job. The difference you’ll notice is that the column widths now add up to 100%; our gutters will actually be subtracted from them automatically.
Repeat
Let’s write this is a neater way, using the repeat()
function:
grid-template-columns: repeat(3, 33.33%);
This states “repeat 33.33% three times” giving us three columns. And we don’t even need the grid-template-rows
declaration because the auto
value is assigned as default anyway. Now we just need to state how big we want our gutters:
grid-template-columns: repeat(3, 33.33%); grid-gap: 20px;
grid-gap
will accept fixed or flexible units, which means we can perfectly combine fluid columns and fixed gutters without any complex calculations on our part.
Resetting Our grid-column
and grid-row
Values
Something is amiss: we still have a load of grid-column
and grid-row
declarations on our grid items, but they’re all wrong because we no longer have as many grid tracks. Happily, because we’re using grid-gap
to define our gutters, we can leave positioning of the items to automatic placement–items will no longer fall into the gutters. For now, remove all the positioning:
The fr Unit
One final improvement can be made to our simple grid; we’re going to introduce the fr, or fraction unit. A single fr unit describes “one piece of however many pieces we’re splitting this into”. For example, we could declare our columns using:
grid-template-columns: 1fr 1fr 1fr;
Here there’s a total of three fr units, so each column would be one third wide. Here’s another example:
grid-template-columns: 2fr 1fr 1fr
Now there’s a total of four fr units, so the first column would take up half the available width, with the other two columns each taking a quarter.
These units are really powerful, especially in combination with other units of measurement:
grid-template-columns: 300px 1fr 3fr 20%;
Here we’ve declared four columns:
- the first is fixed at 300px wide
- the last is a flexible 20% of the grid container element wide
- then the fr units are calculated, leaving the second column with one piece of the remaining space
- and the third with three pieces.
It looks like this, perfectly highlighting auto-placement as our nine items shift to fill the gaps:
But back to our original grid. Let’s replace the clumsy and inaccurate 33.33% value with 1fr:
grid-template-columns: repeat(3, 1fr);
Finished pen:
Conclusion
So, to recap:
- Grid will accept flexible units in combination with fixed units of measurements.
- We needn’t declare gutters within our
grid-template
, we can use thegrid-gap
properties instead. grid-gap
means we are less bound to positioning our grid items–we can hand more responsibility over to auto-placement.- The
repeat()
function will save us time and keep our stylesheets maintainable. - The fr, or fraction unit is a very powerful way of describing grid templates.
We’ve come a long way in just two tutorials, but you’re now the proud owner of a very neat and concise grid! In the next tutorial we’ll explore grid areas, taking a look at the span
keyword and some practical layouts.
Useful Resources
- The
<fraction>
type andfr
unit on W3C - Again, follow @rachelandrew
Python and Ruby programming Complete step-by-step Tutorial https://t.co/N1ixi0vRCQ #programming
Python and Ruby programming Complete step-by-step Tutorial https://t.co/N1ixi0vRCQ #programming
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Blog: Shoot fireballs from your wrist with Pyro Mini: This wearable flamethrower can shoot… https://t.co/Y7thyRfnVl
#webdevelop #webdesigns Blog: Shoot fireballs from your wrist with Pyro Mini: This wearable flamethrower can shoot… https://t.co/Y7thyRfnVl
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Win an Astell & Kern AK70: Spotfiy is great and all, but more often than not streaming mus… https://t.co/jkvOK24C3n
#webdevelop #webdesigns Win an Astell & Kern AK70: Spotfiy is great and all, but more often than not streaming mus… https://t.co/jkvOK24C3n
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
Java Interview Guide : 200+ Interview Questions and Answers https://t.co/b8lyxFXe9j #programming
Java Interview Guide : 200+ Interview Questions and Answers https://t.co/b8lyxFXe9j #programming
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
Wednesday, September 21, 2016
jQuery Fundamentals Powerful Bootcamp for beginners https://t.co/58f7nc2flf #webdevelopment
jQuery Fundamentals Powerful Bootcamp for beginners https://t.co/58f7nc2flf #webdevelopment
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
Zero to Hero with jQuery - Tutorial #JavaScriptWorld #jQuery #Code #Programming ☞https://t.co/9lABO85rIq https://t.co/HAqD1dMztd
Zero to Hero with jQuery - Tutorial #JavaScriptWorld #jQuery #Code #Programming
— Web Dev Pro (@Web_improve) September 22, 2016
☞https://t.co/9lABO85rIq http://pic.twitter.com/HAqD1dMztd
from Twitter https://twitter.com/Web_improve
jQuery Fundamentals Powerful Bootcamp for beginners https://t.co/58f7ncjQcN #webdevelopment
jQuery Fundamentals Powerful Bootcamp for beginners https://t.co/58f7ncjQcN #webdevelopment
— Web Dev Pro (@Web_improve) September 22, 2016
from Twitter https://twitter.com/Web_improve
Practical CSS Website Development: Crash Course https://t.co/7ERGOxM2uk #webdevelopment
Practical CSS Website Development: Crash Course https://t.co/7ERGOxM2uk #webdevelopment
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Blog: Multitalented Tools: Hack all areas of your life with the latest multitools. https://t.co/10URmFwdFc
#webdevelop #webdesigns Blog: Multitalented Tools: Hack all areas of your life with the latest multitools. https://t.co/10URmFwdFc
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
Practical CSS Website Development: Crash Course https://t.co/7ERGOy3DSU #webdevelopment
Practical CSS Website Development: Crash Course https://t.co/7ERGOy3DSU #webdevelopment
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns Fresher Tech: Uni Gear Guide 2016: Acer Chromebook 14 Unlike college and secondary schoo… https://t.co/1hfI3HavNJ
#webdevelop #webdesigns Fresher Tech: Uni Gear Guide 2016: Acer Chromebook 14
— Web Dev Pro (@Web_improve) September 21, 2016
Unlike college and secondary schoo… https://t.co/1hfI3HavNJ
from Twitter https://twitter.com/Web_improve
Interaction Design Specialist For Web Developers https://t.co/NZ1FST65yS #webdevelopment
Interaction Design Specialist For Web Developers https://t.co/NZ1FST65yS #webdevelopment
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
WordPress Development For Beginners https://t.co/kiq8x12hz3 #webdevelopment
WordPress Development For Beginners https://t.co/kiq8x12hz3 #webdevelopment
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
Bootstrap 4.0 New Features: Build Responsive Website https://t.co/H44F5cVOjn #webdevelopment
Bootstrap 4.0 New Features: Build Responsive Website https://t.co/H44F5cVOjn #webdevelopment
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
CodeIgniter Framework (Compatible with Version 3 & above) https://t.co/UJZxKYymAn #programming
CodeIgniter Framework (Compatible with Version 3 & above) https://t.co/UJZxKYymAn #programming
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
12,000+ Professional Icons in the iconapp.io Forever Plan - only $47! https://t.co/1TV6paPbNe #developerdeals
12,000+ Professional Icons in the iconapp.io Forever Plan - only $47! https://t.co/1TV6paPbNe #developerdeals
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
Tuesday, September 20, 2016
Developing Universal Windows Apps with HTML and JavaScript #JavaScriptWorld #windowsapps #html #Javascript ☞… https://t.co/Ckth997xcF
Developing Universal Windows Apps with HTML and JavaScript #JavaScriptWorld #windowsapps #html #Javascript
— Web Dev Pro (@Web_improve) September 21, 2016
☞ https://t.co/hMUh2OSvBa http://pic.twitter.com/Sy6sxnbeUM
from Twitter https://twitter.com/Web_improve
Multithreading, Java Generics, Collections & More (4 in 1) https://t.co/rcREi6BZHp #programming
Multithreading, Java Generics, Collections & More (4 in 1) https://t.co/rcREi6BZHp #programming
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
A Complete Java Tutorial Course for Beginners https://t.co/1i5wGnX1sV #programming
A Complete Java Tutorial Course for Beginners https://t.co/1i5wGnX1sV #programming
— Web Dev Pro (@Web_improve) September 21, 2016
from Twitter https://twitter.com/Web_improve
Rediscovering JavaScript #JavaScriptWorld #JavaScript #java #code #programming #webdev #webdevelopment ☞… https://t.co/ADha2WXPdS
Rediscovering JavaScript #JavaScriptWorld #JavaScript #java #code #programming #webdev #webdevelopment
— Web Dev Pro (@Web_improve) September 20, 2016
☞ https://t.co/PsYU95HFVp http://pic.twitter.com/GxErAU0iHS
from Twitter https://twitter.com/Web_improve
C programming, Golden step to become software developer https://t.co/UuwTYNFxsH #programming
C programming, Golden step to become software developer https://t.co/UuwTYNFxsH #programming
— Web Dev Pro (@Web_improve) September 20, 2016
from Twitter https://twitter.com/Web_improve
JSP (Java server pages), Servlet & JSTL tutorial https://t.co/F67K2AH3lk #programming
JSP (Java server pages), Servlet & JSTL tutorial https://t.co/F67K2AH3lk #programming
— Web Dev Pro (@Web_improve) September 20, 2016
from Twitter https://twitter.com/Web_improve
The Complete Web Developer Course with Rails Online Training Program https://t.co/ageFLtyunk #webdevelopment
The Complete Web Developer Course with Rails Online Training Program https://t.co/ageFLtyunk #webdevelopment
— Web Dev Pro (@Web_improve) September 20, 2016
from Twitter https://twitter.com/Web_improve
#webdevelop #webdesigns RT IA_UXJOBS: #uxjobs (Bay Area) Senior Product Designer - Workbridge Associates - San Fra… https://t.co/Q8x8nPd5ki
#webdevelop #webdesigns RT IA_UXJOBS: #uxjobs (Bay Area) Senior Product Designer - Workbridge Associates - San Fra… https://t.co/Q8x8nPd5ki
— Web Dev Pro (@Web_improve) September 20, 2016
from Twitter https://twitter.com/Web_improve