Javascript News

Syndicate content
Pipes Output
Updated: 16 hours 16 min ago

What to Expect from Yii 2.0

Sa, 2014-09-20 16:00

Yii 2.0 was released into beta last April and the goal for a first stable release was set for the middle of 2014. The GitHub issue list has 300 open issues and 2913 closed while I’m writing this and both numbers are still increasing. The progress to the 2.0RC milestone was at 99%. My guess is that the team is close, but we’ll probably have to wait just a little bit longer. While we’re all waiting, lets take a look at what we can expect by looking at an already available example.

A tiny bit of history

The first version of Yii became popular quite fast after it was released in 2008. It’s founder, Qiang Xue, previously worked on the Prado framework and used experience and feedback from that to build Yii.

Yii uses many ideas from other frameworks, languages and libraries: Prado, Ruby, jQuery, Symfony and Joomla are all acknowledged as sources of inspiration.

The first commits for Yii 2.0 date back to 2011 but the development picked up last year. The team did a rewrite with an aim to become the state of the art new generation PHP framework. It adopts the latest technologies and features, such as Composer, PSR, namespaces, traits, and more.

Something worth mentioning is that according to the download page Yii version 1.1 support will end on December 31, 2015, so we do get some time to start thinking about making the transition.


Continue reading %What to Expect from Yii 2.0%

How to Protect Yourself from Rogue WordPress Plugins

Fr, 2014-09-19 19:00

Before installing software on your computer, you would probably do a bit of research on the software before loading it on your system. Since the traditional software world has a handful of established vendors, vetting out bad software is relatively easy.

WordPress plugins are often a little more difficult to screen because traditional antivirus programs can't detect web exploits. Instead users are often forced to rely on their gut or sparse comments on the web to figure out if code is safe to use.

The best option to ensure the security of WordPress plugins you use is to audit the code by hand. For most people, this time commitment is a bit excessive. By following a couple of common sense measures, you can protect yourself from many malicious WordPress plugins.

Using Security Scanners

Although most security threats can't be controlled with automated tools, using a quality web security scanner is a great way to compliment common sense security measures. Sitepoint mentioned a few security plugins in their article on managed WordPress Hosting pros and cons which are worth looking at. In particular Wordfence and Sucuri SiteCheck are both solid tools which can help you spot malware which isn't visible to the average user.

Going Beyond Reviews

While the WordPress Codex and many WordPress Plugin sites offer user reviews, this feature isn't reliable for a couple of reasons.

The first reason is that reviews on the WordPress Codex are often sparse and the reviews often only have star ratings rather than actual user comments. Additionally, reviews on company websites aren't trustworthy because the developer has ample opportunity to manipulate the ratings.

If you are looking for credible reviews, then you should check out independent plugin marketplaces such as Envato Market or BinPress as they are the vendors which stand out. Just make sure you pay attention to user comments which detail why they gave a product the rating they did.

Aside from relying on reviews, have a look at the plugin website and look at the support forums to get an idea of the attentiveness of the developer and quality of their code. Look to see if they have a professional support ticket system, and also try contacting the developer if you have concerns about their offering.

You also should try Googling the developer's information to see if they have a negative reputation across the Internet.

While these steps aren't foolproof, they are much better than making a blind purchase.

Continue reading %How to Protect Yourself from Rogue WordPress Plugins%

An Introduction to HTML Imports (Tutorial)

Fr, 2014-09-19 18:00

HTML Imports are a way to include external HTML documents and web components on a page without making an Ajax request or loading an iframe. Because of this capability, HTML Imports may lead to better page load times, new opportunities to reuse code, and easier integrations with some popular services like Google Maps.

At the time of writing, the HTML Imports technology is a W3C working draft, meaning that it is not yet a web standard and is not yet supported in all browsers. HTML Imports, however, can be used safely on a web page today with a polyfill like the one in Polymer.

HTML Imports for Reuse, Syndication

Philosophically, software developers, including web developers, are taught not to repeat themselves, but rather to organize code in models, objects, functions, or similar so that there is a single point of truth and an easy way to reuse components. Thanks to developers Dave Thomas and Andrew Hunt, this approach is generally called DRY development or DRY programming, meaning “don’t repeat yourself.”

In a way, HTML Imports support DRY development. Here is an example. Imagine that you have three messages that are repeated on several web pages, perhaps even web pages on different domains. Rather than copying and pasting or retyping these messages for each page or project, they could be included using the HTML Imports feature.

Here is the HTML for a file called messages.html:

[code language="html"] Success

Whatever you just did worked.


What a disappointment.

You are amazing. [/code]

To reuse the content from messages.html, first include the document via HTML Imports. This amounts to adding a <link> element with its rel attribute set to “import” and its href pointed at messages.html, like this:

[code language="html"] [/code]

We can write a short bit of JavaScript that accesses the imported messages.html document and loads the “success” message on the page. Each of the other messages could also be loaded in the same way or all together depending on how one wanted to use them. Here’s the code:

[code language="javascript"] var htmlImport = document.querySelector('link[rel="import"]'); var htmlDoc = htmlImport.import; var htmlMessage = htmlDoc.querySelector('.message-success'); document.body.appendChild(htmlMessage.cloneNode(true)); [/code]

The script completes four tasks:

  • Selecting the link element
  • Importing the external HTML document
  • Selecting a section (node) of the imported DOM
  • Adding a duplicate of the selected node to the current page

Just like that, the success message is now included on the page, similar to how an Ajax request works.

Continue reading %An Introduction to HTML Imports (Tutorial)%

On Our Radar This Week: Polymer, Patterns and Programmers

Fr, 2014-09-19 17:00

Welcome to On Our Radar, a weekly round-up of news, trends and other cool stuff from the world of web development.

This week saw the release of iOS 8, which arrived sporting a plethora of new features. Here's a (very) thorough review of Apple's latest mobile operating system, here's the TL;DR version and here are some of the best features you may not know about.

Not content with self-driving cars, balloon-carried internet, or curing death, Larry Page is now apparently planning a Google 2.0 that will build cities and airports.

Also in the news, Amazon unveiled six new tablets and e-readers, Intel unveiled its new dual-screen laptop and Microsoft bought Mojang (the company that created Minecraft) for a cool $2.5 billion.

It’s Time for HTML5

HTML5 has been gaining momentum as of late. This week it achieved Proposed Recommendation status with the W3C and also got shown some love by Apple, as it became apparent that new iOS 8 features will further its development.

HTML5 introduced a number of new tags which help us to write more semantic markup. Here's a guide to using the new <time> element correctly. And why stop there? You can also use the date input to create a datepicker, something that was previously only achievable with JavaScript.

Continue reading %On Our Radar This Week: Polymer, Patterns and Programmers%

3 Old and Outdated UX Patterns (And How to Fix Them)

Fr, 2014-09-19 16:34

In one of my recent articles, The Evolution of the Hamburger icon we talked about the history of this commonly-used pattern, and about who’s using it and why. In fact, there have been many recent discussions in UX circles that have raised the unintuitive nature of the hamburger icon and issues in several cases. In […]

Continue reading %3 Old and Outdated UX Patterns (And How to Fix Them)%

PhpStorm 8 Released – See What’s New and Grab a Free License

Fr, 2014-09-19 16:00

This week marks the release of PhpStorm 8. It’s no secret PhpStorm has been a long personal favorite of mine after having won me over from Zend Studio, Netbeans and Sublime Text, and we’ve covered the tool extensively before, most notably with the shortcuts guide by yours truly. By following the EAPs, we also taken a look at the new features in PhpStorm 8 before it even came out. Now that the day has finally come, let’s see what else is included, and finish up with a giveaway of free licenses.

Continue reading %PhpStorm 8 Released – See What’s New and Grab a Free License%

Testing Page Objects with SitePrism

Fr, 2014-09-19 14:00

In this article, I am going to talk about SitePrism, a testing tool that I have recently learned about and been enjoying. Here is a description of SitePrism from its' creators:

SitePrism gives you a simple, clean and semantic DSL for describing your site using the Page Object Model pattern, for use with Capybara in automated acceptance testing.

Before we go into SitePrism, let's talk about page objects, because page objects are central to understanding the philosophy behind SitePrism.

Continue reading %Testing Page Objects with SitePrism%

5 Typical JavaScript Interview Exercises

Do, 2014-09-18 18:00

JavaScript developers are in high demand in the IT world. If this is the role that best expresses your knowledge, you have a lot of opportunities to change the company you work for and increase your salary. But before you are hired by a company, you have to demonstrate your skills in order to pass the interview process. In this article I'll show you 5 typical questions asked for a front end job to test the JavaScript skills of the candidate and their relative solutions. It'll be fun! Question 1: Scope Consider the following code: [js] (function() { var a = b = 5; })(); console.log(b); [/js] What will be printed on the console? Answer The code above prints 5. The trick of this question is that in the IIFE there are two assignments but the variable a is declared using the keyword var. What this means is that a is a local variable of the function. On the contrary, b is assigned to the global scope. The other trick of this question is that it doesn't use strict mode ('use strict';) inside the function. If strict mode was enabled, the code would raise the error Uncaught ReferenceError: b is not defined. Remember that strict mode requires you to explicitly reference to the global scope if this was the intended behavior. So, you should write: [js] (function() { 'use strict'; var a = window.b = 5; })(); console.log(b); [/js] Question 2: Create "native" methods Define a repeatify function on the String object. The function accepts an integer that specifies how many times the string has to be repeated. The function returns the string repeated the number of times specified. For example: [js] console.log('hello'.repeatify(3)); [/js] Should print hellohellohello. Answer A possible implementation is shown below: [js] String.prototype.repeatify = String.prototype.repeatify || function(times) { var str = ''; for (var i = 0; i < times; i++) { str += this; } return str; }; [/js]

Continue reading %5 Typical JavaScript Interview Exercises%

Introducing CCSS (Component CSS)

Do, 2014-09-18 18:00

CCSS, or Component CSS, is an architecture that simplifies the CSS authoring experience for large web applications.

Large web applications generally have a lot of CSS files and often have many developers working on those files simultaneously. With the advent of so many frameworks, guidelines, tools, and methodologies (OOCSS, SMACSS, BEM, etc.), developers need a CSS architecture that is maintainable, manageable, and scalable.

As a frontend engineer, I believe that component-based web development is the way forward. Web components are a collection of standards that are working their way through the W3C. They allow us to bundle up markup and styles into reusable HTML elements that are truly encapsulated. What this means is we need to start thinking about component-based CSS development. While the browser makers are implementing these standards, we can use soft-encapsulation in the meantime.

Let’s take a look at exactly what CCSS is and how you can use it in you are setting up the CSS architecture for a complex web application.

Elements of CCSS

Below are the major elements used either fully or in a modified way to achieve the best configuration for the CCSS architecture.


SMACSS, created by Jonathan Snook, stands for Scalable and Modular Architecture for CSS. It is more of a style guide than a rigid framework. Read about SMACSS for background on the structure as CCSS uses it.


BEM, created by developers at Yandex, stands for “Block”, “Element”, “Modifier”. It is a front-end methodology that is a new way of thinking when developing web interfaces. The guys at Yandex came up with BEM and more information can be found in Harry Roberts’ excellent article.


Sass is CSS with superpowers. I highly recommend it but you can also use Less if you prefer. Please refer to the Sass documentation for more information.


Compass has no class definitions; it is an extension for Sass that provides a lot of utilities. It is used for general useful mixins, and sass compilation. Compass mixins should nearly always be used in cases where vendor prefixes are required. This again is a nice-to-have and Bourbon, on the first look is a great alternative.

Continue reading %Introducing CCSS (Component CSS)%

6 Common Questions About Writing for the Web, Answered

Do, 2014-09-18 17:30

Recently an ex-journalist friend asked me about freelance writing for the web. Although he might have 10 years’ professional experience on me, his questions came from the perspective of someone who wasn’t au fait with either freelancing or web writing.

This wasn’t the first time. Since there might be some writers out there eager to make their first foray into web writing, either within a company or on a freelance basis, I wanted to cover the most common questions I’m asked. Maybe it will help you find your footing a bit faster.

Let’s start with my friend’s question.

I’m a journalist. How do I find freelance work writing online?

If you have experience creating stories for print and other offline media, you don’t need to worry: the web is much the same. Research publications, find some you want to write for, come up with pitches, and send them in. Online, as offline, the money is in reliability and relationships. Good publications pay for the reliable delivery of quality content.

The things to focus on are finding what you consider good publications that reflect the areas and issues you want to cover, and pitching well to them. Use the same approach you would offline: introduce yourself, present a clear, concise outline of your idea, and link to a few other things you’ve done that relate or support your pitch. If you haven’t pitched in a while, and need a refresher, try this article outlining the 7 Principles of Pitching, and have a look at this piece on how not to pitch.

Part of my approach has been to ask friends for recommendations of sites they like, and since many of my friends are readers, this turns up some gold. But I also look through social media and other links for places I want to pitch to, and to spark ideas I can offer existing contacts.

I’m writing for a content mill! Cool huh?

Another variation on this question is, “Have you hard of [content spinning software]? That’s what I use!”

Everyone has their talents, but I’d have to say that this kind of writing isn’t for me and as a consequence I can’t really see how a writer who wants to produce quality content can make any money (or get any satisfaction) out of content milling. Maybe you can do both, for now. But as search engines continue to penalise sites that use this kind of content, those “opportunities” are likely to fade. If you want a career in writing online, you’ll need to think beyond content milling and build broader skills.

Continue reading %6 Common Questions About Writing for the Web, Answered%

The Perils and Perks of Designing with Parallax

Do, 2014-09-18 16:32

How many times has a client, manager, or colleague from a different department asked you to deliver something because it’s trendy?

They’ve seen it, they want it. Relevance, be damned.

How often has this trend been completely unsuitable for your website project? Saying “no” and explaining why a trend makes no sense for your website can be a challenge, so it’s helpful to understand what value a trend can add, and how to apply it effectively in your circumstances.

Parallax scrolling as a web design trend was born from the 2D video game world, originally as a hack for the platform to create a sense of depth in a scene. Noticing the rise in parallax scrolling over the last two years, a designer recently decided to apply the style to his newest web project: a landing page for a small line of retail products.

While scrolling, lifestyle shots of the products should move slowly in the background while descriptions of the products should move quickly in the foreground, producing a parallax effect. In practice, however, the parallax scrolling would, by its nature, prevent the faster-moving descriptions from lining up with their slow-moving photos.

This highlights what can go wrong when applying a popular technique because it’s trendy instead of using it because it’s right for the job. So let’s look at when it can be helpful.

Creating Depth with Parallax

Animals use motion parallax to determine their distance from an object — picture a bird bobbing its head up and down to figure out how close they are to animals in their surroundings. When you scroll a web page, the parallax effect creates the illusion of depth because your direct action (scrolling, rather than bobbing your head) affects the relative position of elements, just like moving through the real world does.

This interaction leads to feeling like you’re a part of the scene, immersing you in the content, enticing you to explore further. Scrolling allows you to actively engage with what you’re seeing, and be immediately rewarded with the unveiling of more visual content:

As such, the parallax effect is an excellent technique to use in visual story telling. It’s highly engaging, encourages interaction, and lets you guide your user through a story. In practical terms, this could be a:

Continue reading %The Perils and Perks of Designing with Parallax%

Ardent: Laravel Models on Steroids

Do, 2014-09-18 16:00

One of the (few) things I don’t like about Laravel is that you cannot move the validation code from your controller to your models easily. When I write software I like to apply the “fat models, skinny controllers” principle. So, for me, writing the validation code in the controller is not a good thing.

To solve this, I’d like to introduce Ardent, a great package for Laravel 4. To be more precise, Ardent presents itself as “Self-validating smart models for Laravel Framework 4’s Eloquent ORM.” In other words: exactly what we need!

As you can imagine, it’s an extension of the Eloquent Model class, basically. This package comes with some new functionality, utilities and methods dedicated to input validation and other little things.

Our Test Application

For a better understanding of the advantages you can enjoy while using Ardent, we will set up a little test application. Nothing complicated: a simple To-Do List app.

Of course, I’m not going to implement a complete application: I just want to explain some principles, so I will make some controllers and models - no views. After that, I will “translate” the code using Ardent.

Our To-Do List will count two different entities:

  • User

    • id
    • first_name
    • last_name
    • email
    • password
  • Task

    • id
    • name
    • status (done / not done)

A really basic project. However, if you don’t want to write code, don’t worry: I have already prepared a migration that you can use to generate the database. Use it!

Continue reading %Ardent: Laravel Models on Steroids%

10 Unusual Ways to Find New Clients

Do, 2014-09-18 14:00

There are a lot of things you can do to get new clients: Have a strong portfolio, know how to articulate the benefits you bring to the table, and of course, have an effective pitching process.

But every now and then, you just want to try something different. We've got your back for the next time you get adventurous with these 10 unconventional ways to get new clients.

1. Social media: Smart searching

This is a beginner-level technique that can still yield strong results. Using Twitter and tools like Hootsuite or Tweetdeck, you can set up searches for specific keywords such as "web designer" or "WordPress developer." Check in on it a few times a day and see what questions people have about your field of expertise or what discussions are going on about working with freelancers in your field. Chime in where you can, always with the goal of being helpful, not salesy.

Virtual assistant Amy Metherell says this is how she got her first three clients, and she's still working with them to this day. "Each day, I'd go through this stream and find anyone who tweeted looking for recommendations for VAs. I'd then respond to them in a conversational way and say something like, 'Hi, I'm a VA. Maybe I can help or know someone who can.'"

Continue reading %10 Unusual Ways to Find New Clients%

Sass for WordPress Developers

Mi, 2014-09-17 20:00

There are many benefits of Sass for WordPress developers. You've probably heard many arguments for using a pre-processor by now. CSS pre-processors provide the opportunity for better code organization by using partials and nesting styles. Pre-processors help developers style faster by writing mixins and functions. Pre-processors also allow us to write more maintainable, scalable code with logic and variables.

Convert a Stylesheet to Sass

The best way to start using Sass in WordPress development is to use a theme that has Sass files included. The Underscores theme is my favorite starting place for a new theme. However, if you're starting with a theme that doesn't have Sass files included, you'll need to convert the existing stylesheet to Sass.

The good news is that if you're using the .scss syntax (which I recommend), your existing CSS is all valid Sass. You can simply copy style.css to style.scss and that .scss file will compile properly.

Continue reading %Sass for WordPress Developers%

5 Examples of Patterns for Mobile Navigation Menus

Mi, 2014-09-17 18:30

In my last article, Obvious always wins I showed how important it is that users are able to understand your website or application and can use it without any effort. The first thing to be sure of is that your interface is simple and intuitive, utilizing familiar icons, actions, and features.

One of the greatest challenges for developers is to find and implement a functional navigation menu that works well on mobile devices.

You cannot create a good user experience without a functional navigation bar. New users will look for and scan your navigation so it is crucial to give a good impression and avoid disappointing their expectations.

Among the professionals who have written on this topic, the first that deserves a mention is Brad Frost. You can discover his approaches and examples of patterns for mobile navigational menus on Brad’s website.

In this article I’ll focus on 5 of them. Think carefully about the best to use in your next projects based on your users’ needs.

Top Nav or “Do Nothing” Approach

One of the most frequently used solutions for navigation is to keep it at the top. Because of its ease of implementation, it’s the one adopted by the majority of websites.

Continue reading %5 Examples of Patterns for Mobile Navigation Menus%

Emerging Patterns in JavaScript Event Handling

Mi, 2014-09-17 18:00

During the last few months the debate on the web about the best way to handle events has thrived. First, a few months ago, Google released the JsAction library; then, more recently, the Object.observe() method was introduced as part of the ECMAScript 7 specification (but already supported in Chrome 36 and Node.js Harmony).

Developers had already been taking sides on whether it is still "mandatory" to have all the logic confined to script files, or if it is acceptable or even preferable to inline selected parts of this logic into HTML. In this post, we will try to sort out this debate, going through the different patterns for error handling, and then weighting pros and cons of these alternatives.

The Facts

JsAction is a Google library for event delegation in JavaScript. It is based on Closure Library, and was introduced on Google maps a few years ago to overcome some browsers errors related to management of event listeners. JsAction aims to decouple events from the methods handling them, and to do so it moves part of the event handling logic to the HTML.

A general, recent trend has started that moves part of the logic not just to HTML files, but within DOM elements affected by that logic. This isn't true just for event handling: a number of template-based frameworks (like Angular, Ractive, React) are emerging; they enforce the Model-View-Controller pattern in web application, and allow data-binding and reactive programming.

The introduction of the Object.observe() method in the next ECMAScript specification is another step in that direction, since it allows developers to natively apply the Publisher/Subscriber pattern to a whole new set of situations, and not just event handling. Declarative frameworks are already based on this logic, but the introduction of Object.observe() will help them gain an amazing improvement in performance.

The Story So Far

Since the introduction of JavaScript, the orthodox way to handle events has changed several times. Initially, if you wanted to add dynamic behavior to elements on your page, you only had one way: adding an attribute to the tag itself, and associate a snippet of JavaScript code with it. You could either write code inside the attribute value, or call one or more functions previously defined in the global scope.

For example, to change the background of your page to blue with a button click:

[html] Feel Blue [/html]

It wasn't long before the limitations and hazards of HTML on[event] attributes were discovered. As of November 2000, the addEventListener method was added to ECMAScript 3 specification as an alternative way to bind handlers to browser events. Previously, Microsoft had already added the attachEvent() method, but it took a while to catch on. While word spread on the Net in early 2000s, it was not until around 4 years after that the term unobtrusive JavaScript was coined.

The Netscape approach that in-lines event handlers had, indeed, some downsides that the event listener approach solved:

Continue reading %Emerging Patterns in JavaScript Event Handling%

You Don’t Need JavaScript for That!

Mi, 2014-09-17 18:00

Web development today can be a whirlwind of various technologies, and even the simplest of widgets can often be complex under the hood.

With that in mind, I’d like to focus on a variety of things you can do with just HTML and CSS, no JavaScript required. Why, you ask? While some of these solutions may not be practical for every use case, they do inspire outside-the-box thinking that promotes lowered complexity, and a wider array of browser support. Here are a few cool things you can do without having to write a single line of JavaScript.

Building a Tabs Widget

We’ve all seen how the checkbox hack can be used for interactivity without JavaScript, but unfortunately, this comes at a cost to accessibility. So instead of another checkbox tutorial, I’d like to show how you can create an accessible tabs widget using the :focus pseudo-class in CSS.

Using :focus

The :focus pseudo-class is used to target an element that has received focus by the user (either by using the keyboard or the mouse). It is supported in every browser including IE8+. Additionally, you can apply a :focus state to any HTML element as long as you give it a tabindex attribute.

Using the tabindex Attribute

HTML’s tabindex attribute indicates if an element can receive focus. It can take several values, including a negative value, zero, or a positive value. Each of these values determines what order an element should be focused on.

Demo for the Tabs Widget

See the Pen Pure CSS Tabs Widget by SitePoint (@SitePoint) on CodePen.

In the HTML, each tab is a button with the content for each tab inside of a paragraph element. Each paragraph element is hidden, then set to position: absolute so that the content will display in the same area for each tab. The first button element has the autofocus attribute, so that the first tab will be visible on the initial page load. Each tab is wrapped in a div, and each div is given a tabindex value, which allows the <div> to be focusable.

As for the CSS, each button is set to display: inline-block, allowing for the tabs to appear side by side. We apply the :focuspsuedo-class to the button and use the adjacent sibling selector to show the related paragraph element when the button is focused. I’ve also added focus styles to the tab’s container div, which means that the tab will keep its focused state until the user clicks outside the entire widget.

Continue reading %You Don’t Need JavaScript for That!%

Styling a Section Post With CSS

Mi, 2014-09-17 17:00

Styling a section post with CSS is a lesson from the course Putting It Together: Building a Website, by Guilherme Muller. Watch to see how you can use a combination of HTML and CSS to change the stylistic layout of the Latest Post area in a website, giving it a colourful, sleek and modern look. If you want to get your hands dirty with website building with HTML and CSS, this course is for you. You will learn how to use the main tools that these languages give to build a complete and complex homepage of a website, based on a professional design which we will analyze and slice in Photoshop. This is a practical course covering the main techniques web developers use for building a variety of common page elements.

Continue reading %Styling a Section Post With CSS%

ZgPHP Conference 2014 – Free Entry

Mi, 2014-09-17 16:00

For almost three years now, there has been a regular and well attended monthly PHP meetup in Zagreb, Croatia. October 2nd 2014 marks the third anniversary of this meetup, and in the spirit of last year, a one-day conference has been organized to commemorate the event.

This year’s conference, however, will be a bit different.

Continue reading %ZgPHP Conference 2014 – Free Entry%

These Lessons from Old-School Landing Pages Can Improve Your Site

Mi, 2014-09-17 14:00

Landing pages--those long, long pages with rivers of text, shouty headlines and big BUY NOW buttons--are controversial.

They run counter to what we're often taught: That the best way to make a sale is to win the trust of your customer and make a soft sale over time.

Landing pages, on the other hand, tend to play on fear and urgency to compel readers to hand over their email address or make a purchase.

While you might think landing pages are obnoxious, you can still learn lesson from them that will make your corporate marketing strategy more effective.

Continue reading %These Lessons from Old-School Landing Pages Can Improve Your Site%