Best Places to Live in Atlantic Canada 2018


.WB18{
box-sizing:border-box
}
.WB18 *{
box-sizing:inherit
}
.WB18 a{
transition-property:background-color,color;
transition-duration:.2s
}
.grid>div{
float:left
}
.grid{
display:flex;
flex-direction:column
}
.font__display–proxima{
font-family:proxima-nova,”Helvetica Neue”,Helvetica,Arial,sans-serif
}
.font__display–jubilat{
font-family:jubilat,Georgia,serif
}
.WB18 h1,.WB18 h2,.WB18 h3,.WB18 h4,.WB18 h5,.WB18 h6{
font-family:proxima-nova,”Helvetica Neue”,Helvetica,Arial,sans-serif;
font-weight:900
}
.WB18__header–wrap{
/*margin-bottom:2em */
}
.WB18__header{
display:block;
padding: 0;
text-align:center;
background-color:#2fbcf2;
color:#fff;
background-position:center center;
font-family:jubilat,Georgia,serif;
cursor:pointer
}
.WB18__header:hover{
color:#afeeee;
background-color:#29c4f2
}
.WB18__header span{
display:inline-block;
color:#dc1b1b;
transition-property:color;
transition-duration:.2s
}
.WB18__header span.to-animate{
animation-name:tada;
animation-duration:.9s;
animation-delay:1s
}
.WB18__header:hover span{
color:#dc143c
}
.WB18__header:hover span.label__year{
color:#444
}
.WB18__desktop {
display: none;
}
@media (min-width:768px){
.grid{
flex-direction:row
}
.grid>*{
padding-left:1em;
padding-right:1em;
flex-grow:1
}
.grid>:first-child{
margin-left:0
}
.grid>:last-child{
margin-right:0
}
.block{
width:100%
}
.WB18__header{
padding:0;
}
}
.WB18__headline,.single-post article h1.WB18__headline{
color:#fff
}
.WB18__header .label__year{
display:block;
position:absolute;
line-height:1em;
padding:.3em .8em .2em;
top:.25em;
right:.25em;
background-color:gold;
color:#444;
font-weight:900;
box-shadow:2px 2px 6px rgba(0,0,0,.5);
border-radius:20%/50%
}
.WB18__nav{
display:flex;
flex-wrap:wrap;
flex-direction:column;
margin:0;
background-color:#eee
}
@media (min-width:768px){
.WB18__header .label__year{
font-size:1.4em;
right:-.25em
}
.WB18__nav{
flex-direction:row;
justify-content:stretch
}
.WB18__nav a,.WB18__nav button{
/* flex-grow:1 */
flex-basis: 50%;
}
}
@media (min-width: 1264px){
.WB18__nav a,.WB18__nav button{
/* flex-grow:1 */
flex-basis: 25%;
}
}
.WB18__nav a,.WB18__nav button{
padding:1rem 0.8rem;
border:0;
text-align:left;
background-color:#eee;
color:#dc1b1b;
font-family:proxima-nova,”Helvetica Neue”,Helvetica,Arial,sans-serif
}
#WB18__nav–togglerOne.active,#WB18__nav–togglerTwo.active,.WB18__nav a:hover,.WB18__nav button:hover{
background-color:#29c4f2;
color:#fff
}
.WB18__nav–overview{
order:1
}
.WB18__nav–other{
order:2
}
#WB18__nav–togglerOne{
order:3
}
#WB18__nav–togglerTwo{
order:4
}
.WB18__nav button{
outline:0
}
.WB18__nav #WB18__nav–togglerOne,.WB18__nav #WB18__nav–togglerTwo{
position:relative;
z-index:20
}
.WB18__nav #WB18__nav–togglerOne::after,.WB18__nav #WB18__nav–togglerTwo::after{
display:inline-block;
padding:0 1rem;
content:’ 025BE’;
transition-property:transform;
transition-duration:.2s
}
.WB18__nav #WB18__nav–togglerOne.active::after,.WB18__nav #WB18__nav–togglerTwo.active::after{
content:’ 025BE’;
transform:rotate(180deg)
}
.WB18__nav–citylistOne,.WB18__nav–citylistTwo{
position:absolute;
display:flex;
width:100%;
z-index:10;
flex-direction:column;
transform:translateX(-999em);
box-shadow:0 6px 4px rgba(0,0,0,.5)
}
.WB18__nav–citylistOne.active,.WB18__nav–citylistTwo.active{
transform:translateX(0);
z-index:20
}
.WB18__nav–citylistOne a,.WB18__nav–citylistTwo a{
background-color:#29c4f2;
color:#eee
}
.WB18__nav–citylistOne a:hover,.WB18__nav–citylistTwo a:hover{
background-color:#444;
color:#eee
}
@media (min-width:768px){
.WB18__nav–overview{
order:1
}
.WB18__nav–other{
order:4
}
#WB18__nav–togglerOne{
order:2
}
#WB18__nav–togglerTwo{
order:3
}
.WB18__mobile {
display: none;
}
.WB18__desktop {
display: block;
}
}
@keyframes tada{
from,to{
–transform:scale3d(1,1,1);
transform:scale3d(1,1,1)
}
10%,20%{
–transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);
transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)
}
30%,50%,70%,90%{
–transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);
transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)
}
40%,60%,80%{
–transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);
transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)
}
}

! function(e, t) { “object” == typeof exports && “object” == typeof module ? module.exports = t() : “function” == typeof define && define.amd ? define([], t) : “object” == typeof exports ? exports.inView = t() : e.inView = t() }(this, function() { return function(e) { function t(i) { if (n[i]) return n[i].exports; var r = n[i] = { exports: {}, id: i, loaded: !1 }; return e[i].call(r.exports, r, r.exports, t), r.loaded = !0, r.exports } var n = {}; return t.m = e, t.c = n, t.p = “”, t(0) }([function(e, t, n) { “use strict”; var i, r = n(2), o = (i = r) && i.__esModule ? i : { default: i }; e.exports = o.default }, function(e, t) { e.exports = function(e) { var t = typeof e; return null != e && (“object” == t || “function” == t) } }, function(e, t, n) { “use strict”; function i(e) { return e && e.__esModule ? e : { default: e } } Object.defineProperty(t, “__esModule”, { value: !0 }); var r = i(n(9)), o = i(n(3)), u = n(4); t.default = function() { if (“undefined” != typeof window) { var e = { history: [] }, t = { offset: {}, threshold: 0, test: u.inViewport }, n = (0, r.default)(function() { e.history.forEach(function(t) { e[t].check() }) }, 100); [“scroll”, “resize”, “load”].forEach(function(e) { return addEventListener(e, n) }), window.MutationObserver && addEventListener(“DOMContentLoaded”, function() { new MutationObserver(n).observe(document.body, { attributes: !0, childList: !0, subtree: !0 }) }); var i = function(n) { if (“string” == typeof n) { var i = [].slice.call(document.querySelectorAll(n)); return e.history.indexOf(n) > -1 ? e[n].elements = i : (e[n] = (0, o.default)(i, t), e.history.push(n)), e[n] } }; return i.offset = function(e) { if (void 0 === e) return t.offset; var n = function(e) { return “number” == typeof e }; return [“top”, “right”, “bottom”, “left”].forEach(n(e) ? function(n) { return t.offset[n] = e } : function(i) { return n(e[i]) ? t.offset[i] = e[i] : null }), t.offset }, i.threshold = function(e) { return “number” == typeof e && e >= 0 && e <= 1 ? t.threshold = e : t.threshold }, i.test = function(e) { return "function" == typeof e ? t.test = e : t.test }, i.is = function(e) { return t.test(e, t) }, i.offset(0), i } }() }, function(e, t) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var n = 0; n -1, o = !n && r; n && !r && (e.current.push(t), e.emit(“enter”, t)), o && (e.current.splice(i, 1), e.emit(“exit”, t)) }), this } }, { key: “on”, value: function(e, t) { return this.handlers[e].push(t), this } }, { key: “once”, value: function(e, t) { return this.singles[e].unshift(t), this } }, { key: “emit”, value: function(e, t) { for (; this.singles[e].length;) this.singles[e].pop()(t); for (var n = this.handlers[e].length; –n > -1;) this.handlers[e][n](t); return this } }]), e }(); t.default = function(e, t) { return new i(e, t) } }, function(e, t) { “use strict”; Object.defineProperty(t, “__esModule”, { value: !0 }), t.inViewport = function(e, t) { var n = e.getBoundingClientRect(), i = n.top, r = n.right, o = n.bottom, u = n.left, c = n.width, s = n.height, f = o, a = window.innerWidth – u, l = window.innerHeight – i, d = r, p = t.threshold * c, h = t.threshold * s; return f > t.offset.top + h && a > t.offset.right + p && l > t.offset.bottom + h && d > t.offset.left + p } }, function(e, t) { (function(t) { var n = “object” == typeof t && t && t.Object === Object && t; e.exports = n }).call(t, function() { return this }()) }, function(e, t, n) { var i = n(5), r = “object” == typeof self && self && self.Object === Object && self, o = i || r || Function(“return this”)(); e.exports = o }, function(e, t, n) { var i = n(1), r = n(8), o = n(10), u = “Expected a function”, c = Math.max, s = Math.min; e.exports = function(e, t, n) { function f(t) { var n = h, i = v; return h = v = void 0, w = t, m = e.apply(i, n) } function a(e) { var n = e – b; return void 0 === b || n >= t || n = y } function l() { var e, n, i = r(); return a(i) ? d(i) : void(g = setTimeout(l, (e = i, n = t – (e – b), x ? s(n, y – (e – w)) : n))) } function d(e) { return g = void 0, T && h ? f(e) : (h = v = void 0, m) } function p() { var e, n = r(), i = a(n); if (h = arguments, v = this, b = n, i) { if (void 0 === g) return e = b, w = e, g = setTimeout(l, t), O ? f(e) : m; if (x) return g = setTimeout(l, t), f(b) } return void 0 === g && (g = setTimeout(l, t)), m } var h, v, y, m, g, b, w = 0, O = !1, x = !1, T = !0; if (“function” != typeof e) throw new TypeError(u); return t = o(t) || 0, i(n) && (O = !!n.leading, y = (x = “maxWait” in n) ? c(o(n.maxWait) || 0, t) : y, T = “trailing” in n ? !!n.trailing : T), p.cancel = function() { void 0 !== g && clearTimeout(g), w = 0, h = b = v = g = void 0 }, p.flush = function() { return void 0 === g ? m : d(r()) }, p } }, function(e, t, n) { var i = n(6); e.exports = function() { return i.Date.now() } }, function(e, t, n) { var i = n(7), r = n(1), o = “Expected a function”; e.exports = function(e, t, n) { var u = !0, c = !0; if (“function” != typeof e) throw new TypeError(o); return r(n) && (u = “leading” in n ? !!n.leading : u, c = “trailing” in n ? !!n.trailing : c), i(e, t, { leading: u, maxWait: t, trailing: c }) } }, function(e, t) { e.exports = function(e) { return e } }]) }), function(e, t) { if (“function” == typeof define && define.amd) define([“module”, “exports”], t); else if (“undefined” != typeof exports) t(module, exports); else { var n = { exports: {} }; t(n, n.exports), e.fitty = n.exports } }(this, function(e, t) { “use strict”; Object.defineProperty(t, “__esModule”, { value: !0 }); var n = Object.assign || function(e) { for (var t = 1; t 1 && void 0 !== arguments[1] ? arguments[1] : {}; return “string” == typeof e ? t(r(document.querySelectorAll(e)), n) : t([e], n)[0] } if (e) { var r = function(e) { return [].slice.call(e) }, o = { IDLE: 0, DIRTY_CONTENT: 1, DIRTY_LAYOUT: 2, DIRTY: 3 }, u = [], c = null, s = “requestAnimationFrame” in e ? function() { e.cancelAnimationFrame(c), c = e.requestAnimationFrame(function() { a(u.filter(function(e) { return e.dirty })) }) } : function() {}, f = function(e) { return function() { u.forEach(function(t) { t.dirty = e }), s() } }, a = function(e) { e.filter(function(e) { return !e.styleComputed }).forEach(function(e) { e.styleComputed = p(e) }), e.filter(h).forEach(y), e.filter(d).forEach(l), e.forEach(v), e.forEach(m) }, l = function(e) { e.availableWidth = e.element.parentNode.clientWidth, e.currentWidth = e.element.scrollWidth, e.previousFontSize = e.currentFontSize, e.currentFontSize = Math.min(Math.max(e.minSize, e.availableWidth / e.currentWidth * e.previousFontSize), e.maxSize), e.whiteSpace = e.multiLine && e.currentFontSize === e.minSize ? “normal” : “nowrap” }, d = function(e) { return e.dirty !== o.DIRTY_LAYOUT || e.dirty === o.DIRTY_LAYOUT && e.element.parentNode.clientWidth !== e.availableWidth }, p = function(t) { var n = e.getComputedStyle(t.element, null); t.currentFontSize = parseInt(n.getPropertyValue(“font-size”), 10), t.display = n.getPropertyValue(“display”), t.whiteSpace = n.getPropertyValue(“white-space”) }, h = function(e) { var t = !1; return /inline-/.test(e.display) || (t = !0, e.display = “inline-block”), “nowrap” !== e.whiteSpace && (t = !0, e.whiteSpace = “nowrap”), t }, v = function(e) { y(e), e.dirty = o.IDLE }, y = function(e) { e.originalStyle || (e.originalStyle = e.element.getAttribute(“style”) || “”), e.element.style.cssText = e.originalStyle + “;white-space:” + e.whiteSpace + “;display:” + e.display + “;font-size:” + e.currentFontSize + “px” }, m = function(e) { e.element.dispatchEvent(new CustomEvent(“fit”, { detail: { oldValue: e.previousFontSize, newValue: e.currentFontSize, scaleFactor: e.currentFontSize / e.previousFontSize } })) }, g = function(e, t) { return function() { e.dirty = t, s() } }, b = function(e) { e.newbie = !0, e.dirty = !0, u.push(e) }, w = function(e) { return function() { u = u.filter(function(t) { return t.element !== e.element }), e.observeMutations && e.observer.disconnect(), e.element.style.cssText = e.originalStyle } }, O = function(e) { e.observeMutations && (e.observer = new MutationObserver(g(e, o.DIRTY_CONTENT)), e.observer.observe(e.element, e.observeMutations)) }, x = { minSize: 16, maxSize: 512, multiLine: !0, observeMutations: “MutationObserver” in e && { subtree: !0, childList: !0, characterData: !0 } }, T = null, L = function() { e.clearTimeout(T), T = e.setTimeout(f(o.DIRTY_LAYOUT), i.observeWindowDelay) }, S = [“resize”, “orientationchange”]; return Object.defineProperty(i, “observeWindow”, { set: function(t) { var n = (t ? “add” : “remove”) + “EventListener”; S.forEach(function(t) { e[n](t, L) }) } }), i.observeWindow = !0, i.observeWindowDelay = 100, i.fitAll = f(o.DIRTY), i } }(“undefined” == typeof window ? null : window), e.exports = t.default }), fitty(“.fit”), inView(“.fit”).on(“enter”, function() { fitty(“.fit”) }), function(e) { function t() { if (this.id === “WB18__nav–togglerOne”) { !1 === e.cityListOneOpen ? e.cityListOneOpen = !0 : e.cityListOneOpen = !1, e.togglerOne.classList.toggle(“active”), e.submenuOne.classList.toggle(“active”); } else if (this.id === “WB18__nav–togglerTwo”) { !1 === e.cityListTwoOpen ? e.cityListTwoOpen = !0 : e.cityListTwoOpen = !1, e.togglerTwo.classList.toggle(“active”), e.submenuTwo.classList.toggle(“active”); } } e.cityListOneOpen = !1, e.togglerOne = document.querySelector(“#WB18__nav–togglerOne”), e.submenuOne = document.querySelector(“.WB18__nav–citylistOne”), e.togglerOne.addEventListener(“click”, t), e.addEventListener(“keyup”, function(n) { 27 === n.keyCode && !0 === e.cityListOneOpen && t() }), e.cityListTwoOpen = !1, e.togglerTwo = document.querySelector(“#WB18__nav–togglerTwo”), e.submenuTwo = document.querySelector(“.WB18__nav–citylistTwo”), e.togglerTwo.addEventListener(“click”, t), e.addEventListener(“keyup”, function(n) { 27 === n.keyCode && !0 === e.cityListTwoOpen && t() }) }(this);

Sir Sandford Fleming Park, Halifax, Nova Scotia Canada (Shutterstock)

Atlantic Canada is beautiful, and a wonderful place to live in many ways. Fresh seafood, walks along the ocean and famously friendly neighbours are just a few of the benefits of living on the east coast.

Unfortunately, the region is also facing challenges. Low incomes and high unemployment kept Atlantic Canada cities out of the top half of our ranking of the best places to live in Canada, with Halifax, the top-rated east coast city, finishing in 226th place.

Halifax made the top 25 per cent of all cities in the commute and amenities categories. Halifax is among the top 60 cities for the percentage of its population that walks or cycles to work.

Halifax, and other Atlantic Canada cities, lost points in the weather category. Known for its torrential rain and snow storms, Halifax is near the bottom for the number of days with rain and the number of days above 20C you can expect in a year.


PHOTOS:


Its unemployment rate is improving, but it’s still relatively high compared to other parts of the country at 6.7 per cent in March. On the other hand, for residents who can find a job, the average housing price is an affordable $349,000.

The bottom 25 cities in our cross-country ranking include 15 cities from Atlantic Canada. Slow population growth and an aging population are making it tough for the region to reverse the economic trends that keep its cities from advancing in our ranking.

The Best Places to Live ranks 415 cities across the country based on 10 categories: Wealth and economy, affordability, population growth, taxes, commute, crime, weather, access to health care, amenities and culture. For more information, please see the methodology page.

See the full ranking of Atlantic Canadian cities »

The post Best Places to Live in Atlantic Canada 2018 appeared first on MoneySense.



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *