Observation Deck
About This Attraction
Cabo Girão Skywalk is a popular tourist destination located on the southern coast of Madeira, Portugal. It is renowned for its glass-floored platform that extends over 500 meters above sea level, providing visitors with breathtaking views of the Atlantic Ocean and the coastal cliffs below. The skywalk offers a thrilling experience for those who are not afraid of heights, and it is open to the public with no entrance fee. Cabo Girão Skywalk opening hours typically vary depending on the season, so it is advisable to check ahead before planning a visit.
In addition to offering stunning panoramic views, Cabo Girão is easily accessible by car or local bus services from Funchal, the capital city of Madeira. The surrounding area also features a café where visitors can relax and enjoy refreshments while taking in the scenery. Safety measures are in place to ensure a secure experience for all visitors, including reinforced glass panels that can support significant weight. Whether youre an adventure seeker or simply looking for a scenic spot to admire natures beauty, Cabo Girão Skywalk is a must-visit attraction on the island.
Location Details
Address
Cabo Girão, 9300-017 Câmara de Lobos, Madeira, Portugal
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
Free
Child
Free
Student
Free
Senior
Free
Opening Hours & Booking
Open
Days
Monday to Sunday
Hours
8:30 AM to 8:00 PM
Seasonality
Year-round
Booking
Booking Required?
No
Nearby Attractions
Monte Palace Madeira is a popular attraction located in Funchal, Madeira. It features a stunning…
Learn More
Pico Ruivo is the highest peak in Madeira, standing at an impressive 1,862 meters. It…
Learn More
Porto Santo Beach is a notable destination located on the island of Porto Santo in…
Learn More
Pico do Castelo is a prominent hill located on the island of Porto Santo, which…
Learn More
Anaga Rural Park is a protected natural area located in the northeastern part of Tenerife,…
Learn More
The Auditorio de Tenerife is an architectural marvel located in Santa Cruz de Tenerife, Spain.…
Learn More
Loro Parque in Tenerife is a popular zoo and aquarium that attracts visitors from around…
Learn More
Teide National Park in Tenerife is a UNESCO World Heritage site known for its stunning…
Learn More
Timanfaya National Park, located on the island of Lanzarote in Spains Canary Islands, is renowned…
Learn More
Siam Park in Tenerife is a popular water park known for its Thai-inspired architecture and…
Learn More
";
}
// Initialize modal controls
const initModalControls = function() {
console.log('Initializing modal controls');
const modal = document.getElementById('attraction-modal');
const closeBtn = document.querySelector('.attraction-modal-close');
if (closeBtn) {
closeBtn.addEventListener('click', function() {
modal.style.display = 'none';
document.body.style.overflow = '';
});
}
window.addEventListener('click', function(event) {
if (event.target === modal) {
modal.style.display = 'none';
document.body.style.overflow = '';
}
});
// Make attraction cards clickable
const attractionCards = document.querySelectorAll('.attraction-card');
console.log('Found ' + attractionCards.length + ' attraction cards');
attractionCards.forEach(card => {
card.addEventListener('click', function(e) {
openModalWithCardData(this);
});
});
};
// Function to open modal with card data
const openModalWithCardData = function(card) {
// Get data from hidden div
const data = card.querySelector('.attraction-full-data');
if (!data) {
console.error('No attraction data found in card');
return;
}
const modal = document.getElementById('attraction-modal');
if (!modal) {
console.error('Modal element still not found after creation attempt');
return;
}
// Helper function to safely get element text
function getElementText(selector) {
const element = data.querySelector(selector);
return element ? element.textContent : '';
}
try {
// Basic Info
document.getElementById('attraction-modal-title').textContent = getElementText('.attraction-name');
document.getElementById('attraction-modal-type').textContent = getElementText('.attraction-type-full');
document.getElementById('attraction-modal-description').textContent = getElementText('.attraction-description-full');
// Reset all containers to hidden
['attraction-modal-hours-container', 'attraction-modal-price-container',
'attraction-modal-address-container', 'attraction-modal-image-container'].forEach(id => {
const container = document.getElementById(id);
if (container) container.style.display = 'none';
});
// Rating
const ratingText = getElementText('.attraction-rating-full');
if (ratingText) {
const ratingValue = parseFloat(ratingText);
if (!isNaN(ratingValue)) {
const ratingValueEl = document.getElementById('attraction-modal-rating-value');
const ratingFillEl = document.getElementById('attraction-modal-rating-fill');
if (ratingValueEl) ratingValueEl.textContent = ratingValue.toFixed(1) + '/10';
if (ratingFillEl) ratingFillEl.style.width = (ratingValue * 10) + '%';
}
}
// Show the modal
modal.style.display = 'block';
document.body.style.overflow = 'hidden'; // Prevent background scrolling
console.log('Modal opened successfully');
} catch (error) {
console.error('Error opening modal:', error);
}
};
// Try to create the modal
const created = createModal();
console.log('Modal created:', created);
// If not created (already exists), initialize the controls
if (!created) {
initModalControls();
}
// Also initialize distance toggle
const distanceToggle = document.getElementById('distance-unit-toggle');
if (distanceToggle) {
distanceToggle.addEventListener('change', function() {
const showKm = this.checked;
// Update toggle labels
const labels = document.querySelectorAll('.toggle-label');
if (labels.length >= 2) {
labels[0].style.opacity = showKm ? '0.5' : '1';
labels[1].style.opacity = showKm ? '1' : '0.5';
}
// Update all distance displays
document.querySelectorAll('.nearby-attraction-card').forEach(card => {
const kmEl = card.querySelector('.distance-km');
const miEl = card.querySelector('.distance-mi');
if (kmEl && miEl) {
kmEl.style.display = showKm ? 'inline' : 'none';
miEl.style.display = showKm ? 'none' : 'inline';
}
});
});
}
});