Month: February 2015

A very big hanging

We recently returned from a week’s visit to Delhi and Jaipur, where we visited some of the designers showing work in the exhibition and also picked up several of our new acquisitions from them – about which there will be more in a separate blog. One highlight of the trip was a visit to the National Museum in Delhi, where Anamika Pathak, the Curator of Decorative Arts, showed us round the beautiful exhibition Nauras: the many arts of the Deccan, which is showing there until 20th March. To our delight, one of the most dramatic pieces in the exhibition is the magnificent South Indian temple hanging that we will be borrowing for The Fabric of India, and about which Anamika has contributed an essay for the book of the exhibition. Over 10 metres long and 2 metres high, this huge hanging is made of cotton and is embroidered in shades of blue, brown and white with scenes from the Ramayana. This great epic poem focuses on Rama, the seventh incarnation or avatara of the Hindu God Vishnu, and the hanging depicts episodes from the fourth and fifth books of the seven-volume work.

NMND 62.538

Central panel of the hanging showing Rama’s coronation © National Museum

The central panel shows Rama assuming the kingship of Ayodhya after his return from 14 years of exile and his battle against the demon king Ravana who had abducted Rama’s wife, Sita. The hanging is so large that we won’t be able to show its full length in our exhibition: we will show the central panel and two of the narrower panels on either side, as well as the beautifully executed scenes in the top and lower borders of those sections. The rest will be cunningly wrapped out of view around a specially made mount. This image from The Hindu newspaper gives an idea of its scale, although even this image does not show the whole piece.


Visitors to the Nauras exhibition at the National Museum, New Delhi. © V. Sudershan, as published in The Hindu.

One noticeable feature of the hanging is that many of the scenes feature Hanuman, the monkey god who is Rama’s most devoted ally in his fight against Ravana, suggesting that whoever commissioned the piece could himself have been a devotee of Hanuman. Hanuman is recognisable in many of the scenes, like this one in which he is disguised as a Brahmin, as well as in his usual monkey form, meeting Rama and his devoted half-brother Lakshman.

NMND 68.538

Hanuman greets Rama and Lakshman © National Museum

Other scenes show well-known events from the Ramayana such as the one in which Rama convinces the monkey king Sugriva of his prowess by shooting one arrow through seven trees. In this version of the story, the trees are held on the back of a serpent, and Rama is shown stepping on its tail to make it and the trees stand upright: the snake also falls victim to Rama’s arrow. The snake doesn’t appear in all versions of this scene: small regional variations like this may help identify where the piece was made, which at present is an unanswered question.

NMND 62.538

Rama shoots an arrow through seven trees © Rosemary Crill

The hanging is populated by many weird and wonderful beings, from the 10-headed Ravana himself to wild-haired hermits and dread-locked sages. One of my favourites is the formidable Lankani, the giant female guardian of Lanka, Ravana’s capital, seen here with the diminutive figure of Hanuman perched on her shoulder, bravely wielding his club. Do come and find her in this amazing hanging when it is on display in The Fabric of India.

NMND 62.538

Lankani, the guardian of Lanka, with Hanuman on her shoulder. © Rosemary Crill



The Tower of Babel – Shop of the Day 08

The Tower of Babel – Shop of the Day 08

It’s Friday – which can only mean Fish & Chips.  Love the signage on this chippy in East Ham. Proportionally everything on this shop front really works- almost like a Mondrian painting.

08_E6_2014-11-18 13.00
©Barnaby Barford 2015


22 Smartphone Perspective PSDs for Conceptual App Mockups

Perspective photo mockups are beyond useful when it comes to interface design. These mockups offer designers the ability to craft pixel-perfect interfaces and display how they would look on a real device. Most files are released as PSDs with editable smart objects. Simply copy & paste the final screen design and the mockup is instantly rendered into perspective.

The following gallery includes 22 free perspective mockup PSDs for smartphones. The most popular choices are iPhones and Google Android devices – both of which are represented in this post. Whether you’re designing a brand new mobile app or just need to create a photorealistic composition, these PSDs are the absolute best resource for getting the job done.

Photorealistic iPhone 5’s

six photorealistic iphone5 mockups free

Photorealistic iPhone 6’s

six photorealistic iphone6 mockups free

Perspective iPhone 6

freebie perspective mockup iphone6

White Charging iPhone 6

photorealistic charging iphone6 mockup

8 Natural Mockups

eight natural iphone mockups photos

Vertical iPhone 6

vertical iphone 6 mockup design

iPhone 6 PSDs

behance iphone 6 6s psd freebie

Vector Mockups

vector iphone mockups psd freebie

Nexus 6

nexus6 android device perspective mockup

Android PSD

samsung android phone mockup psd

Dark & White Vectors

iphone ai eps vector illustrator

iPhone 6 Vector

pixeden iphone6 vector psd mockup

iPad Air Vector

ipad air apple psd perspective mockup

3D Render

dark iphone6 3d phone render design

iPhone 6 Hand Mockup

hand holding iphone 6 mockup psd freebie

Flat iPhone 6

flat white iphone 6 mockup psd freebie

iPhone 5c Template

psd freebie iphone 5c mockup perspective

Google Nexus 4

google nexus 4 android device mockup

Photorealistic iPhone 6 Plus

iphone 6 plus psd freebie mockup

10 Free iPhone Mockups

ten photorealistic iphone6 freebie psd

iPhone 4s Mockup

mockup psd freebie perspective iphone4

6 Free iPhone PSDs

six freebie psd iphone mockups ui

If you enjoyed this post then you’ll also enjoy:

Adapting an iPhone 5 App UI to iPhone 6 and 6 Plus

40 Stunning iOS App Icons for Design Inspiration

The post 22 Smartphone Perspective PSDs for Conceptual App Mockups appeared first on SpyreStudios.



I’ve enjoyed contributing here on the Pastry Box this year, if for nothing else than it’s gotten me writing on the regular again. Having a deadline helps drive it into my skull repeatedly that writing has less to do with skill, and more to do with showing up. Making the clackity noise really does work. Just like merely putting pencil to paper counts as sketching. I should know this by heart by now, but I’ve come to the conclusion that I’ll need life-long reminding.

Each month when I feel my Pastry Box deadline approach, I set my mind to sponge-mode in case an idea happens to present itself. I start jotting down notes on paper, in random text files, and peck out sentences in emails to myself while I ride the subway each day. Few of these ever get used for anything, but they all resonated with me in some way when I wrote them.

Over time, I’ve amassed a considerable amount of drafts and unorganized thoughts. Some date back to when I first started blogging (we were really preoccupied with IE6 back then) and the pile since then keeps growing. When I can’t think of anything to write about, I often go back and skim through these drafts to see if there is a loose thread I can pick up. There are many thoughts that were interesting to me for a time, but it rarely happens that one might strike me now. If these thoughts resonated with me before, why can’t they now?

I used to feel like a bit of a failure when I would look back on all these drafts and see them as uncompleted work. Perhaps these ideas are just sketches in their own right. Not exact, not refined, just ideas in their preferred state: ugly. They have a lot of raw gumption, but few have a leg to stand on. Without planning it, my writing process turned out pretty similar my sketching process.

I often think about that maxim of “strong opinions, weakly held”, and it really rings true to me. I love imagining many different scenarios when I sketch or write—and even when I form an opinion—I invariably end up having my mind changed down the road.

The drafts I have aren’t incomplete works anymore, they’re old points of view that have changed. I haven’t picked up some of those threads because I probably don’t agree with them anymore. Making the clackity noise or scribbling in a sketchbook are just ways of trying ideas on for size. If they don’t fit, that’s alright, I can cast them aside. And that’s kind of the point anyway. Good ideas have a way to coming up again, begging to be nurtured and finished.

This piece originally appeared on The Pastry Box Project.

Jason Santa Maria

Using AngularJS for Data Visualisations

The following is a guest post by Nick Moreton. I gotta say I find this idea rather intriguing. I know that I love working in HTML, SVG, and CSS, so when Nick shares that we can use that for structure and use the data directly to style a chart, that appeals to me. And then to know that, because you’re using Angular, the chart can automatically change when the data changes… that’s just dang cool.

As soon as I began playing around with AngularJS it struck me that its ability to grab data and use it directly in markup could offer a real quick and simple way to create data visualizations.

In this tutorial I will run through creating three different sorts of charts using both inline CSS and SVG.

Why Angular?

If you’ve ever written to the DOM from JavaScript or jQuery you will know how quickly your code can begin to look messy, especially if you are using several variables. Angular allows for data to be used right in the markup, leading to clean, easy to read and understand code.

There are also some great visualization libraries out there, but they come with a lot of default styling right out of the box. By using Angular, the visualizations are completely unopinionated, and will pick up your style right off the bat.

I’m not saying this is the best way of creating data visualizations, but it certainly appeals to me!

Note: I won’t go through every aspect of Angular here, such as how the apps, controllers, etc work – I will be concentrating on the data. I have written ‘A Hello World In AngularJS’ that may help you understand some of that stuff, and there are plenty of other great resources around for getting started with Angular

Setting up our Angular App

Basic App setup

Firstly we need to set up an Angular app and a controller to house our functionality and data.

(function(){    var app = angular.module('graphApp',[]);    app.controller('graphController', function($  scope){    // Code goes here!    });  })();

Default options

Next, we set up some default variables, bound to the controller $ scope, that we will use to control the size of our chart, as well as labels for the X and Y axis.

$  scope.width = 600; $  scope.height = 400; $  scope.yAxis = "Sales"; $  scope.xAxis = "2014"


We then add our data, written in JSON, bound to the $ scope of our controller.

$ = [   {     label: 'January',     value: 36   },   {     label: 'February',     value: 54   },    // .... and so on .....    {     label: 'November',     value: 252   },   {     label: 'December',     value: 342   } ];

Find the maximum

Finally, we write a loop to cycle through our data to find the maximum value and set this as a variable. We will be using this later to position the elements in our visualizations.

$  scope.max = 0;  var arrLength = $; for (var i = 0; i < arrLength; i++) {   // Find Maximum X Axis Value   if ($[i].value > $  scope.max)   $  scope.max = $[i].value; }

And that’s it for our JavaScript. Really this is all about setting up our data and variables for use later in our markup.

Set up markup, templating and CSS

We now need to set up our visualization app markup and CSS.

<div ng-app="graphApp">    <div ng-controller="graphController as graph">      <div class="graph" style="width:{{width}}px; height:{{height}}px;" >        <div class="y" style="width:{{height}}px;">{{yAxis}}</div>        <div class="x">{{xAxis}}</div>      </div>    </div>  </div>

In the HTML we can start to pull the data out of the JavaScript directly in to the markup, both as content (such as the X and Y labels) and as inline style to control the height and width of our chart.

Note: The ‘y’ div uses the {{height}} variable for the width CSS property – this is because in our CSS we will rotate this counter clockwise by 90 degrees
.chart {   border-left: 1px solid black;   border-bottom: 1px solid black;   margin: 60px auto;   position: relative; }  .y {   position: absolute;   transform: rotate(-90deg);   transform-origin: bottom left;   bottom: 0;   padding: 5px; }  .x {   position: absolute;   top: 100%;   width: 100%;   padding: 5px; }

Bar Chart

OK, to create the data on our charts we’re going to use Angular’s ng-repeat function. This will cycle through our data array and output whatever markup we wrap in the ng-repeat for each entry.

First off, we’ll create a bar chart. To begin with, I have some default CSS set up for the bar class that sets the position to absolute and adds a background color.

.bar {   background: blue;   position: absolute;   bottom: 0; }

Then, using ng-repeat, to create a <div> with class ‘bar’ for each entry we would write

<div ng-repeat="bar in data" class="bar"></div>

This code goes inside our <div class="graph"></div>.

We can now use our Angular data (and a little bit of maths!) in some inline CSS to control the height and width of each bar

<div ng-repeat="bar in data" class="bar" style="height:{{bar.value / max * height}}px; width:{{width / data.length - 5}}px;"></div>

The height is the value, divided by the maximum (as set up in our Angular app), multiplied by the total height of our chart. This ensures that the highest value in our data will take up the full height of the chart.

The width is the total width divided by the number of entries, with 5px knocked off to create some spacing once we place our bars on the X axis.

Finally, we need to position the bars along the X axis using the left CSS property.

<div ng-repeat="bar in data" class="bar" style="height:{{bar.value / max * height}}px; width:{{width / data.length - 5}}px; left:{{$  index / data.length * width}}px;"></div>

Here, we are using $ index, an Angular variable that will start at 0 and increase for each subsequent bar. We divide the index by the total number of entries and multiply this by the full width of the chart. This places the first bar at 0 and then spaces the rest of the bars equally across the chart.

It’s worth noting here that if you wish to have a fluid chart you could multiply by 100 and use % as the unit rather than pixels.

And that’s it – our bar chart has now been created and you can start getting fancy with your CSS to style it up!

The final full chart code looks like this:

<div class="chart" style="width:{{width}}px; height:{{height}}px;">    <!-- Labels -->   <div class="y" style="width:{{height}}px;">{{yAxis}}</div>   <div class="x">{{xAxis}}</div>    <!-- Data -->   <div ng-repeat="bar in data" class="bar" style="height:{{bar.value / max * height}}px; width:{{width / data.length - 5}}px; left:{{$  index / data.length * width}}px;"></div>  </div>

See the Pen 1fe35094c4c1d447bdf59c5588167274 by Nick Moreton (@nickmoreton) on CodePen.

Dot chart

The method for a dot chart is very similar.

Again, I have some default CSS for the dots:

.dot {   background: blue;   width: 10px;   height: 10px;   border-radius: 50%;   position: absolute; }

For the dots, we don’t need to worry about widths or heights, we simply use the same data and maths to position the dots from the left and from the bottom.

The only difference is we add 0.5 to $ index so that the dots are positioned in the center of the space afforded to it.

<div ng-repeat="dot in data" class="dot" style="bottom:{{dot.value / max * height}}px; left:{{($  index + 1) / data.length * width}}px;"></div>

The full chart looks like this:

<div class="chart" style="width:{{width}}px; height:{{height}}px;">    <!-- Labels -->   <div class="y" style="width:{{height}}px;">{{yAxis}}</div>   <div class="x">{{xAxis}}</div>    <!-- Data -->   <div ng-repeat="dot in data" class="dot" style="bottom:{{dot.value / max * height}}px; left:{{($  index + 0.5) / data.length * width}}px;"></div>  </div>

See the Pen 0ee74365fd766311a52aa0d129c22ea8 by Nick Moreton (@nickmoreton) on CodePen.

SVG Line Chart

As well as inline CSS, we can use Angular data values in SVG data.

The CSS for this is:

svg {   position: absolute;   transform: rotateX(180deg);   left: 0;     }  line  {   stroke:red;   stroke-width:3px; }

I’m rotating the SVG as by default it processes values from the top, and we need this to flipped to take values from the bottom.

Firstly, we need to create an SVG that spans the full area of our graph, and then inside that use our ng-repeat on a line element.

Each line element requires a start and end point on both the X (x1, x2) and Y (y1, y2) axis.

The X axis is pretty simple – we follow the same system as before, so that each line is spaced out evenly across the chart, starting at 0 using $ index, and ending where the next line starts, using $ index + 1.

For the Y axis this is where the $ index variable comes in to its own, as it allows us to select values from previous or next entries in our array.

The initial Y point of each line gets the value from the previous data entry using data[$ index - 1].value before we then apply similar maths as before. For the second Y point we can just call the straight value from the entry.

This may sound complicated (and I can assure you that working it out was a bit of a head shrinker!) but hopefully this explanation coupled with the code below should help you make sense of it!

<svg style="width:{{width}}px; height:{{height}}px;">    <line ng-repeat="line in data" x1="{{$  index / data.length * width}}" y1="{{data[$  index - 1].value / max * height}}" x2="{{($  index + 1) / data.length * width}}" y2="{{line.value / max * height}}">   </line>  </svg>

The final chart code looks like this:

<div class="chart" style="width:{{width}}px; height:{{height}}px;">    <!-- Labels -->   <div class="y" style="width:{{height}}px;">{{yAxis}}</div>   <div class="x">{{xAxis}}</div>    <!-- Data -->   <svg style="width:{{width}}px; height:{{height}}px;">      <line ng-repeat="line in data"            x1="{{$  index / data.length * width }}"            y1="{{data[$  index - 1].value / max * height}}"            x2="{{($  index + 1) / data.length * width}}"            y2="{{line.value / max * height}}">     </line>   </svg>  </div>

See the Pen a3e89703d7671fa81d5c2ceb20f7b150 by Nick Moreton (@nickmoreton) on CodePen.

Where next?

You can use the $ index variable in class names too, like this <element class="classname{{$ index}}"> which allows for fine control of each bar, dot or line – which we can use to animate these visualizations.

I have worked up a full dot/line chart example with animation, as well as CSS tooltips using the labels from each entry in our data. You can see this here.

I’ve also created a Pen with all of these examples.

I hope this tutorial is of some use, and I’d love to hear about any visualizations you create with Angular!

Using AngularJS for Data Visualisations is a post from CSS-Tricks


Testing Statistical Significance On Google Analytics Data

Testing Statistical Significance On Google Analytics Data

This article walks you through GA Effect, a web application that helps you identify whether events happening on your Google Analytics data are statistically significant or just pure chance; in other words, it separates signal from noise.

I will focus here on how to use GA Effect and interpret the results, but if you are interested in building your own online statistics dashboard using R, take a look at my previous post, where I explain how this application was built.

Is This Event Statistically Significant?

You may recognise the situation: you’ve implemented some SEO improvements 3 months ago and you’re now checking if and by how much your revenue has improved since then. You log in to Google Analytics, but instead of a huge peak of SEO traffic, you are instead greeted with a slight hump. You think it may be due to your efforts, but can’t definitely say. The marketing team is saying the increase is due to a display campaign they did 6 weeks ago that influenced your brand search, but you think otherwise, and you need to prove it to justify releasing budget for more SEO work.

Or how about this: you’re in charge of a travel website, and your country has just won the Eurovision song contest. Everyone is saying this is great news for the country’s tourism and you should see an increase in bookings. Could you judge if this is the case, or is any increase you see that year just due to seasonal variation? Maybe its just the weak currency?

What both these scenarios have in common is a certain event happening, which may or may not have had a positive effect. Wouldn’t it be nice to know for sure that the event was significant, backed up by more than just instinct or opinion? That way you could be more data-driven regarding future investments. Further, if you do find that event to be significant, it would be nice to have an idea of how much it moved the needle, so you can judge its overall value and ROI.

The situations discussed above are great examples of what GA Effect attempts to answer using a Bayesian structural time-series method. It provides a Yes or No answer to the question “Is this event significant?” The tool also gives a metric value to those events.

How GA Effect Works

GA Effect is coded in R and takes advantage of the CausalImpact package released in 2014 by Googler Kay H. Brodersen. The package uses Bayesian structural time-series to build an estimate of what your metrics would look like if no event happened, and then compares that with what actually happened (image below from official package page). If the model is correct, then by comparing the differences between its estimate and reality, you can get an educated guess of the event’s value.

Causal Inference analysis

If you were looking to do similar analyses without Bayesian time-series, a sensible approach would be to take the average value before the event, and compare it with the average afterwards. The CausalImpact model builds on top of that by using Bayesian statistics to give you a better guess at those averages, as well as accounting for season and time.

The statistical significance tests are set to 95% confidence level. That is to say, if you do find significance, an experiment run 100 times is expected to see the impact 95 times. This means that if all your assumptions are correct, you can be a lot more confident in that event’s effect. Bear in mind several assumptions need to hold for this to be the case, which we discuss later – not following those assumptions may give you incorrect results.

Use Case: Impact of SEO Changes

The two examples discussed previously were used to test the app, along with a few others. Below I will discuss in detail how GA Effect was used to analyze the impact of SEO changes on a website.

It is important to keep in mind that you should always have a question in mind before using the app. This may seem obvious, but don’t simply go “shopping” for significant events, regardless of their meaning. Plan it like you plan an experiment – pick a hypothesis, judge what you would expect to see if the hypothesis was true, then use the app to test that hypothesis. So, here is the hypotheses we will look at below:

Did changing the title tags impact this website’s SEO traffic, and if so by how much?

Below are the steps you will need to follow in order to check whether the hypotheses above is statistically significant or not.

1. Go to and authenticate with a Google account that has access to the correct Google Analytics View.

2. Pick your View from the selection list.

3. Select a date range. Tips on picking a good date range are below, but a rule of thumb is 7:3 ratio of pre-event:post-event.

4. Pick your segment. This will show all your custom segments, but for now we will pick “Organic Traffic” as we want to see SEO impact.

5. Pick your metric. We will just choose sessions, as conversions such as revenue or goal could be affected by your website’s conversion rate performance. You should now see a plot of your selections in the middle of the screen – it shows date and your metrics plotted just as you would see in Google Analytics reports itself. The plot is interactive – try click-dragging to zoom in for fine detail, to help choose when your event was.

Statistically Significant Google Analytics

6. You will also see a vertical line labelled “Event” in the screenshot. Move the line to when the SEO changes occurred, this date will be used to calculate the statistics.

7. The screenshot above shows the setup. In our case, the SEO changes went live on the August 01, 2014, so that date has been chosen in the field beneath the graph.

8. Most datasets also have a seasonality, especially e-commerce websites. Two are supported in this version, Weekly and Monthly. Other seasons such as Annual may be added in the future. We’re choosing weekly as we can see weekends are quieter than weekdays.

9. Once you’re happy, click over to the Results page in the top left hand corner.

10. The app will think a bit, then show you the results, as seen in the screenshot below.

Google Analytics Statistics

Here is an explanation of the results shown in the screenshot above:

  • Top Left: An overall confirmation on whether the event seemed to have a significant effect or not.
  • Top Middle: An estimated magnitude of how much extra SEO traffic was seen in this example.
  • Top Right: An estimated % change on SEO traffic. In this example the title tags have contributed 16% more SEO traffic over the period.
  • Middle Plot: This interactive graph shows the model’s expectation of the SEO traffic vs what actually happened. The light green area is the 95% confidence area of the estimate – a guess range of where the traffic should be. The blue line is reality. If the blue line is consistently over the green, that indicates a lift. It also includes a zoom window at the bottom; the default shows one week before the event so you can focus on the results.
  • Bottom Plot: This is the same time-range, but shows the model estimate minus the guess, adding up over time. For instance, it estimated that by September 07 the SEO changes have added 50,000 more SEO visits. As time goes on, it gets less and less certain due to natural random variation, so the blue shaded area showing the 95% confidence level gets wider and wider.

Underneath the plots is the raw output of the CausalImpact model, so you can examine the details. It includes a nice written report that tries to give some insight into the results, plots that the upper graphs were based upon, and a table of the statistics computed.

That’s pretty much it. You can redo the process by going back to the Setup page or Start Again to re-authenticate. Note also that there is a notification log top right, so you can keep track of what you have been doing.

This is just one application, not necessarily the most interesting to you. Give it a go and check the most relevant applications to your website using your own data.

Model Assumptions & Best Practices

Just blindly trusting statistics is dangerous, and although GA Effect can be a powerful tool, don’t put faith in its results without putting care into its model assumptions. There are several assumptions that CausalImpact makes:

  • The event you are testing did not influence pre-period as well as post-period. There needs to be a definite start date.
  • The metrics post-event are correlated to the metrics after the event. Things like the website hosting or other big influences need to be as constant as possible.
  • The event itself must not be correlated to what is measuring it; e.g. testing conversion rates after your website speed improvements went live would be problematic, as website speed also correlates with conversion rates.
  • Examine how well the outcome can be predicted before the beginning of the intervention. Try running a dummy event before the real one – you should see no significance.
  • The date range needs to be long enough before the event to give something for the model to train on, and enough after the event for the effect to be seen – but not too long that other events start to take hold. Think about what effect you are measuring, and amend accordingly.

Taking it Further

GA Effect is really just a wrapper around the CausalImpact R package, and only touches the surface of what it can achieve. For instance, only one metric is used for predictions, when multiple can be used (say Google trends for a brand term in the SEO example). You can also provide custom seasonality, and customise the model itself via its underlying bsts package.

The GA Effect app itself wouldn’t be possible without the incredible work of the RStudio team, with products such as Shiny, and dygraphs making the app as it is. Last but not least the GA connection is courtesy of the rga() package by Bror Skardhamar.

If you’ve not used R before now, its a great time to start as all these people and more are working hard to make it more accessible every day. Once you’re hooked, you’ll never open an Excel sheet again 🙂 I write about R and Web Analytics and how it helps with my daily work at my blog, so join me there to follow my progress and hopefully help with yours.

Causal Inference analysis
Statistically Significant Google Analytics
Google Analytics Statistics

Online Behavior – Marketing Measurement & Optimization

Using the CSS Transitions panel

In this movie, learn about the CSS Transitions panel, which makes it easy to add impressive CSS-driven transitions to any element on the page through a single dialog. All CSS syntax is handled automatically, including vendor prefixes for all major browsers. If you prefer to hand-code your CSS syntax, the CSS Transitions panel now gives you an easy way to manage and edit transitions, regardless of where they’re added.
Digital Design CS6 | Adobe TV