Historic Fort
About This Attraction
Castillo San Felipe del Morro, commonly known as El Morro, is a historic fortress located in San Juan, Puerto Rico. It was built by Spanish colonizers to protect the city from naval attacks and stands as a prominent example of 16th-century military architecture. Visitors can explore the expansive grounds, which include walls up to 140 feet high and six levels that offer panoramic views of the Atlantic Ocean. The site is part of the San Juan National Historic Site and provides insight into Puerto Ricos colonial past.
For practical visitors, its important to note the Castillo San Felipe del Morro opening hours, which are typically from 9:00 AM to 6:00 PM daily, though they may vary on holidays. Admission fees are affordable, making it accessible for families and tourists alike. The fortress also features informative exhibits detailing its history and significance. Whether youre interested in history or simply looking for scenic views, El Morro offers an educational experience suitable for all ages.
Location Details
Address
501 Norzagaray Street, San Juan, Puerto Rico
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
$10
Child
Free
Student
$10
Senior
$10
Opening Hours & Booking
Open
Days
Wednesday to Sunday
Hours
9:00 AM to 5:00 PM
Seasonality
Year-round
Booking
Booking Required?
No
Nearby Attractions
San Juan Cathedral, also known as Catedral Metropolitana Basílica de San Juan Bautista, is one…
Learn More
Old San Juan is a historic district in Puerto Ricos capital, San Juan. Known for…
Learn More
Condado Beach in San Juan is a popular destination for both locals and tourists. It…
Learn More
El Yunque National Forest in Luquillo, Puerto Rico, is the only tropical rainforest in the…
Learn More
Luquillo Beach is a popular destination in Puerto Rico known for its stunning crescent-shaped shoreline…
Learn More
The Malecón in Santo Domingo is a popular oceanfront avenue stretching along the Caribbean Sea.…
Learn More
Alcázar de Colón, located in Santo Domingo, Dominican Republic, is a historical landmark with significant…
Learn More
Zona Colonial in Santo Domingo is a historic neighborhood that is known for its colonial…
Learn More
The National Palace in Santo Domingo is an important government building and the official workplace…
Learn More
Baconao Park in Santiago de Cuba is a UNESCO Biosphere Reserve known for its natural…
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';
}
});
});
}
});