, but this code // executes before the first paint, when

麻豆区

is not yet present. The // classes are added to so styling immediately reflects the current // toolbar state. The classes are removed after the toolbar completes // initialization. const classesToAdd = ['toolbar-loading', 'toolbar-anti-flicker']; if (toolbarState) { const { orientation, hasActiveTab, isFixed, activeTray, activeTabId, isOriented, userButtonMinWidth } = toolbarState; classesToAdd.push( orientation ? `toolbar-` + orientation + `` : 'toolbar-horizontal', ); if (hasActiveTab !== false) { classesToAdd.push('toolbar-tray-open'); } if (isFixed) { classesToAdd.push('toolbar-fixed'); } if (isOriented) { classesToAdd.push('toolbar-oriented'); } if (activeTray) { // These styles are added so the active tab/tray styles are present // immediately instead of "flickering" on as the toolbar initializes. In // instances where a tray is lazy loaded, these styles facilitate the // lazy loaded tray appearing gracefully and without reflow. const styleContent = ` .toolbar-loading #` + activeTabId + ` { background-image: linear-gradient(rgba(255, 255, 255, 0.25) 20%, transparent 200%); } .toolbar-loading #` + activeTabId + `-tray { display: block; box-shadow: -1px 0 5px 2px rgb(0 0 0 / 33%); border-right: 1px solid #aaa; background-color: #f5f5f5; z-index: 0; } .toolbar-loading.toolbar-vertical.toolbar-tray-open #` + activeTabId + `-tray { width: 15rem; height: 100vh; } .toolbar-loading.toolbar-horizontal :not(#` + activeTray + `) > .toolbar-lining {opacity: 0}`; const style = document.createElement('style'); style.textContent = styleContent; style.setAttribute('data-toolbar-anti-flicker-loading', true); document.querySelector('head').appendChild(style); if (userButtonMinWidth) { const userButtonStyle = document.createElement('style'); userButtonStyle.textContent = `#toolbar-item-user {min-width: ` + userButtonMinWidth +`px;}` document.querySelector('head').appendChild(userButtonStyle); } } } document.querySelector('html').classList.add(...classesToAdd); })(); Blair Thomas | 麻豆区

麻豆区

Skip to main content

Blair Thomas

Adjunct Instructor

Biography

Blair Thomas has spent his entire career leading customers through change.  As vice president of client services at , he and his team work with shippers of all types to design, implement, sustain, and improve their distribution programs.  As a member of the executive team, he leads the corporate functions of industrial engineering, business process design and documentation, employee safety and training, and information technology. He also leads Columbian鈥檚 professional services consulting practice and owns account management responsibilities for several of the company鈥檚 consumer goods customers. 

Prior to moving to West Michigan, Thomas spent a decade in Chicago at DSC Logistics, now known as , working with large consumer brands including Kimberly Clark, Georgia Pacific, Nestle, Unilever Foods, Kellogg鈥檚, and the JM Smucker Company.

Thomas is a long-tenured member and former chair of the and serves as an independent consultant to organizations looking to improve their logistics management strategies.  

He holds a bachelor鈥檚 degree from Miami University in Oxford, Ohio and earned a master of business administration with concentrations in organizational leadership and change management from DePaul University in Chicago. 

Thomas recently 鈥渞etired鈥 from coaching youth soccer and hockey, but he and his wife remain as busy sports parents for their three children.