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

app

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); })(); Service-Learning | app

app

Skip to main content

Service-Learning

Learning to serve, serving to learn

Be active in the world, and understand it in a whole new way. With app’s Service-Learning Center, you can learn together through community-based service-learning and social justice activities in Grand Rapids and in other communities.

Related pages

Service-Learning Center
Explore the mission and values behind app’s commitment to service, as well as a full list of service opportunities.

Quick facts
  • 1,800+

    students participated in service-learning projects in 2015–16

  • ~12

    spring break service-learning trips each year

  • 54,000

    total amount of service-learning hours logged by app students in a year

  • 195+

    total active agency partners

Ways to serve

Opportunities to be the hands and feet of Christ are endless. From weekly community service to once-in-a-lifetime trips, there are all sorts of ways to get involved.

As a new student, spend one day of orientation doing service-learning in Grand Rapids.

Join with classmates in a project that gives you service experience related to your class subject.

Work at a community organization that has partnered with your residence hall.

Spend a week serving and learning at one of 13 locations across the country.

Find an opportunity that fits your interests and schedule. Search opportunities »

Our stories

Showing 1–10 of 10

Results shown: 102050

See what we do

Learn to lead

If you discover that service-learning is a passion, you may want to consider inspiring others to get involved.